refactor sql parser.

This commit is contained in:
wenshao
2017-06-02 15:47:57 +08:00
parent 82d691365a
commit 4ea81bca69
78 changed files with 965 additions and 653 deletions
@@ -47,22 +47,24 @@ public class PagerUtilsTest_Count_MySql_0 extends TestCase {
public void test_mysql_group_0() throws Exception {
String sql = "select type, count(*) from t group by type";
String result = PagerUtils.count(sql, JdbcConstants.MYSQL);
Assert.assertEquals("SELECT COUNT(*)" + //
"\nFROM (SELECT type, COUNT(*)" + //
"\n\tFROM t" + //
"\n\tGROUP BY type" + //
"\n\t) ALIAS_COUNT", result);
Assert.assertEquals("SELECT COUNT(*)\n" +
"FROM (\n" +
"\tSELECT type, COUNT(*)\n" +
"\tFROM t\n" +
"\tGROUP BY type\n" +
") ALIAS_COUNT", result);
}
public void test_mysql_union_0() throws Exception {
String sql = "select id, name from t1 union select id, name from t2 order by id";
String result = PagerUtils.count(sql, JdbcConstants.MYSQL);
Assert.assertEquals("SELECT COUNT(*)\n" + //
"FROM ((SELECT id, name" + //
"\n\tFROM t1)" + //
"\n\tUNION" + //
"\n\t(SELECT id, name" + //
"\n\tFROM t2)" + //
"\n\t) ALIAS_COUNT", result);
Assert.assertEquals("SELECT COUNT(*)\n" +
"FROM (\n" +
"\t(SELECT id, name\n" +
"\tFROM t1)\n" +
"\tUNION\n" +
"\t(SELECT id, name\n" +
"\tFROM t2)\n" +
") ALIAS_COUNT", result);
}
}
@@ -33,22 +33,24 @@ public class PagerUtilsTest_Count_Oracle_0 extends TestCase {
public void test_oracle_group_0() throws Exception {
String sql = "select type, count(*) from t group by type";
String result = PagerUtils.count(sql, JdbcConstants.ORACLE);
Assert.assertEquals("SELECT COUNT(*)" + //
"\nFROM (SELECT type, COUNT(*)" + //
"\n\tFROM t" + //
"\n\tGROUP BY type" + //
"\n\t) ALIAS_COUNT", result);
Assert.assertEquals("SELECT COUNT(*)\n" +
"FROM (\n" +
"\tSELECT type, COUNT(*)\n" +
"\tFROM t\n" +
"\tGROUP BY type\n" +
") ALIAS_COUNT", result);
}
public void test_oracle_union_0() throws Exception {
String sql = "select id, name from t1 union select id, name from t2 order by id";
String result = PagerUtils.count(sql, JdbcConstants.ORACLE);
Assert.assertEquals("SELECT COUNT(*)\n" + //
"FROM (SELECT id, name" + //
"\n\tFROM t1" + //
"\n\tUNION" + //
"\n\tSELECT id, name" + //
"\n\tFROM t2" + //
"\n\t) ALIAS_COUNT", result);
Assert.assertEquals("SELECT COUNT(*)\n" +
"FROM (\n" +
"\tSELECT id, name\n" +
"\tFROM t1\n" +
"\tUNION\n" +
"\tSELECT id, name\n" +
"\tFROM t2\n" +
") ALIAS_COUNT", result);
}
}
@@ -33,22 +33,24 @@ public class PagerUtilsTest_Count_PG_0 extends TestCase {
public void test_pg_group_0() throws Exception {
String sql = "select type, count(*) from t group by type";
String result = PagerUtils.count(sql, JdbcConstants.POSTGRESQL);
Assert.assertEquals("SELECT COUNT(*)" + //
"\nFROM (SELECT type, COUNT(*)" + //
"\n\tFROM t" + //
"\n\tGROUP BY type" + //
"\n\t) ALIAS_COUNT", result);
Assert.assertEquals("SELECT COUNT(*)\n" +
"FROM (\n" +
"\tSELECT type, COUNT(*)\n" +
"\tFROM t\n" +
"\tGROUP BY type\n" +
") ALIAS_COUNT", result);
}
public void test_pg_union_0() throws Exception {
String sql = "select id, name from t1 union select id, name from t2 order by id";
String result = PagerUtils.count(sql, JdbcConstants.POSTGRESQL);
Assert.assertEquals("SELECT COUNT(*)\n" + //
"FROM (SELECT id, name" + //
"\n\tFROM t1" + //
"\n\tUNION" + //
"\n\tSELECT id, name" + //
"\n\tFROM t2" + //
"\n\t) ALIAS_COUNT", result);
Assert.assertEquals("SELECT COUNT(*)\n" +
"FROM (\n" +
"\tSELECT id, name\n" +
"\tFROM t1\n" +
"\tUNION\n" +
"\tSELECT id, name\n" +
"\tFROM t2\n" +
") ALIAS_COUNT", result);
}
}
@@ -33,22 +33,24 @@ public class PagerUtilsTest_Count_SQLServer_0 extends TestCase {
public void test_sqlserver_group_0() throws Exception {
String sql = "select type, count(*) from t group by type";
String result = PagerUtils.count(sql, JdbcConstants.SQL_SERVER);
Assert.assertEquals("SELECT COUNT(*)" + //
"\nFROM (SELECT type, COUNT(*)" + //
"\n\tFROM t" + //
"\n\tGROUP BY type" + //
"\n\t) ALIAS_COUNT", result);
Assert.assertEquals("SELECT COUNT(*)\n" +
"FROM (\n" +
"\tSELECT type, COUNT(*)\n" +
"\tFROM t\n" +
"\tGROUP BY type\n" +
") ALIAS_COUNT", result);
}
public void test_sqlserver_union_0() throws Exception {
String sql = "select id, name from t1 union select id, name from t2 order by id";
String result = PagerUtils.count(sql, JdbcConstants.SQL_SERVER);
Assert.assertEquals("SELECT COUNT(*)\n" + //
"FROM (SELECT id, name" + //
"\n\tFROM t1" + //
"\n\tUNION" + //
"\n\tSELECT id, name" + //
"\n\tFROM t2" + //
"\n\t) ALIAS_COUNT", result);
Assert.assertEquals("SELECT COUNT(*)\n" +
"FROM (\n" +
"\tSELECT id, name\n" +
"\tFROM t1\n" +
"\tUNION\n" +
"\tSELECT id, name\n" +
"\tFROM t2\n" +
") ALIAS_COUNT", result);
}
}
@@ -12,16 +12,18 @@ public class PagerUtilsTest_Limit_SQLServer_1 extends TestCase {
public void test_db2_union() throws Exception {
String sql = "select * from t1 union select * from t2";
String result = PagerUtils.limit(sql, JdbcConstants.SQL_SERVER, 20, 10);
Assert.assertEquals("SELECT *" //
+ "\nFROM (SELECT XX.*, ROW_NUMBER() OVER () AS ROWNUM" //
+ "\n\tFROM (SELECT *" //
+ "\n\t\tFROM t1" //
+ "\n\t\tUNION" //
+ "\n\t\tSELECT *" //
+ "\n\t\tFROM t2" //
+ "\n\t\t) XX" //
+ "\n\t) XXX" //
+ "\nWHERE ROWNUM > 20" //
+ "\n\tAND ROWNUM <= 30", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT XX.*, ROW_NUMBER() OVER () AS ROWNUM\n" +
"\tFROM (\n" +
"\t\tSELECT *\n" +
"\t\tFROM t1\n" +
"\t\tUNION\n" +
"\t\tSELECT *\n" +
"\t\tFROM t2\n" +
"\t) XX\n" +
") XXX\n" +
"WHERE ROWNUM > 20\n" +
"\tAND ROWNUM <= 30", result);
}
}
@@ -12,12 +12,13 @@ public class PagerUtilsTest_Limit_SQLServer_2 extends TestCase {
public void test_db2_union() throws Exception {
String sql = "select * from t1 union select * from t2";
String result = PagerUtils.limit(sql, JdbcConstants.SQL_SERVER, 0, 10);
Assert.assertEquals("SELECT TOP 10 XX.*" //
+ "\nFROM (SELECT *" //
+ "\n\tFROM t1" //
+ "\n\tUNION" //
+ "\n\tSELECT *" //
+ "\n\tFROM t2" //
+ "\n\t) XX", result);
Assert.assertEquals("SELECT TOP 10 XX.*\n" +
"FROM (\n" +
"\tSELECT *\n" +
"\tFROM t1\n" +
"\tUNION\n" +
"\tSELECT *\n" +
"\tFROM t2\n" +
") XX", result);
}
}
@@ -12,12 +12,13 @@ public class PagerUtilsTest_Limit_SQLServer_4 extends TestCase {
public void test_db2_union() throws Exception {
String sql = "select * from t1 where id > 1";
String result = PagerUtils.limit(sql, JdbcConstants.SQL_SERVER, 100, 10);
Assert.assertEquals("SELECT *" //
+ "\nFROM (SELECT *, ROW_NUMBER() OVER () AS ROWNUM" //
+ "\n\tFROM t1" //
+ "\n\tWHERE id > 1" //
+ "\n\t) XX" //
+ "\nWHERE ROWNUM > 100" //
+ "\n\tAND ROWNUM <= 110", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT *, ROW_NUMBER() OVER () AS ROWNUM\n" +
"\tFROM t1\n" +
"\tWHERE id > 1\n" +
") XX\n" +
"WHERE ROWNUM > 100\n" +
"\tAND ROWNUM <= 110", result);
}
}
@@ -20,35 +20,38 @@ public class PagerUtilsTest_Limit_db2_0 extends TestCase {
public void test_mysql_1() throws Exception {
String sql = "select * from t";
String result = PagerUtils.limit(sql, JdbcConstants.DB2, 10, 10);
Assert.assertEquals("SELECT *"//
+ "\nFROM (SELECT *, ROW_NUMBER() OVER () AS ROWNUM"//
+ "\n\tFROM t"//
+ "\n\t) XX"//
+ "\nWHERE ROWNUM > 10"//
+ "\n\tAND ROWNUM <= 20", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT *, ROW_NUMBER() OVER () AS ROWNUM\n" +
"\tFROM t\n" +
") XX\n" +
"WHERE ROWNUM > 10\n" +
"\tAND ROWNUM <= 20", result);
}
public void test_mysql_2() throws Exception {
String sql = "select * from t where age > 100";
String result = PagerUtils.limit(sql, JdbcConstants.DB2, 20, 10);
Assert.assertEquals("SELECT *"//
+ "\nFROM (SELECT *, ROW_NUMBER() OVER () AS ROWNUM"//
+ "\n\tFROM t"//
+ "\n\tWHERE age > 100"//
+ "\n\t) XX"//
+ "\nWHERE ROWNUM > 20"//
+ "\n\tAND ROWNUM <= 30", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT *, ROW_NUMBER() OVER () AS ROWNUM\n" +
"\tFROM t\n" +
"\tWHERE age > 100\n" +
") XX\n" +
"WHERE ROWNUM > 20\n" +
"\tAND ROWNUM <= 30", result);
}
public void test_mysql_3() throws Exception {
String sql = "select id, name, salary from t order by id, name";
String result = PagerUtils.limit(sql, JdbcConstants.DB2, 20, 10);
Assert.assertEquals("SELECT *"//
+ "\nFROM (SELECT id, name, salary, ROW_NUMBER() OVER (ORDER BY id, name) AS ROWNUM"//
+ "\n\tFROM t"//
+ "\n\t) XX"//
+ "\nWHERE ROWNUM > 20"//
+ "\n\tAND ROWNUM <= 30", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT id, name, salary, ROW_NUMBER() OVER (ORDER BY id, name) AS ROWNUM\n" +
"\tFROM t\n" +
") XX\n" +
"WHERE ROWNUM > 20\n" +
"\tAND ROWNUM <= 30", result);
}
public void test_fetch_order() {
@@ -12,16 +12,18 @@ public class PagerUtilsTest_Limit_db2_1 extends TestCase {
public void test_db2_union() throws Exception {
String sql = "select * from t1 union select * from t2";
String result = PagerUtils.limit(sql, JdbcConstants.DB2, 20, 10);
Assert.assertEquals("SELECT *" //
+ "\nFROM (SELECT XX.*, ROW_NUMBER() OVER () AS ROWNUM" //
+ "\n\tFROM (SELECT *" //
+ "\n\t\tFROM t1" //
+ "\n\t\tUNION" //
+ "\n\t\tSELECT *" //
+ "\n\t\tFROM t2" //
+ "\n\t\t) XX" //
+ "\n\t) XXX" //
+ "\nWHERE ROWNUM > 20" //
+ "\n\tAND ROWNUM <= 30", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT XX.*, ROW_NUMBER() OVER () AS ROWNUM\n" +
"\tFROM (\n" +
"\t\tSELECT *\n" +
"\t\tFROM t1\n" +
"\t\tUNION\n" +
"\t\tSELECT *\n" +
"\t\tFROM t2\n" +
"\t) XX\n" +
") XXX\n" +
"WHERE ROWNUM > 20\n" +
"\tAND ROWNUM <= 30", result);
}
}
@@ -12,12 +12,13 @@ public class PagerUtilsTest_Limit_oracle_0 extends TestCase {
public void test_oracle_oderby_0() throws Exception {
String sql = "select * from t order by id";
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 0, 10);
Assert.assertEquals("SELECT XX.*, ROWNUM AS RN" + //
"\nFROM (SELECT *" + //
"\n\tFROM t" + //
"\n\tORDER BY id" + //
"\n\t) XX" + //
"\nWHERE ROWNUM <= 10", result);
Assert.assertEquals("SELECT XX.*, ROWNUM AS RN\n" +
"FROM (\n" +
"\tSELECT *\n" +
"\tFROM t\n" +
"\tORDER BY id\n" +
") XX\n" +
"WHERE ROWNUM <= 10", result);
}
public void test_oracle_0() throws Exception {
@@ -31,40 +32,46 @@ public class PagerUtilsTest_Limit_oracle_0 extends TestCase {
public void test_oracle_1() throws Exception {
String sql = "select * from t";
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 10, 10);
Assert.assertEquals("SELECT *" + //
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
"\n\tFROM (SELECT *" + //
"\n\t\tFROM t" + //
"\n\t\t) XX" + //
"\n\tWHERE ROWNUM <= 20" + //
"\n\t) XXX" + //
"\nWHERE RN > 10", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT XX.*, ROWNUM AS RN\n" +
"\tFROM (\n" +
"\t\tSELECT *\n" +
"\t\tFROM t\n" +
"\t) XX\n" +
"\tWHERE ROWNUM <= 20\n" +
") XXX\n" +
"WHERE RN > 10", result);
}
public void test_oracle_2() throws Exception {
String sql = "select * from t";
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 20, 10);
Assert.assertEquals("SELECT *" + //
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
"\n\tFROM (SELECT *" + //
"\n\t\tFROM t" + //
"\n\t\t) XX" + //
"\n\tWHERE ROWNUM <= 30" + //
"\n\t) XXX" + //
"\nWHERE RN > 20", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT XX.*, ROWNUM AS RN\n" +
"\tFROM (\n" +
"\t\tSELECT *\n" +
"\t\tFROM t\n" +
"\t) XX\n" +
"\tWHERE ROWNUM <= 30\n" +
") XXX\n" +
"WHERE RN > 20", result);
}
public void test_oracle_3() throws Exception {
String sql = "select id, name, salary from t order by id, name";
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 20, 10);
Assert.assertEquals("SELECT *" + //
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
"\n\tFROM (SELECT id, name, salary" + //
"\n\t\tFROM t" + //
"\n\t\tORDER BY id, name" + //
"\n\t\t) XX" + //
"\n\tWHERE ROWNUM <= 30" + //
"\n\t) XXX" + //
"\nWHERE RN > 20", result);
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT XX.*, ROWNUM AS RN\n" +
"\tFROM (\n" +
"\t\tSELECT id, name, salary\n" +
"\t\tFROM t\n" +
"\t\tORDER BY id, name\n" +
"\t) XX\n" +
"\tWHERE ROWNUM <= 30\n" +
") XXX\n" +
"WHERE RN > 20", result);
}
}
@@ -64,30 +64,34 @@ public class DB2SelectTest_10 extends DB2Test {
// Assert.assertTrue(visitor.getColumns().contains(new Column("mytable", "first_name")));
// Assert.assertTrue(visitor.getColumns().contains(new Column("mytable", "full_name")));
Assert.assertEquals("SELECT *"
+ "\nFROM (SELECT inner2_.*, ROWNUMBER() OVER (ORDER BY order OF inner2_) AS rownumber_"
+ "\n\tFROM (SELECT tsuserstb0_.USERID AS USERID1_1_, tsuserstb0_.CREASTAF AS CREASTAF2_1_, tsuserstb0_.CREATIME AS CREATIME3_1_, tsuserstb0_.LOCORGNO AS LOCORGNO4_1_, tsuserstb0_.PWDMODIFYTIME AS PWDMODIF5_1_"
+ "\n\t\t\t, tsuserstb0_.REMARK01 AS REMARK6_1_, tsuserstb0_.REMARK02 AS REMARK7_1_, tsuserstb0_.STAORGNO AS STAORGNO8_1_, tsuserstb0_.UPDASTAF AS UPDASTAF9_1_, tsuserstb0_.UPDATIME AS UPDATIM10_1_"
+ "\n\t\t\t, tsuserstb0_.USERNAME AS USERNAM11_1_, tsuserstb0_.USERPWD AS USERPWD12_1_, tsuserstb0_.USERSTATE AS USERSTA13_1_"
+ "\n\t\tFROM TS_USERSTB tsuserstb0_"
+ "\n\t\tFETCH FIRST 20 ROWS ONLY"
+ "\n\t\t) inner2_"
+ "\n\t) inner1_"
+ "\nWHERE rownumber_ > 10"
+ "\nORDER BY rownumber_", //
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT inner2_.*, ROWNUMBER() OVER (ORDER BY order OF inner2_) AS rownumber_\n" +
"\tFROM (\n" +
"\t\tSELECT tsuserstb0_.USERID AS USERID1_1_, tsuserstb0_.CREASTAF AS CREASTAF2_1_, tsuserstb0_.CREATIME AS CREATIME3_1_, tsuserstb0_.LOCORGNO AS LOCORGNO4_1_, tsuserstb0_.PWDMODIFYTIME AS PWDMODIF5_1_\n" +
"\t\t\t, tsuserstb0_.REMARK01 AS REMARK6_1_, tsuserstb0_.REMARK02 AS REMARK7_1_, tsuserstb0_.STAORGNO AS STAORGNO8_1_, tsuserstb0_.UPDASTAF AS UPDASTAF9_1_, tsuserstb0_.UPDATIME AS UPDATIM10_1_\n" +
"\t\t\t, tsuserstb0_.USERNAME AS USERNAM11_1_, tsuserstb0_.USERPWD AS USERPWD12_1_, tsuserstb0_.USERSTATE AS USERSTA13_1_\n" +
"\t\tFROM TS_USERSTB tsuserstb0_\n" +
"\t\tFETCH FIRST 20 ROWS ONLY\n" +
"\t) inner2_\n" +
") inner1_\n" +
"WHERE rownumber_ > 10\n" +
"ORDER BY rownumber_", //
SQLUtils.toSQLString(stmt, JdbcConstants.DB2));
Assert.assertEquals("select *"
+ "\nfrom (select inner2_.*, rownumber() over (order by order of inner2_) as rownumber_"
+ "\n\tfrom (select tsuserstb0_.USERID as USERID1_1_, tsuserstb0_.CREASTAF as CREASTAF2_1_, tsuserstb0_.CREATIME as CREATIME3_1_, tsuserstb0_.LOCORGNO as LOCORGNO4_1_, tsuserstb0_.PWDMODIFYTIME as PWDMODIF5_1_"
+ "\n\t\t\t, tsuserstb0_.REMARK01 as REMARK6_1_, tsuserstb0_.REMARK02 as REMARK7_1_, tsuserstb0_.STAORGNO as STAORGNO8_1_, tsuserstb0_.UPDASTAF as UPDASTAF9_1_, tsuserstb0_.UPDATIME as UPDATIM10_1_"
+ "\n\t\t\t, tsuserstb0_.USERNAME as USERNAM11_1_, tsuserstb0_.USERPWD as USERPWD12_1_, tsuserstb0_.USERSTATE as USERSTA13_1_"
+ "\n\t\tfrom TS_USERSTB tsuserstb0_"
+ "\n\t\tfetch first 20 rows only"
+ "\n\t\t) inner2_"
+ "\n\t) inner1_"
+ "\nwhere rownumber_ > 10"
+ "\norder by rownumber_", //
Assert.assertEquals("select *\n" +
"from (\n" +
"\tselect inner2_.*, rownumber() over (order by order of inner2_) as rownumber_\n" +
"\tfrom (\n" +
"\t\tselect tsuserstb0_.USERID as USERID1_1_, tsuserstb0_.CREASTAF as CREASTAF2_1_, tsuserstb0_.CREATIME as CREATIME3_1_, tsuserstb0_.LOCORGNO as LOCORGNO4_1_, tsuserstb0_.PWDMODIFYTIME as PWDMODIF5_1_\n" +
"\t\t\t, tsuserstb0_.REMARK01 as REMARK6_1_, tsuserstb0_.REMARK02 as REMARK7_1_, tsuserstb0_.STAORGNO as STAORGNO8_1_, tsuserstb0_.UPDASTAF as UPDASTAF9_1_, tsuserstb0_.UPDATIME as UPDATIM10_1_\n" +
"\t\t\t, tsuserstb0_.USERNAME as USERNAM11_1_, tsuserstb0_.USERPWD as USERPWD12_1_, tsuserstb0_.USERSTATE as USERSTA13_1_\n" +
"\t\tfrom TS_USERSTB tsuserstb0_\n" +
"\t\tfetch first 20 rows only\n" +
"\t) inner2_\n" +
") inner1_\n" +
"where rownumber_ > 10\n" +
"order by rownumber_", //
SQLUtils.toSQLString(stmt, JdbcConstants.DB2, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
}
}
@@ -73,18 +73,20 @@ public class DB2SelectTest_5 extends DB2Test {
// Assert.assertTrue(visitor.getColumns().contains(new Column("mytable", "full_name")));
String output = SQLUtils.toSQLString(stmt, JdbcConstants.DB2);
Assert.assertEquals("SELECT *"//
+ "\nFROM (SELECT TEMP_TAB.*, ROWNUMBER() OVER () AS IDX"//
+ "\n\tFROM (SELECT DISTINCT OH.ORDER_ID"//
+ "\n\t\tFROM ORDER_HEADER OH, ORDER_ITEM OI, ORDER_PAYMENT_PERFERENCE OPP, ORDER_SHIPMENT_PERFERENCE OSP"//
+ "\n\t\tWHERE OH.ORDER_ID = OI.ORDER_ID"//
+ "\n\t\t\tAND OH.ORDER_ID = OPP.ORDER_ID"//
+ "\n\t\t\tAND OH.ORDER_ID = OSP.ORDER_ID"//
+ "\n\t\t\tAND OH.ORDER_ID = ?"//
+ "\n\t\t) TEMP_TAB"//
+ "\n\t) TEMP_TAB_WITH_IDX"//
+ "\nWHERE TEMP_TAB_WITH_IDX.IDX > 0"//
+ "\n\tAND TEMP_TAB_WITH_IDX.IDX <= 20", //
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT TEMP_TAB.*, ROWNUMBER() OVER () AS IDX\n" +
"\tFROM (\n" +
"\t\tSELECT DISTINCT OH.ORDER_ID\n" +
"\t\tFROM ORDER_HEADER OH, ORDER_ITEM OI, ORDER_PAYMENT_PERFERENCE OPP, ORDER_SHIPMENT_PERFERENCE OSP\n" +
"\t\tWHERE OH.ORDER_ID = OI.ORDER_ID\n" +
"\t\t\tAND OH.ORDER_ID = OPP.ORDER_ID\n" +
"\t\t\tAND OH.ORDER_ID = OSP.ORDER_ID\n" +
"\t\t\tAND OH.ORDER_ID = ?\n" +
"\t) TEMP_TAB\n" +
") TEMP_TAB_WITH_IDX\n" +
"WHERE TEMP_TAB_WITH_IDX.IDX > 0\n" +
"\tAND TEMP_TAB_WITH_IDX.IDX <= 20", //
output);
}
}
@@ -37,14 +37,16 @@ public class CobarHintsTest extends TestCase {
") b Order by product_id desc ) a limit 25 offset (1-1)*20";
String mergedSql = ParameterizedOutputVisitorUtils.parameterize(sql, JdbcUtils.POSTGRESQL);
Assert.assertEquals("SELECT product_id, noeff_days, total_cnt"
+ "\nFROM (SELECT product_id, noeff_days, COUNT(*) OVER () AS total_cnt"
+ "\n\tFROM (SELECT product_id, noeff_days"
+ "\n\t\tFROM ireport.dm_mdm_mem_prod_noeff_sdt0"
+ "\n\t\tWHERE admin_member_seq = ?"
+ "\n\t\t) b"
+ "\n\tORDER BY product_id DESC"
+ "\n\t) a"
+ "\nLIMIT ? OFFSET (? - ?) * ?", mergedSql);
Assert.assertEquals("SELECT product_id, noeff_days, total_cnt\n" +
"FROM (\n" +
"\tSELECT product_id, noeff_days, COUNT(*) OVER () AS total_cnt\n" +
"\tFROM (\n" +
"\t\tSELECT product_id, noeff_days\n" +
"\t\tFROM ireport.dm_mdm_mem_prod_noeff_sdt0\n" +
"\t\tWHERE admin_member_seq = ?\n" +
"\t) b\n" +
"\tORDER BY product_id DESC\n" +
") a\n" +
"LIMIT ? OFFSET (? - ?) * ?", mergedSql);
}
}
@@ -42,38 +42,44 @@ public class MySqlDeleteTest_3 extends MysqlTest {
MySqlStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
Assert.assertEquals("DELETE FROM t1"
+ "\nWHERE s11 > ANY (SELECT COUNT(*)"
+ "\n\t\tFROM t2"
+ "\n\t\tWHERE NOT EXISTS ("
+ "\n\t\t\tSELECT *"
+ "\n\t\t\tFROM t3"
+ "\n\t\t\tWHERE ROW(5 * t2.s1, 77) = ("
+ "\n\t\t\t\t(SELECT 50, 11 * s1"
+ "\n\t\t\t\tFROM t4)"
+ "\n\t\t\t\tUNION"
+ "\n\t\t\t\t(SELECT 50, 77"
+ "\n\t\t\t\tFROM (SELECT *"
+ "\n\t\t\t\t\tFROM t5"
+ "\n\t\t\t\t\t) t5)"
+ "\n\t\t\t\t)"
+ "\n\t\t\t))", SQLUtils.toMySqlString(stmt));
Assert.assertEquals("delete from t1"
+ "\nwhere s11 > any (select count(*)"
+ "\n\t\tfrom t2"
+ "\n\t\twhere not exists ("
+ "\n\t\t\tselect *"
+ "\n\t\t\tfrom t3"
+ "\n\t\t\twhere ROW(5 * t2.s1, 77) = ("
+ "\n\t\t\t\t(select 50, 11 * s1"
+ "\n\t\t\t\tfrom t4)"
+ "\n\t\t\t\tunion"
+ "\n\t\t\t\t(select 50, 77"
+ "\n\t\t\t\tfrom (select *"
+ "\n\t\t\t\t\tfrom t5"
+ "\n\t\t\t\t\t) t5)"
+ "\n\t\t\t\t)"
+ "\n\t\t\t))", SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
Assert.assertEquals("DELETE FROM t1\n" +
"WHERE s11 > ANY (\n" +
"\t\tSELECT COUNT(*)\n" +
"\t\tFROM t2\n" +
"\t\tWHERE NOT EXISTS (\n" +
"\t\t\tSELECT *\n" +
"\t\t\tFROM t3\n" +
"\t\t\tWHERE ROW(5 * t2.s1, 77) = (\n" +
"\t\t\t\t(SELECT 50, 11 * s1\n" +
"\t\t\t\tFROM t4)\n" +
"\t\t\t\tUNION\n" +
"\t\t\t\t(SELECT 50, 77\n" +
"\t\t\t\tFROM (\n" +
"\t\t\t\t\tSELECT *\n" +
"\t\t\t\t\tFROM t5\n" +
"\t\t\t\t) t5)\n" +
"\t\t\t\t)\n" +
"\t\t\t)\n" +
"\t)", SQLUtils.toMySqlString(stmt));
assertEquals("delete from t1\n" +
"where s11 > any (\n" +
"\t\tselect count(*)\n" +
"\t\tfrom t2\n" +
"\t\twhere not exists (\n" +
"\t\t\tselect *\n" +
"\t\t\tfrom t3\n" +
"\t\t\twhere ROW(5 * t2.s1, 77) = (\n" +
"\t\t\t\t(select 50, 11 * s1\n" +
"\t\t\t\tfrom t4)\n" +
"\t\t\t\tunion\n" +
"\t\t\t\t(select 50, 77\n" +
"\t\t\t\tfrom (\n" +
"\t\t\t\t\tselect *\n" +
"\t\t\t\t\tfrom t5\n" +
"\t\t\t\t) t5)\n" +
"\t\t\t\t)\n" +
"\t\t\t)\n" +
"\t)", SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
Assert.assertEquals(1, statementList.size());
@@ -162,7 +162,12 @@ public class SELECT_Syntax_Test extends TestCase {
String text = output(stmtList);
Assert.assertEquals("SELECT s1\nFROM t1\nWHERE s1 = SOME (SELECT s1\n\tFROM t2);", text);
assertEquals("SELECT s1\n" +
"FROM t1\n" +
"WHERE s1 = SOME (\n" +
"\tSELECT s1\n" +
"\tFROM t2\n" +
");", text);
}
public void test_10() throws Exception {
@@ -173,7 +178,12 @@ public class SELECT_Syntax_Test extends TestCase {
String text = output(stmtList);
Assert.assertEquals("SELECT s1\nFROM t1\nWHERE s1 = ANY (SELECT s1\n\tFROM t2);", text);
Assert.assertEquals("SELECT s1\n" +
"FROM t1\n" +
"WHERE s1 = ANY (\n" +
"\tSELECT s1\n" +
"\tFROM t2\n" +
");", text);
}
public void test_11() throws Exception {
@@ -184,7 +194,12 @@ public class SELECT_Syntax_Test extends TestCase {
String text = output(stmtList);
Assert.assertEquals("SELECT s1\nFROM t1\nWHERE s1 > ALL (SELECT s1\n\tFROM t2);", text);
assertEquals("SELECT s1\n" +
"FROM t1\n" +
"WHERE s1 > ALL (\n" +
"\tSELECT s1\n" +
"\tFROM t2\n" +
");", text);
}
public void test_12() throws Exception {
@@ -30,7 +30,8 @@ public class MySqlParameterizedOutputVisitorTest_22 extends TestCase {
"\t, `f`.`feature`, `f`.`domain_option`, `f`.`version`, `f`.`reference_type`, `f`.`dentry_type`\n" +
"\t, `f`.`space_id`, `f`.`extension`, `f`.`creator_id`, `f`.`modifier_id`, `f`.`store_type`\n" +
"\t, `f`.`link_mark`, `f`.`content_type`\n" +
"FROM (SELECT vfs_dentry.`id`\n" +
"FROM (\n" +
"\tSELECT vfs_dentry.`id`\n" +
"\tFROM vfs_dentry FORCE INDEX (idx_gmt)\n" +
"\tWHERE vfs_dentry.`extra_str1` = ?\n" +
"\t\tAND vfs_dentry.`biz_id` = ?\n" +
@@ -38,7 +39,7 @@ public class MySqlParameterizedOutputVisitorTest_22 extends TestCase {
"\t\tAND vfs_dentry.`user_id` = ?\n" +
"\t\tAND vfs_dentry.`dentry_type` = ?\n" +
"\tLIMIT ?, ?\n" +
"\t) `t`\n" +
") `t`\n" +
"\tJOIN vfs_dentry `f` ON `t`.`id` = `f`.`id`\n" +
"WHERE `t`.`id` = `f`.`id`\n" +
"\tAND `f`.`user_id` = ?", psql);
@@ -75,7 +76,8 @@ public class MySqlParameterizedOutputVisitorTest_22 extends TestCase {
"\t, `f`.`feature`, `f`.`domain_option`, `f`.`version`, `f`.`reference_type`, `f`.`dentry_type`\n" +
"\t, `f`.`space_id`, `f`.`extension`, `f`.`creator_id`, `f`.`modifier_id`, `f`.`store_type`\n" +
"\t, `f`.`link_mark`, `f`.`content_type`\n" +
"FROM (SELECT vfs_dentry_001.`id`\n" +
"FROM (\n" +
"\tSELECT vfs_dentry_001.`id`\n" +
"\tFROM vfs_dentry_001 FORCE INDEX (idx_gmt)\n" +
"\tWHERE vfs_dentry_001.`extra_str1` = ?\n" +
"\t\tAND vfs_dentry_001.`biz_id` = ?\n" +
@@ -83,7 +85,7 @@ public class MySqlParameterizedOutputVisitorTest_22 extends TestCase {
"\t\tAND vfs_dentry_001.`user_id` = ?\n" +
"\t\tAND vfs_dentry_001.`dentry_type` = ?\n" +
"\tLIMIT ?, ?\n" +
"\t) `t`\n" +
") `t`\n" +
"\tJOIN vfs_dentry_001 `f` ON `t`.`id` = `f`.`id`\n" +
"WHERE `t`.`id` = `f`.`id`\n" +
"\tAND `f`.`user_id` = ?", buf.toString());
@@ -55,16 +55,17 @@ public class MySqlSelectTest_12 extends MysqlTest {
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertEquals(5, visitor.getColumns().size());
Assert.assertEquals(0, visitor.getConditions().size());
Assert.assertEquals(1, visitor.getOrderByColumns().size());
assertEquals(1, visitor.getOrderByColumns().size());
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ub_userdiscuss")));
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("SELECT COUNT(*) AS a" + //
"\nFROM (SELECT nickname, mobile, comment, createdate" + //
"\n\tFROM ub_userdiscuss" + //
"\n\tORDER BY discuss_id DESC" + //
"\n\t) b", //
assertEquals("SELECT COUNT(*) AS a\n" +
"FROM (\n" +
"\tSELECT nickname, mobile, comment, createdate\n" +
"\tFROM ub_userdiscuss\n" +
"\tORDER BY discuss_id DESC\n" +
") b", //
output);
}
}
@@ -42,22 +42,23 @@ public class OracleMergeTest8 extends OracleTest {
List<SQLStatement> stmtList = parser.parseStatementList();
SQLMergeStatement mergeStatement = (SQLMergeStatement) stmtList.get(0);
String result = SQLUtils.toOracleString(mergeStatement);
Assert.assertEquals("MERGE INTO (SELECT *"
+ "\n\tFROM T09_RULE_CAL_COUNT"
+ "\n\tWHERE data_dt = '20160328'"
+ "\n\t\tAND rule_type = '2'"
+ "\n\t) t"
+ "\nUSING ("
+ "\n\tSELECT cust_no, organ_key"
+ "\n\tFROM ("
+ "\n\t\tSELECT t1.cust_no, t1.organ_key"
+ "\n\t\tFROM t08_cust_result_c_mid t1"
+ "\n\t\tUNION"
+ "\n\t\tSELECT t2.cust_no, t2.organ_key"
+ "\n\t\tFROM t08_cust_result_i_mid t2"
+ "\n\t)"
+ "\n) t3 ON (t3.cust_no = t.cust_no) "
+ "\nWHEN MATCHED THEN UPDATE SET t.organ_key = t3.organ_key",
Assert.assertEquals("MERGE INTO (\n" +
"\tSELECT *\n" +
"\tFROM T09_RULE_CAL_COUNT\n" +
"\tWHERE data_dt = '20160328'\n" +
"\t\tAND rule_type = '2'\n" +
") t\n" +
"USING (\n" +
"\tSELECT cust_no, organ_key\n" +
"\tFROM (\n" +
"\t\tSELECT t1.cust_no, t1.organ_key\n" +
"\t\tFROM t08_cust_result_c_mid t1\n" +
"\t\tUNION\n" +
"\t\tSELECT t2.cust_no, t2.organ_key\n" +
"\t\tFROM t08_cust_result_i_mid t2\n" +
"\t)\n" +
") t3 ON (t3.cust_no = t.cust_no) \n" +
"WHEN MATCHED THEN UPDATE SET t.organ_key = t3.organ_key",
result);
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id")));
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
@@ -38,19 +38,21 @@ public class SQLServerRowNumberTest2 extends TestCase {
SQLServerStatementParser parser = new SQLServerStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
Assert.assertEquals("SELECT *" +
"\nFROM (SELECT ROW_NUMBER() OVER (ORDER BY FAlertDate DESC, FAlertLevel, FAlertType) AS RowNumber, *" +
"\n\tFROM monitor_business" +
"\n\tWHERE FRemoveAlert = ?" +
"\n\t) temp_table" +
"\nWHERE RowNumber BETWEEN ? AND ?", SQLUtils.toSQLServerString(stmt));
assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT ROW_NUMBER() OVER (ORDER BY FAlertDate DESC, FAlertLevel, FAlertType) AS RowNumber, *\n" +
"\tFROM monitor_business\n" +
"\tWHERE FRemoveAlert = ?\n" +
") temp_table\n" +
"WHERE RowNumber BETWEEN ? AND ?", SQLUtils.toSQLServerString(stmt));
Assert.assertEquals("select *" +
"\nfrom (select row_number() over (order by FAlertDate desc, FAlertLevel, FAlertType) as RowNumber, *" +
"\n\tfrom monitor_business" +
"\n\twhere FRemoveAlert = ?" +
"\n\t) temp_table" +
"\nwhere RowNumber between ? and ?", SQLUtils.toSQLServerString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
assertEquals("select *\n" +
"from (\n" +
"\tselect row_number() over (order by FAlertDate desc, FAlertLevel, FAlertType) as RowNumber, *\n" +
"\tfrom monitor_business\n" +
"\twhere FRemoveAlert = ?\n" +
") temp_table\n" +
"where RowNumber between ? and ?", SQLUtils.toSQLServerString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
}
public void test_isEmpty_2() throws Exception {
@@ -66,18 +68,20 @@ public class SQLServerRowNumberTest2 extends TestCase {
SQLServerStatementParser parser = new SQLServerStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
Assert.assertEquals("SELECT *" +
"\nFROM (SELECT ROW_NUMBER() OVER (ORDER BY FAlertDate DESC, FAlertLevel, FAlertType) AS RowNumber, *" +
"\n\tFROM monitor_business" +
"\n\tWHERE FRemoveAlert = ?" +
"\n\t) temp_table" +
"\nWHERE RowNumber NOT BETWEEN ? AND ?", SQLUtils.toSQLServerString(stmt));
Assert.assertEquals("SELECT *\n" +
"FROM (\n" +
"\tSELECT ROW_NUMBER() OVER (ORDER BY FAlertDate DESC, FAlertLevel, FAlertType) AS RowNumber, *\n" +
"\tFROM monitor_business\n" +
"\tWHERE FRemoveAlert = ?\n" +
") temp_table\n" +
"WHERE RowNumber NOT BETWEEN ? AND ?", SQLUtils.toSQLServerString(stmt));
Assert.assertEquals("select *" +
"\nfrom (select row_number() over (order by FAlertDate desc, FAlertLevel, FAlertType) as RowNumber, *" +
"\n\tfrom monitor_business" +
"\n\twhere FRemoveAlert = ?" +
"\n\t) temp_table" +
"\nwhere RowNumber not between ? and ?", SQLUtils.toSQLServerString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
assertEquals("select *\n" +
"from (\n" +
"\tselect row_number() over (order by FAlertDate desc, FAlertLevel, FAlertType) as RowNumber, *\n" +
"\tfrom monitor_business\n" +
"\twhere FRemoveAlert = ?\n" +
") temp_table\n" +
"where RowNumber not between ? and ?", SQLUtils.toSQLServerString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
}
}
@@ -33,12 +33,13 @@ public class SQLServerSelectTest12 extends TestCase {
") AS ProductsWithRowNumbers " + //
"WHERE Row >= 6 AND Row <= 10";
String expect = "SELECT Row, Name" + //
"\nFROM (SELECT ROW_NUMBER() OVER (ORDER BY ProductID) AS Row, Name" + //
"\n\tFROM Product" + //
"\n\t) ProductsWithRowNumbers" + //
"\nWHERE Row >= 6" + //
"\n\tAND Row <= 10";
String expect = "SELECT Row, Name\n" +
"FROM (\n" +
"\tSELECT ROW_NUMBER() OVER (ORDER BY ProductID) AS Row, Name\n" +
"\tFROM Product\n" +
") ProductsWithRowNumbers\n" +
"WHERE Row >= 6\n" +
"\tAND Row <= 10";
SQLServerStatementParser parser = new SQLServerStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
@@ -66,22 +66,23 @@ public class SQLServerSelectTest13 extends TestCase {
" a. ROW NOT BETWEEN (?+ 1) " + //
"AND (?+?)"; //
String expect = "SELECT a.*" +
"\nFROM (SELECT ROW_NUMBER() OVER (ORDER BY a.time_add DESC) AS ROW, a.detail_no AS detailNo, a.ba_id AS baId, a.ba_name AS baName, a.tran_no AS tranNo" +
"\n\t\t, a.tran_name AS tranName, a.tran_type AS tranType, a.balance_type AS balanceType, a.detail_income AS detailIncome, a.detail_payout AS detailPayout" +
"\n\t\t, a.before_balance AS beforeBalance, a.after_balance AS afterBalance, a.time_add AS timeAdd, a.user_add AS userAdd, a.remark AS remark" +
"\n\t\t, (" +
"\n\t\t\tSELECT TOP 1 t.param_name" +
"\n\t\t\tFROM config.sys_params t" +
"\n\t\t\tWHERE t.param_type = ?" +
"\n\t\t\t\tAND t.param_value = a.tran_type" +
"\n\t\t\t) AS tranTypeName" +
"\n\tFROM bussiness.account_detail a" +
"\n\tWHERE 1 = 1" +
"\n\t\tAND a.time_add >= ?" +
"\n\t\tAND a.time_add <= ?" +
"\n\t) a" +
"\nWHERE a.ROW NOT BETWEEN ? + 1 AND ? + ?";
String expect = "SELECT a.*\n" +
"FROM (\n" +
"\tSELECT ROW_NUMBER() OVER (ORDER BY a.time_add DESC) AS ROW, a.detail_no AS detailNo, a.ba_id AS baId, a.ba_name AS baName, a.tran_no AS tranNo\n" +
"\t\t, a.tran_name AS tranName, a.tran_type AS tranType, a.balance_type AS balanceType, a.detail_income AS detailIncome, a.detail_payout AS detailPayout\n" +
"\t\t, a.before_balance AS beforeBalance, a.after_balance AS afterBalance, a.time_add AS timeAdd, a.user_add AS userAdd, a.remark AS remark\n" +
"\t\t, (\n" +
"\t\t\tSELECT TOP 1 t.param_name\n" +
"\t\t\tFROM config.sys_params t\n" +
"\t\t\tWHERE t.param_type = ?\n" +
"\t\t\t\tAND t.param_value = a.tran_type\n" +
"\t\t\t) AS tranTypeName\n" +
"\tFROM bussiness.account_detail a\n" +
"\tWHERE 1 = 1\n" +
"\t\tAND a.time_add >= ?\n" +
"\t\tAND a.time_add <= ?\n" +
") a\n" +
"WHERE a.ROW NOT BETWEEN ? + 1 AND ? + ?";
SQLServerStatementParser parser = new SQLServerStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
@@ -65,33 +65,30 @@ public class SQLServerSelectTest14 extends TestCase {
"WHERE " + //
" a.ROW BETWEEN (10+2) AND 20 "; //
String expect = "SELECT a.*"
+ //
"\nFROM (SELECT ROW_NUMBER() OVER (ORDER BY a.time_add DESC) AS ROW, a.detail_no AS detailNo, a.ba_id AS baId, a.ba_name AS baName, a.tran_no AS tranNo"
+ //
"\n\t\t, a.tran_name AS tranName, a.tran_type AS tranType, a.balance_type AS balanceType, a.detail_income AS detailIncome, a.detail_payout AS detailPayout"
+ //
"\n\t\t, a.before_balance AS beforeBalance, a.after_balance AS afterBalance, a.time_add AS timeAdd, a.user_add AS userAdd, a.remark AS remark"
+ //
"\n\t\t, (" + //
"\n\t\t\tSELECT TOP 1 t.param_name" + //
"\n\t\t\tFROM config.sys_params t" + //
"\n\t\t\tWHERE t.param_type = 2" + //
"\n\t\t\t\tAND t.param_value = a.tran_type" + //
"\n\t\t\t) AS tranTypeName" + //
"\n\tFROM bussiness.account_detail a" + //
"\n\tWHERE 1 = 1" + //
"\n\t\tAND a.time_add >= 2" + //
"\n\t\tAND a.time_add <= 3" + //
"\n\t) a" + //
"\nWHERE a.ROW BETWEEN 10 + 2 AND 20";
String expect = "SELECT a.*\n" +
"FROM (\n" +
"\tSELECT ROW_NUMBER() OVER (ORDER BY a.time_add DESC) AS ROW, a.detail_no AS detailNo, a.ba_id AS baId, a.ba_name AS baName, a.tran_no AS tranNo\n" +
"\t\t, a.tran_name AS tranName, a.tran_type AS tranType, a.balance_type AS balanceType, a.detail_income AS detailIncome, a.detail_payout AS detailPayout\n" +
"\t\t, a.before_balance AS beforeBalance, a.after_balance AS afterBalance, a.time_add AS timeAdd, a.user_add AS userAdd, a.remark AS remark\n" +
"\t\t, (\n" +
"\t\t\tSELECT TOP 1 t.param_name\n" +
"\t\t\tFROM config.sys_params t\n" +
"\t\t\tWHERE t.param_type = 2\n" +
"\t\t\t\tAND t.param_value = a.tran_type\n" +
"\t\t\t) AS tranTypeName\n" +
"\tFROM bussiness.account_detail a\n" +
"\tWHERE 1 = 1\n" +
"\t\tAND a.time_add >= 2\n" +
"\t\tAND a.time_add <= 3\n" +
") a\n" +
"WHERE a.ROW BETWEEN 10 + 2 AND 20";
SQLServerStatementParser parser = new SQLServerStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
String text = TestUtils.outputSqlServer(stmt);
Assert.assertEquals(expect, text);
assertEquals(expect, text);
// System.out.println(text);
}
@@ -27,12 +27,13 @@ public class SQLServerSelectTest2 extends TestCase {
public void test_isEmpty() throws Exception {
String sql = "SELECT TOP 1 name FROM (SELECT TOP 9 name FROM master..syslogins ORDER BY name ASC) sq ORDER BY name DESC ";
String expect = "SELECT TOP 1 name\n" + //
"FROM (SELECT TOP 9 name\n" + //
"\tFROM master..syslogins\n" + //
"\tORDER BY name ASC\n" + //
"\t) sq\n" + //
"ORDER BY name DESC";
String expect = "SELECT TOP 1 name\n" +
"FROM (\n" +
"\tSELECT TOP 9 name\n" +
"\tFROM master..syslogins\n" +
"\tORDER BY name ASC\n" +
") sq\n" +
"ORDER BY name DESC";
SQLServerStatementParser parser = new SQLServerStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
@@ -40,16 +40,17 @@ public class SQLServerUpdateTest extends TestCase {
" ) b " + //
"where a.FId = b.FId and a.FId = ?";
String expect = "UPDATE reg_student_charge_item" +
"\nSET FAmountReceived = b.amount" +
"\nFROM reg_student_charge_item a, (SELECT a.FId, CASE WHEN SUM(b.FChargeAmount) IS NULL THEN 0 ELSE SUM(b.FChargeAmount) END AS amount" +
"\n\t\tFROM reg_student_charge_item a" +
"\n\t\t\tLEFT JOIN reg_student_charge_daybook b ON a.FId = b.FChargeItemId" +
"\n\t\tWHERE a.FId = ?" +
"\n\t\tGROUP BY a.FId" +
"\n\t\t) b" +
"\nWHERE a.FId = b.FId" +
"\n\tAND a.FId = ?";
String expect = "UPDATE reg_student_charge_item\n" +
"SET FAmountReceived = b.amount\n" +
"FROM reg_student_charge_item a, (\n" +
"\t\tSELECT a.FId, CASE WHEN SUM(b.FChargeAmount) IS NULL THEN 0 ELSE SUM(b.FChargeAmount) END AS amount\n" +
"\t\tFROM reg_student_charge_item a\n" +
"\t\t\tLEFT JOIN reg_student_charge_daybook b ON a.FId = b.FChargeItemId\n" +
"\t\tWHERE a.FId = ?\n" +
"\t\tGROUP BY a.FId\n" +
"\t) b\n" +
"WHERE a.FId = b.FId\n" +
"\tAND a.FId = ?";
SQLServerStatementParser parser = new SQLServerStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
+3 -2
View File
@@ -5,7 +5,8 @@ AND (1=0 OR c_URI in (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
GROUP BY c_URI) A
---------------------------
SELECT COUNT(*)
FROM (SELECT COUNT(*)
FROM (
SELECT COUNT(*)
FROM m_web_uri_m5
WHERE monitor_item_id = ?
AND app_num = ?
@@ -17,4 +18,4 @@ FROM (SELECT COUNT(*)
AND (1 = 0
OR c_URI IN (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83))
GROUP BY c_URI
) A
) A
+6 -6
View File
@@ -7,13 +7,13 @@ WHERE a.examine_id = b.examine_id
---------------------------
SELECT a.examine_id AS examineId, a.examine_name AS examineName, a.level_limit AS levelLimit
FROM c_examinepaper a, (SELECT examine_id
FROM c_examinepaper a, (
(SELECT examine_id
FROM c_examinepaper
WHERE level_limit = ?
AND status = 1
AND status = 1)
MINUS
SELECT DISTINCT examine_id
FROM course
) b
(SELECT DISTINCT examine_id
FROM course)
) b
WHERE a.examine_id = b.examine_id