mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor sql parser.
This commit is contained in:
@@ -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 {
|
||||
|
||||
+6
-4
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user