Package org.fto.jthink.jdbc

Source Code of org.fto.jthink.jdbc.SQLBuilderTestCase

/*
* 创建日期 2005-7-15
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package org.fto.jthink.jdbc;




import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import javax.servlet.ServletInputStream;

import org.fto.jthink.jdbc.Column;
import org.fto.jthink.jdbc.Condition;
import org.fto.jthink.jdbc.SQL;
import org.fto.jthink.jdbc.SQLBuilder;
import org.fto.jthink.jdbc.hsql.HsqlSQLBuilder;
import org.fto.jthink.jdbc.mssql.MssqlSQLBuilder;
import org.fto.jthink.jdbc.mysql.MysqlSQLBuilder;
import org.fto.jthink.util.NumberHelper;

import junit.framework.TestCase;

/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class SQLBuilderTestCase extends TestCase {

  public static void main(String[] args) {
    junit.textui.TestRunner.run(SQLBuilderTestCase.class);
  }

  private SQLBuilder sqlBuilder = new DefaultSQLBuilder();
  private SQLBuilder hsqlBuilder = new HsqlSQLBuilder();
  private SQLBuilder mssqlSQLBuilder = new MssqlSQLBuilder();
  private SQLBuilder mysqlSQLBuilder = new MysqlSQLBuilder();
 
  /**
   *方法测试
   */
  public void testConstructSQLForInsert() {
    System.out.println("\n[正在测试方法: SQLBuilder.ConstructSQLForInsert()...]");
   
    HashMap columns = new HashMap();
    columns.put("DeptId", "1");
    columns.put("DeptName", "3");
    columns.put("DeptDesc", null);
    columns.put("F1", "1");
    columns.put("F2", "2");
    columns.put("F3", "3");
   
   
    /* constructSQLForInsert测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<1000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
          /* 测试代码 开始 */
          sqlBuilder.constructSQLForInsert("departments", columns).getSQLString();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.05 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
          //System.out.println("time:"+(NumberHelper.formatNumber(usetime, NumberHelper.NUMBER_I_6_0)));
      }
      System.out.println("constructSQLForInsert测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
    }

    SQL sqlStatement = sqlBuilder.constructSQLForInsert("departments", columns);
    System.out.println(sqlStatement.getSQLString());
    if(!"INSERT INTO departments (F1,DeptName,DeptId,F3,F2) VALUES (?,?,?,?,?) ".equals(sqlStatement.getSQLString())){
      super.fail();
    }
    printObjects(sqlStatement.getValues());
   
    DataObject data = new DefaultDataObject();
    data.setTableName("departments");
    data.set("DeptId", "1");
    sqlStatement = sqlBuilder.constructSQLForInsert(data);
    System.out.println(sqlStatement.getSQLString());
    printObjects(sqlStatement.getValues());
   
    //List a;
    //a.addAll(c)
  }

  /**
   *方法测试
   */
  public void testconstructSQLForUpdate() {
    System.out.println("\n[正在测试方法: SQLBuilder.constructSQLForUpdate()...]");
   
    HashMap columns = new HashMap();
    columns.put("DeptName", "test1");
    columns.put("DeptDesc", null);//"desc test1");
    columns.put("F1", "1");
    columns.put("F2", "2");
    columns.put("F3", "3");
    columns.put("F4", "4");
    columns.put("F5", "5");
   
    Condition condn = new Condition();
    Condition condn1 = new Condition();
    condn1.add(new ConditionItem("DeptId", "!=", "3"));
   
    Condition condn2 = new Condition();
    condn2.add(Condition.OR, new ConditionItem("DeptId", "Between", new Object[]{"6", "9"}));
    condn1.add("OR", condn2);
    condn.add(Condition.AND_NOT, new ConditionItem("DeptName", "like", "%部%"));
    condn.add(Condition.AND, condn1);
    condn.add(Condition.AND_NOT, new ConditionItem("DeptDesc", "like", "%技术%"));

   
    /* constructSQLForUpdate测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<2000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
          /* 测试代码 开始 */
          sqlBuilder.constructSQLForUpdate("departments", columns, condn).getSQLString();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.1 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
      }
      System.out.println("constructSQLForUpdate测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
    }  
   
    SQL sqlStatement = sqlBuilder.constructSQLForUpdate("departments", columns, condn);
    System.out.println("columns.size()+condn.size():"+(columns.size()*3+4));
    System.out.println("sqlStatement.getSQLStatement().size():"+sqlStatement.getSQLStatement().size());
    System.out.println(sqlStatement.getSQLString());
    if(!"UPDATE departments SET F1=?,DeptName=?,F5=?,F4=?,F3=?,F2=?,DeptDesc=NULL WHERE NOT DeptName like ? AND ( DeptId != ? OR ( DeptId Between ? AND ? ) ) AND NOT DeptDesc like ? ".equals(sqlStatement.getSQLString())){
      super.fail();
    }
    printObjects(sqlStatement.getValues());
   
   
    sqlStatement = sqlBuilder.constructSQLForUpdate("departments", columns, null);
    System.out.println(sqlStatement.getSQLString());
    //UPDATE departments SET DeptName=?,DeptDesc=NULL
    if(!"UPDATE departments SET F1=?,DeptName=?,F5=?,F4=?,F3=?,F2=?,DeptDesc=NULL".equals(sqlStatement.getSQLString())){
      super.fail();
    }
   
    DefaultDataObject ddo = new DefaultDataObject();
    ddo.setTableName("table1");
    ddo.addPrimaryKey("PK1");
    ddo.addPrimaryKey("PK2");
    ddo.set("PK1", "v1");
    ddo.set("PK2", "v2");
    ddo.set("F3", "v3");
    ddo.set("F4", "v4");
    sqlStatement = sqlBuilder.constructSQLForUpdate(ddo);
    System.out.println(sqlStatement.getSQLString());
    if(!"UPDATE table1 SET F4=?,F3=?,PK1=?,PK2=? WHERE  PK1 = ? AND PK2 = ? ".equals(sqlStatement.getSQLString())){
      super.fail();
    }
   
    printObjects(sqlStatement.getValues());
  }


  /**
   *方法测试
   */
  public void testconstructSQLForDelete() {
    System.out.println("\n[正在测试方法: SQLBuilder.constructSQLForDelete()...]");
   
    Condition condn = new Condition();
   
    Condition condn1 = new Condition();
    condn1.add(new ConditionItem("DeptId", "!=", "3"));
    Condition condn2 = new Condition();
    condn2.add(Condition.OR, new ConditionItem("DeptId", "Between", new Object[]{"6", "9"}));
    condn1.add("OR", condn2);
    condn.add(Condition.AND_NOT, new ConditionItem("DeptName", "like", "%部%"));
    condn.add(Condition.AND, condn1);

    /* constructSQLForDelete测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<2000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
          /* 测试代码 开始 */
          sqlBuilder.constructSQLForDelete("departments", condn).getSQLString();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.03 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
      }
      System.out.println("constructSQLForDelete测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
    }  
   
    SQL sqlStatement = sqlBuilder.constructSQLForDelete("departments", condn);
    System.out.println(sqlStatement.getSQLString());
        //DELETE FROM departments WHERE  DeptName like ? AND ( DeptId != ? OR ( DeptId Between ? AND ? ) )
    if(!"DELETE FROM departments WHERE NOT DeptName like ? AND ( DeptId != ? OR ( DeptId Between ? AND ? ) ) ".equals(sqlStatement.getSQLString())){
      super.fail();
    }
   
    DefaultDataObject ddo = new DefaultDataObject();
    ddo.setTableName("table1");
    ddo.addPrimaryKey("PK1");
    ddo.addPrimaryKey("PK2");
    ddo.set("PK1", "v1");
    ddo.set("PK2", "v2");
    sqlStatement = sqlBuilder.constructSQLForDelete(ddo);
    System.out.println(sqlStatement.getSQLString());
    if(!"DELETE FROM table1 WHERE  PK1 = ? AND PK2 = ? ".equals(sqlStatement.getSQLString())){
      super.fail();
    }
   
    printObjects(sqlStatement.getValues());
  }
  /**
   *方法测试
   */
  public void testconstructSQL_ForSelect$Condition() {
    System.out.println("\n[正在测试方法: SQLBuilder.testconstructSQL_ForSelect$Condition()...]");
   
    Condition condn = new Condition();
    condn.add(new ConditionItem("DEPT_NAME", "IN", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)));
    condn.add(new ConditionItem("DEPT_NO", "IS", "NOT NULL"));
    condn.add(new ConditionItem("F1", "=", "1"));
    condn.add(new ConditionItem("F2", "=", "2"));
    condn.add(new ConditionItem("F3", "=", "3"));
    condn.add(new ConditionItem("F4", "=", "4"));
    condn.add(new ConditionItem("F5", "=", "5"));
    condn.add(new ConditionItem("F6", "in", new Object[]{"1", "2", "3", "4"}));
   
   
    Column[] columns = new Column[]{
        new Column("DEPT_ID"),
        new Column("DEPT_NAME", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)),
        new Column("F1"),
        new Column("F2"),
        new Column("F3"),
        new Column("F4"),
        new Column("F5"),
        new Column("F6"),
    };
   
    /* constructSQLForSelect测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<2000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
          /* 测试代码 开始 */
          sqlBuilder.constructSQLForSelect("departments",false, columns, condn, (String)null, (String)null).getSQLString();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.09 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
      }
      System.out.println("constructSQLForSelect 测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
   
   
    SQL sqlStatement = sqlBuilder.constructSQLForSelect("departments", columns, condn);
    System.out.println("sqlStatement.getValues().length:"+sqlStatement.getValues().length);
    System.out.println("sqlStatement.getValueBuffered().size():"+sqlStatement.getValueBuffered().size());
    //System.out.println("sqlStatement.getValueBuffered().length():"+sqlStatement.getValueBuffered().length());
    //System.out.println("sqlStatement.getSQLStatement().size():"+sqlStatement.getSQLStatement().size());
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT DEPT_ID,(SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AS DEPT_NAME,F1,F2,F3,F4,F5,F6 FROM departments WHERE  DEPT_NAME IN (SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AND DEPT_NO IS NOT NULL AND F1 = ? AND F2 = ? AND F3 = ? AND F4 = ? AND F5 = ? AND F6 in (? ,? ,? ,? ) ".equals(sqlStatement.getSQLString())){
      super.fail();
    }
    printObjects(sqlStatement.getValues());  
  }
 
 
  /**
   *方法测试
   */
  public void testconstructSQL_ForSelect() {
    System.out.println("\n[正在测试方法: SQLBuilder.constructSQL_ForSelect()...]");
   
    Condition condn = new Condition();
   
    Condition condn1 = new Condition();
    condn1.add(new ConditionItem("DeptId", "!=", "3"));
   
    Condition condn2 = new Condition();
    condn2.add(Condition.OR, new ConditionItem("DeptId", "!=", new Integer(2)));
    condn2.add(Condition.OR, new ConditionItem("DeptId", "Between", new Object[]{"6", "9"}));
   
    condn1.add("OR", condn2);
   
    condn.add(Condition.AND_NOT, new ConditionItem("DeptName", "like", "%部%"));
    condn.add(Condition.AND, condn1);
//    condn.add(Condition.AND_NOT, "DeptDesc", "like", "%技术%");
   
    SQL sqlStatement = sqlBuilder.
          constructSQLForSelect("departments",
                true, null, condn, null, null);
   
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT  DISTINCT * FROM departments WHERE NOT DeptName like ? AND ( DeptId != ? OR ( DeptId != ? OR DeptId Between ? AND ? ) ) ".equals(sqlStatement.getSQLString())){
      super.fail();
    }
   
    printObjects(sqlStatement.getValues());
   
    Condition userNameCDN = new Condition();
    userNameCDN.add(new ConditionItem("Users.UserId", "=", "Departments.UserId", true));
    SQL userNameSQL = sqlBuilder.constructSQLForSelect("Users", new Column[]{new Column("UserName")}, userNameCDN);
   
    Column[] columns = new Column[]{
      new Column("DeptId"),
      new Column("DeptName", "DeptName"),
      new Column("DeptXXX1", "DeptName"),
      new Column("DeptXXX2", "DeptId*100/6"),
      new Column("DeptXXX3", (String)null),
      new Column("UserName", userNameSQL),
    };
//    new String[]{"DeptId, DeptName, DeptDesc"}

    //System.out.println("str comp:"+("DeptName"=="DeptName"));
   
    /* constructSQLForSelect测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<2000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
          /* 测试代码 开始 */
          SQL sql = sqlBuilder.constructSQLForSelect("departments",
              false, columns, condn, "DeptName", "DeptId");
          sql.getSQLString();
          //sql.getValueList().toArray();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.09 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
      }
      System.out.println("constructSQL_ForSelect 测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
    }
   
    sqlStatement = sqlBuilder.
    constructSQLForSelect("departments",
        false, columns, condn, "DeptName", "DeptId");
   
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT DeptId,DeptName,(DeptName) AS DeptXXX1,(DeptId*100/6) AS DeptXXX2,DeptXXX3,(SELECT UserName FROM Users WHERE  Users.UserId = Departments.UserId ) AS UserName FROM departments WHERE NOT DeptName like ? AND ( DeptId != ? OR ( DeptId != ? OR DeptId Between ? AND ? ) )  GROUP BY DeptName ORDER BY DeptId".equals(sqlStatement.getSQLString())){
      super.fail();
    }
    printObjects(sqlStatement.getValues());

    sqlStatement = sqlBuilder.
          constructSQLForSelect("departments",null, null);

    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT * FROM departments".equals(sqlStatement.getSQLString())){
      super.fail();
    }
   
    printObjects(sqlStatement.getValues());  
  }

 
  /**
   *方法测试
   */
  public void testconstructSQLForCount() {
    System.out.println("\n[正在测试方法: SQLBuilder.constructSQLForCount()...]");
   
    Condition condn = new Condition();
   
    Condition condn1 = new Condition();
    condn1.add(new ConditionItem("DeptId", "!=", "3"));
   
    Condition condn2 = new Condition();
    condn2.add(Condition.OR, new ConditionItem("DeptId", "!=", new Integer(2)));
    condn2.add(Condition.OR, new ConditionItem("DeptId", "Between", new Object[]{"6", "9"}));
   
    condn1.add("OR", condn2);
   
    condn.add(Condition.AND_NOT, new ConditionItem("DeptName", "like", "%部%"));
    condn.add(Condition.AND, condn1);

    /* constructSQLForCount测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<2000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
          /* 测试代码 开始 */
          sqlBuilder.constructSQLForCount("departments","*", "DeptCount", condn).getSQLString();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.05 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
      }
      System.out.println("constructSQLForCount 测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
   

    SQL sqlStatement = sqlBuilder.
            constructSQLForCount("departments","*", "DeptCount", condn);
    System.out.println("sqlStatement.getSQLStatement().size():"+sqlStatement.getSQLStatement().size());
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT COUNT(*) AS DeptCount FROM departments WHERE NOT DeptName like ? AND ( DeptId != ? OR ( DeptId != ? OR DeptId Between ? AND ? ) ) ".equals(sqlStatement.getSQLString())){
      super.fail();
    }
   
    printObjects(sqlStatement.getValues());  
   
   
    sqlStatement = sqlBuilder.
      constructSQLForCount("departments","DeptId", "DeptCount", null);
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT COUNT(DeptId) AS DeptCount FROM departments".equals(sqlStatement.getSQLString())){
      super.fail();
    }
    printObjects(sqlStatement.getValues());  
  }

 
  public void testHsqlSQLBuilder(){
    System.out.println("\n[正在测试方法: HsqlSQLBuilder.constructSQLForSelect()...]");
   
   
    Condition condn = new Condition();
    condn.add(new ConditionItem("DEPT_NAME", "IN", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)));
    condn.add(new ConditionItem("DEPT_NO", "IS", "NOT NULL"));
    condn.add(new ConditionItem("F1", "=", "1"));
    condn.add(new ConditionItem("F2", "=", "2"));
    condn.add(new ConditionItem("F3", "=", "3"));
    condn.add(new ConditionItem("F4", "=", "4"));
    condn.add(new ConditionItem("F5", "=", "5"));
    condn.add(new ConditionItem("F6", "in", new Object[]{"1", "2", "3", "4"}));
   
   
    Column[] columns = new Column[]{
        new Column("DEPT_ID"),
        new Column("DEPT_NAME", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)),
        new Column("F1"),
        new Column("F2"),
        new Column("F3"),
        new Column("F4"),
        new Column("F5"),
        new Column("F6"),
    };
   
    /* constructSQLForSelect测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<2000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
          condn = new Condition();
          condn.add(new ConditionItem("DEPT_NAME", "IN", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)));
          condn.add(new ConditionItem("DEPT_NO", "IS", "NOT NULL"));
          condn.add(new ConditionItem("F1", "=", "1"));
          condn.add(new ConditionItem("F2", "=", "2"));
          condn.add(new ConditionItem("F3", "=", "3"));
          condn.add(new ConditionItem("F4", "=", "4"));
          condn.add(new ConditionItem("F5", "=", "5"));
          condn.add(new ConditionItem("F6", "in", new Object[]{"1", "2", "3", "4"}));
         
         
          columns = new Column[]{
              new Column("DEPT_ID"),
              new Column("DEPT_NAME", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)),
              new Column("F1"),
              new Column("F2"),
              new Column("F3"),
              new Column("F4"),
              new Column("F5"),
              new Column("F6"),
          };         
         
          /* 测试代码 开始 */
          hsqlBuilder.constructSQLForSelect("departments",false, columns, condn, "DeptId", "DeptName", 5, 20).getSQLString();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.09 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
      }
      System.out.println("constructSQLForSelect 测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
   
   
    SQL sqlStatement = hsqlBuilder.constructSQLForSelect("departments",false, columns, condn, "DeptId", "DeptName", 5, 20);
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT  LIMIT 5 20 DEPT_ID,(SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AS DEPT_NAME,F1,F2,F3,F4,F5,F6 FROM departments WHERE  DEPT_NAME IN (SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AND DEPT_NO IS NOT NULL AND F1 = ? AND F2 = ? AND F3 = ? AND F4 = ? AND F5 = ? AND F6 in (? ,? ,? ,? )  GROUP BY DeptId ORDER BY DeptName".equals(sqlStatement.getSQLString())){
      super.fail();
    }
    printObjects(sqlStatement.getValues());  
   
    sqlStatement = hsqlBuilder.constructSQLForSelect("departments",false, null, null, "DeptId", "DeptName", 5, 20);
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT  LIMIT 5 20 * FROM departments GROUP BY DeptId ORDER BY DeptName".equals(sqlStatement.getSQLString())){
      super.fail();
    }
  }
 
  public void testMssqlSQLBuilder(){
    System.out.println("\n[正在测试方法: MssqlSQLBuilder.constructSQLForSelect()...]");
   
   
    Condition condn = new Condition();
    condn.add(new ConditionItem("DEPT_NAME", "IN", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)));
    condn.add(new ConditionItem("DEPT_NO", "IS", "NOT NULL"));
    condn.add(new ConditionItem("F1", "=", "1"));
    condn.add(new ConditionItem("F2", "=", "2"));
    condn.add(new ConditionItem("F3", "=", "3"));
    condn.add(new ConditionItem("F4", "=", "4"));
    condn.add(new ConditionItem("F5", "=", "5"));
    condn.add(new ConditionItem("F6", "in", new Object[]{"1", "2", "3", "4"}));
   
   
    Column[] columns = new Column[]{
        new Column("DEPT_ID"),
        new Column("DEPT_NAME", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)),
        new Column("F1"),
        new Column("F2"),
        new Column("F3"),
        new Column("F4"),
        new Column("F5"),
        new Column("F6"),
    };
   
    /* constructSQLForSelect测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<2000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
          Condition condnA = new Condition();
          condnA.add(new ConditionItem("DEPT_NAME", "IN", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=?", new Object[]{1})));
          condnA.add(new ConditionItem("DEPT_NAME", "IN", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID in (?)", new Object[]{1, 2, 3, 4})));
          condnA.add(new ConditionItem("DEPT_NO", "IS", "NOT NULL"));
          condnA.add(new ConditionItem("F1", "=", "1"));
          condnA.add(new ConditionItem("F2", "=", "2"));
          condnA.add(new ConditionItem("F3", "=", "3"));
          condnA.add(new ConditionItem("F4", "=", "4"));
          condnA.add(new ConditionItem("F5", "=", "5"));
          condnA.add(new ConditionItem("F6", "in", new Object[]{"1", "2", "3", "4"}));
         
         
          columns = new Column[]{
              new Column("DEPT_ID"),
              new Column("DEPT_NAME", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)),
              new Column("F1"),
              new Column("F2"),
              new Column("F3"),
              new Column("F4"),
              new Column("F5"),
              new Column("F6"),
          };
         
          /* 测试代码 开始 */
          mssqlSQLBuilder.constructSQLForSelect("departments",false, columns, condnA, "DeptId", "DeptName", 5, 20).getSQLString();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.09 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
      }
      System.out.println("constructSQLForSelect 测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
   
   
    SQL sqlStatement = mssqlSQLBuilder.constructSQLForSelect("departments",false, columns, condn, "DeptId", "DeptName", 5, 20);
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT  TOP 25 DEPT_ID,(SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AS DEPT_NAME,F1,F2,F3,F4,F5,F6 FROM departments WHERE  DEPT_NAME IN (SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AND DEPT_NO IS NOT NULL AND F1 = ? AND F2 = ? AND F3 = ? AND F4 = ? AND F5 = ? AND F6 in (? ,? ,? ,? )  GROUP BY DeptId ORDER BY DeptName".equals(sqlStatement.getSQLString())){
      super.fail();
    }
    printObjects(sqlStatement.getValues());  
    if(!getObjects(sqlStatement.getValues()).equals("1,2,3,4,5,1,2,3,4,")){
      super.fail();
    }
   
    sqlStatement = mssqlSQLBuilder.constructSQLForSelect("departments",false, null, null, "DeptId", "DeptName", 5, 20);
    System.out.println(sqlStatement.getSQLString());
    //if(!"SELECT  TOP 25 DEPT_ID,(SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AS DEPT_NAME,F1,F2,F3,F4,F5,F6 FROM departments WHERE  DEPT_NAME IN (SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AND DEPT_NO IS NOT NULL AND F1 = ? AND F2 = ? AND F3 = ? AND F4 = ? AND F5 = ? AND F6 in (? ,? ,? ,? )  GROUP BY DeptId ORDER BY DeptName".equals(sqlStatement.getSQLString())){
    //  super.fail();
    //}
   
   
  }
  public void testMysqlSQLBuilder(){
    System.out.println("\n[正在测试方法: MysqlSQLBuilder.constructSQLForSelect()...]");
   
   
    Condition condn = new Condition();
    condn.add(new ConditionItem("DEPT_NAME", "IN", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)));
    condn.add(new ConditionItem("DEPT_NO", "IS", "NOT NULL"));
    condn.add(new ConditionItem("F1", "=", "1"));
    condn.add(new ConditionItem("F2", "=", "2"));
    condn.add(new ConditionItem("F3", "=", "3"));
    condn.add(new ConditionItem("F4", "=", "4"));
    condn.add(new ConditionItem("F5", "=", "5"));
    condn.add(new ConditionItem("F6", "in", new Object[]{"1", "2", "3", "4"}));
   
   
    Column[] columns = new Column[]{
        new Column("DEPT_ID"),
        new Column("DEPT_NAME", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)),
        new Column("F1"),
        new Column("F2"),
        new Column("F3"),
        new Column("F4"),
        new Column("F5"),
        new Column("F6"),
    };
   
    /* constructSQLForSelect测试开始 */
    {
      double totalUseTime = 0;
      int count = 0;
      for(int i=0;i<2000;i++){//在此设置测试次数
          long stime = System.nanoTime();       
         
         
          condn = new Condition();
          condn.add(new ConditionItem("DEPT_NAME", "IN", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)));
          condn.add(new ConditionItem("DEPT_NO", "IS", "NOT NULL"));
          condn.add(new ConditionItem("F1", "=", "1"));
          condn.add(new ConditionItem("F2", "=", "2"));
          condn.add(new ConditionItem("F3", "=", "3"));
          condn.add(new ConditionItem("F4", "=", "4"));
          condn.add(new ConditionItem("F5", "=", "5"));
          condn.add(new ConditionItem("F6", "in", new Object[]{"1", "2", "3", "4"}));
         
         
          columns = new Column[]{
              new Column("DEPT_ID"),
              new Column("DEPT_NAME", new SQL(SQL.SELECT, "SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID", null)),
              new Column("F1"),
              new Column("F2"),
              new Column("F3"),
              new Column("F4"),
              new Column("F5"),
              new Column("F6"),
          };
         
          /* 测试代码 开始 */
          mysqlSQLBuilder.constructSQLForSelect("departments",false, columns, condn, "DeptId", "DeptName", 5, 20).getSQLString();
          /* 测试代码 结束 */
         
          double usetime = (System.nanoTime()-stime)/1000000f;
          if(usetime<0.05 && usetime>0){//大于50可认为是随机峰值,不参加统计,可根据情况调整
              totalUseTime += usetime;
              count++;
          }
      }
      System.out.println("constructSQLForSelect 测试 次数:"+count+", 总用时:"+NumberHelper.formatNumber(totalUseTime, NumberHelper.NUMBER_I_6_0)+", 平均用时(毫秒):"+NumberHelper.formatNumber((totalUseTime/count), NumberHelper.NUMBER_I_6_0));
   
   
    SQL sqlStatement = mysqlSQLBuilder.constructSQLForSelect("departments",false, columns, condn, "DeptId", "DeptName", 5, 20);
    System.out.println(sqlStatement.getSQLString());
    if(!"SELECT DEPT_ID,(SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AS DEPT_NAME,F1,F2,F3,F4,F5,F6 FROM departments WHERE  DEPT_NAME IN (SELECT DEPT_NAME FROM ALL_DEPTS WHERE D.DEPT_ID=C.DEPT_ID) AND DEPT_NO IS NOT NULL AND F1 = ? AND F2 = ? AND F3 = ? AND F4 = ? AND F5 = ? AND F6 in (? ,? ,? ,? )  GROUP BY DeptId ORDER BY DeptName LIMIT 5,20".equals(sqlStatement.getSQLString())){
      super.fail();
    }
    printObjects(sqlStatement.getValues());  
    if(!getObjects(sqlStatement.getValues()).equals("1,2,3,4,5,1,2,3,4,")){
      super.fail();
    }
   
    sqlStatement = mysqlSQLBuilder.constructSQLForSelect("departments",false, null, null, "DeptId", "DeptName", 5, 20);
    System.out.println(sqlStatement.getSQLString());
  }
 
  private String getObjects(Object[] objs){
    String str = "";
    for(int i=0;i<objs.length;i++){
      str += (objs[i]+",");
    }
    return str;
  }
 
  private void printObjects(Object[] objs){
    for(int i=0;i<objs.length;i++){
      System.out.print(objs[i]+",");
    }
    System.out.println();
  }
}
TOP

Related Classes of org.fto.jthink.jdbc.SQLBuilderTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.