From 4ca437c63b7ac1d3e1a4dc786be0acfa34889034 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 9 Sep 2014 21:16:18 +0800 Subject: [PATCH 01/26] 'a.b.c.d'; --- pom.xml | 2 +- .../alibaba/druid/pool/DruidDataSource.java | 24 ++++++++++++++++++- .../java/com/alibaba/druid/TestMySqlPing.java | 4 ++-- .../com/alibaba/druid/TestMySqlPing2.java | 4 ++-- .../com/alibaba/druid/TestOraclePing.java | 4 ++-- .../java/com/alibaba/druid/TestRollBack.java | 6 ++--- .../java/com/alibaba/druid/TestSqlServer.java | 4 ++-- .../alibaba/druid/benckmark/pool/Case0.java | 6 ++--- .../alibaba/druid/benckmark/pool/Case3.java | 2 +- .../benckmark/pool/CaseKylin_Oracle.java | 4 ++-- .../druid/benckmark/pool/CaseKylin_mysql.java | 4 ++-- .../pool/CaseKylin_mysql_idle_1.java | 4 ++-- .../pool/CaseKylin_mysql_idle_2.java | 4 ++-- .../druid/benckmark/pool/Oracle_Case0.java | 2 +- .../druid/benckmark/pool/Oracle_Case3.java | 2 +- .../druid/benckmark/pool/Oracle_Case4.java | 4 ++-- .../benckmark/proxy/DruidBenchmarkTest.java | 4 ++-- .../druid/mysql/MySqlBigTableTest.java | 2 +- .../alibaba/druid/mysql/QueryTimeoutTest.java | 2 +- .../java/com/alibaba/druid/pool/Case3.java | 2 +- .../com/alibaba/druid/pool/CobarTest.java | 2 +- .../alibaba/druid/pool/ConcurrentTest.java | 2 +- .../alibaba/druid/pool/ConcurrentTest2.java | 2 +- .../com/alibaba/druid/pool/DruidTest.java | 2 +- .../druid/pool/MySqlValdConnectionTest.java | 2 +- .../alibaba/druid/pool/QueryTimeoutTest.java | 2 +- .../TestDruidOraclePreparedStatement.java | 4 ++-- .../com/alibaba/druid/pool/TestMySqlPing.java | 2 +- .../pool/TestOraclePreparedStatement.java | 4 ++-- .../pool/TestOracle_DruidDataSource.java | 2 +- .../alibaba/druid/pool/TestPoolStatement.java | 2 +- .../com/alibaba/druid/pool/TestRollBack.java | 2 +- .../java/com/alibaba/druid/pool/Test_C2.java | 2 +- .../com/alibaba/druid/pool/Test_kyline.java | 2 +- .../alibaba/druid/pool/oceanbase/OBTest.java | 2 +- .../druid/pool/oracle/QueryTimeoutTest.java | 2 +- .../pool/ui/DruidDataSourceUIManager.java | 2 +- .../com/alibaba/druid/proxy/TestOracle.java | 2 +- .../alibaba/druid/sql/OnlineOracleTest3.java | 2 +- .../com/alibaba/druid/sql/OnlineSQLTest.java | 2 +- .../com/alibaba/druid/sql/OnlineSQLTest2.java | 2 +- .../com/alibaba/druid/sql/TestMigrate.java | 2 +- .../alibaba/druid/sql/TestOnlineSQLTest3.java | 2 +- .../com/alibaba/druid/sql/TestTransform.java | 2 +- .../com/alibaba/druid/stat/TestOracle.java | 2 +- 45 files changed, 83 insertions(+), 61 deletions(-) diff --git a/pom.xml b/pom.xml index daa2279989..71383f6001 100644 --- a/pom.xml +++ b/pom.xml @@ -528,7 +528,7 @@ org.apache.tomcat tomcat-jdbc - 7.0.34 + 8.0.12 test diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index eecc295a1b..a9970efe5a 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -41,6 +41,8 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import javax.management.JMException; +import javax.management.MBeanRegistration; +import javax.management.MBeanServer; import javax.management.ObjectName; import javax.naming.NamingException; import javax.naming.Reference; @@ -95,7 +97,7 @@ import com.alibaba.druid.wall.WallProviderStatValue; * @author ljw * @author wenshao */ -public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, ManagedDataSource, Referenceable, Closeable, Cloneable, ConnectionPoolDataSource { +public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, ManagedDataSource, Referenceable, Closeable, Cloneable, ConnectionPoolDataSource, MBeanRegistration { private final static Log LOG = LogFactory.getLog(DruidDataSource.class); @@ -2702,4 +2704,24 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat CreateConnectionTask task = new CreateConnectionTask(); createScheduler.submit(task); } + + @Override + public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception { + return null; + } + + @Override + public void postRegister(Boolean registrationDone) { + + } + + @Override + public void preDeregister() throws Exception { + + } + + @Override + public void postDeregister() { + + } } diff --git a/src/test/java/com/alibaba/druid/TestMySqlPing.java b/src/test/java/com/alibaba/druid/TestMySqlPing.java index f5e92c4e0c..826fe74cf1 100644 --- a/src/test/java/com/alibaba/druid/TestMySqlPing.java +++ b/src/test/java/com/alibaba/druid/TestMySqlPing.java @@ -30,12 +30,12 @@ public class TestMySqlPing extends TestCase { private String driverClass; protected void setUp() throws Exception { - // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + // jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; // SQL = "SELECT * FROM WP_ORDERS WHERE ID = ?"; - jdbcUrl = "jdbc:mysql://10.20.147.142:3308/dragoon_v25_masterdb"; + jdbcUrl = "jdbc:mysql://a.b.c.d:3308/dragoon_v25_masterdb"; user = "dragoon_admin"; password = "dragoon_root"; diff --git a/src/test/java/com/alibaba/druid/TestMySqlPing2.java b/src/test/java/com/alibaba/druid/TestMySqlPing2.java index f62e11b5aa..ab8b59b85d 100644 --- a/src/test/java/com/alibaba/druid/TestMySqlPing2.java +++ b/src/test/java/com/alibaba/druid/TestMySqlPing2.java @@ -35,12 +35,12 @@ public class TestMySqlPing2 extends TestCase { private DruidDataSource dataSource; protected void setUp() throws Exception { - // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + // jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; // SQL = "SELECT * FROM WP_ORDERS WHERE ID = ?"; - jdbcUrl = "jdbc:mysql://10.20.147.142:3308/dragoon_v25_masterdb"; + jdbcUrl = "jdbc:mysql://a.b.c.d:3308/dragoon_v25_masterdb"; user = "dragoon_admin"; password = "dragoon_root"; diff --git a/src/test/java/com/alibaba/druid/TestOraclePing.java b/src/test/java/com/alibaba/druid/TestOraclePing.java index 80e90a9337..483e5435ee 100644 --- a/src/test/java/com/alibaba/druid/TestOraclePing.java +++ b/src/test/java/com/alibaba/druid/TestOraclePing.java @@ -32,12 +32,12 @@ public class TestOraclePing extends TestCase { private String SQL; protected void setUp() throws Exception { - // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + // jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; // SQL = "SELECT * FROM WP_ORDERS WHERE ID = ?"; - jdbcUrl = "jdbc:oracle:thin:@10.20.149.81:1521:ointest3"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ointest3"; user = "alibaba"; password = "deYcR7facWSJtCuDpm2r"; SQL = "SELECT * FROM AV_INFO WHERE ID = ?"; diff --git a/src/test/java/com/alibaba/druid/TestRollBack.java b/src/test/java/com/alibaba/druid/TestRollBack.java index 08cae1c912..fe8f24fff5 100644 --- a/src/test/java/com/alibaba/druid/TestRollBack.java +++ b/src/test/java/com/alibaba/druid/TestRollBack.java @@ -39,17 +39,17 @@ public class TestRollBack { static Dao dao_c3p0; static Dao dao_druid; -// static String url = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; +// static String url = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // static String user = "alibaba"; // static String password = "ccbuauto"; // static String driver = "oracle.jdbc.driver.OracleDriver"; - static String url = "jdbc:jtds:sqlserver://10.16.16.30:1433/druid_db"; + static String url = "jdbc:jtds:sqlserver://a.b.c.d:1433/druid_db"; static String user = "sa"; static String password = "hello123"; static String driver = "net.sourceforge.jtds.jdbc.Driver"; -// jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; +// jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; diff --git a/src/test/java/com/alibaba/druid/TestSqlServer.java b/src/test/java/com/alibaba/druid/TestSqlServer.java index 8073ef9308..7ac6d41c18 100644 --- a/src/test/java/com/alibaba/druid/TestSqlServer.java +++ b/src/test/java/com/alibaba/druid/TestSqlServer.java @@ -29,12 +29,12 @@ public class TestSqlServer extends TestCase { private String SQL; protected void setUp() throws Exception { - // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + // jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; // SQL = "SELECT * FROM WP_ORDERS WHERE ID = ?"; - jdbcUrl = "jdbc:jtds:sqlserver://10.16.16.28:1433/druid_db"; + jdbcUrl = "jdbc:jtds:sqlserver://a.b.c.d:1433/druid_db"; user = "sa"; password = "hello123"; SQL = "SELECT * FROM AV_INFO WHERE ID = ?"; diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/Case0.java b/src/test/java/com/alibaba/druid/benckmark/pool/Case0.java index 28dd3e5320..f1a9c076b1 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/Case0.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/Case0.java @@ -55,9 +55,9 @@ public class Case0 extends TestCase { password = "dragoon25"; driverClass = "com.alibaba.druid.mock.MockDriver"; -// jdbcUrl = "jdbc:mysql://10.20.159.104:3306/masterdb"; -// user = "dragoon"; -// password = "dragoon"; +// jdbcUrl = "jdbc:mysql://a.b.c.d:3306/masterdb"; +// user = "x"; +// password = "x"; } public void test_druid() throws Exception { diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/Case3.java b/src/test/java/com/alibaba/druid/benckmark/pool/Case3.java index e6dff1411e..65abfdf9cd 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/Case3.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/Case3.java @@ -62,7 +62,7 @@ public class Case3 extends TestCase { driverClass = "com.alibaba.druid.mock.MockDriver"; // connectionProperties = "connectSleep=3;executeSleep=1"; - // jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2"; + // jdbcUrl = "jdbc:mysql://a.b.c.d:3306/druid2"; // user = "root"; // password = "root"; // driverClass = "com.mysql.jdbc.Driver"; diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_Oracle.java b/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_Oracle.java index 5cb43f98d1..4515ee1be9 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_Oracle.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_Oracle.java @@ -64,12 +64,12 @@ public class CaseKylin_Oracle extends TestCase { // password = "dragoon25"; // driverClass = "com.alibaba.druid.mock.MockDriver"; - // jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2"; + // jdbcUrl = "jdbc:mysql://a.b.c.d:3306/druid2"; // user = "root"; // password = "root"; // driverClass = "com.mysql.jdbc.Driver"; - jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; user = "alibaba"; password = "ccbuauto"; driverClass = "oracle.jdbc.driver.OracleDriver"; diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql.java b/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql.java index c01c75f3ee..ba03558cb4 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql.java @@ -61,12 +61,12 @@ public class CaseKylin_mysql extends TestCase { // password = "dragoon25"; // driverClass = "com.alibaba.druid.mock.MockDriver"; - jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2"; + jdbcUrl = "jdbc:mysql://a.b.c.d:3306/druid2"; user = "root"; password = "root"; driverClass = "com.mysql.jdbc.Driver"; - // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + // jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; // driverClass = "oracle.jdbc.driver.OracleDriver"; diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql_idle_1.java b/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql_idle_1.java index a404c1c5b7..04f80fa67b 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql_idle_1.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql_idle_1.java @@ -59,12 +59,12 @@ public class CaseKylin_mysql_idle_1 extends TestCase { // password = "dragoon25"; // driverClass = "com.alibaba.druid.mock.MockDriver"; - jdbcUrl = "jdbc:mysql://10.20.141.150:8066/amoeba"; + jdbcUrl = "jdbc:mysql://a.b.c.d:8066/amoeba"; user = "root"; password = "12345"; driverClass = "com.mysql.jdbc.Driver"; - // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + // jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; // driverClass = "oracle.jdbc.driver.OracleDriver"; diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql_idle_2.java b/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql_idle_2.java index 4ddf6f4d81..2bcc4302ee 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql_idle_2.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/CaseKylin_mysql_idle_2.java @@ -62,12 +62,12 @@ public class CaseKylin_mysql_idle_2 extends TestCase { MockDriver.instance.setIdleTimeCount(50 * 60 * 10); - // jdbcUrl = "jdbc:mysql://10.20.141.150:8066/amoeba"; + // jdbcUrl = "jdbc:mysql://a.b.c.d:8066/amoeba"; // user = "root"; // password = "12345"; // driverClass = "com.mysql.jdbc.Driver"; - // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + // jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; // driverClass = "oracle.jdbc.driver.OracleDriver"; diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case0.java b/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case0.java index 510163136e..78ad4fad2f 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case0.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case0.java @@ -46,7 +46,7 @@ public class Oracle_Case0 extends TestCase { public final int LOOP_COUNT = 5; protected void setUp() throws Exception { - jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; user = "alibaba"; password = "ccbuauto"; driverClass = "oracle.jdbc.driver.OracleDriver"; diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case3.java b/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case3.java index a87a4d2ca7..3af110305a 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case3.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case3.java @@ -47,7 +47,7 @@ public class Oracle_Case3 extends TestCase { private boolean testOnBorrow = true; protected void setUp() throws Exception { - jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; user = "alibaba"; password = "ccbuauto"; driverClass = "oracle.jdbc.driver.OracleDriver"; diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case4.java b/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case4.java index e79ac05198..361b6dd7bd 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case4.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/Oracle_Case4.java @@ -55,12 +55,12 @@ public class Oracle_Case4 extends TestCase { private String SQL; protected void setUp() throws Exception { -// jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; +// jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // user = "alibaba"; // password = "ccbuauto"; // SQL = "SELECT * FROM WP_ORDERS WHERE ID = ?"; - jdbcUrl = "jdbc:oracle:thin:@10.20.149.81:1521:ointest3"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ointest3"; user = "alibaba"; password = "deYcR7facWSJtCuDpm2r"; SQL = "SELECT * FROM AV_INFO WHERE ID = ?"; diff --git a/src/test/java/com/alibaba/druid/benckmark/proxy/DruidBenchmarkTest.java b/src/test/java/com/alibaba/druid/benckmark/proxy/DruidBenchmarkTest.java index 7001a9371c..1c4c498b7c 100644 --- a/src/test/java/com/alibaba/druid/benckmark/proxy/DruidBenchmarkTest.java +++ b/src/test/java/com/alibaba/druid/benckmark/proxy/DruidBenchmarkTest.java @@ -39,7 +39,7 @@ public class DruidBenchmarkTest extends TestCase { public DirectSQLExecutor createExecutorDirect() { String name = "direct"; - String jdbcUrl = "jdbc:mysql://10.20.129.146/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; + String jdbcUrl = "jdbc:mysql://a.b.c.d/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; String user = "dragoon25"; String password = "dragoon25"; return new DirectSQLExecutor(name, jdbcUrl, user, password); @@ -47,7 +47,7 @@ public class DruidBenchmarkTest extends TestCase { public DirectSQLExecutor createExecutorDruid() { String name = "druid"; - String jdbcUrl = "jdbc:wrap-jdbc:filters=default:name=benchmark:jdbc:mysql://10.20.129.146/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; + String jdbcUrl = "jdbc:wrap-jdbc:filters=default:name=benchmark:jdbc:mysql://a.b.c.d/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; String user = "dragoon25"; String password = "dragoon25"; return new DirectSQLExecutor(name, jdbcUrl, user, password); diff --git a/src/test/java/com/alibaba/druid/mysql/MySqlBigTableTest.java b/src/test/java/com/alibaba/druid/mysql/MySqlBigTableTest.java index 3a241a8273..a17aefd221 100644 --- a/src/test/java/com/alibaba/druid/mysql/MySqlBigTableTest.java +++ b/src/test/java/com/alibaba/druid/mysql/MySqlBigTableTest.java @@ -35,7 +35,7 @@ public class MySqlBigTableTest extends TestCase { private DruidDataSource dataSource; protected void setUp() throws Exception { - jdbcUrl = "jdbc:mysql://10.20.144.27:3306/dragoon_v25_masterdb"; + jdbcUrl = "jdbc:mysql://a.b.c.d:3306/dragoon_v25_masterdb"; user = "dragoon_test"; password = "dragoon_test"; driverClass = "com.mysql.jdbc.Driver"; diff --git a/src/test/java/com/alibaba/druid/mysql/QueryTimeoutTest.java b/src/test/java/com/alibaba/druid/mysql/QueryTimeoutTest.java index b4e7f734e5..bda19d0dc3 100644 --- a/src/test/java/com/alibaba/druid/mysql/QueryTimeoutTest.java +++ b/src/test/java/com/alibaba/druid/mysql/QueryTimeoutTest.java @@ -15,7 +15,7 @@ public class QueryTimeoutTest extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:oracle:thin:@10.20.36.21:1521:OINTEST"); + dataSource.setUrl("jdbc:oracle:thin:@a.b.c.d:1521:OINTEST"); dataSource.setUsername("alibaba"); dataSource.setPassword("deYcR7facWSJtCuDpm2r"); dataSource.setInitialSize(1); diff --git a/src/test/java/com/alibaba/druid/pool/Case3.java b/src/test/java/com/alibaba/druid/pool/Case3.java index 03357ba4b4..ad569c43b9 100644 --- a/src/test/java/com/alibaba/druid/pool/Case3.java +++ b/src/test/java/com/alibaba/druid/pool/Case3.java @@ -26,7 +26,7 @@ public class Case3 extends TestCase { public void test_1() throws Exception { DruidDataSource dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:mysql://10.20.153.104:3306/druid2"); + dataSource.setUrl("jdbc:mysql://a.b.c.d:3306/druid2"); dataSource.setUsername("root"); dataSource.setPassword("root"); diff --git a/src/test/java/com/alibaba/druid/pool/CobarTest.java b/src/test/java/com/alibaba/druid/pool/CobarTest.java index 1349c2c28c..e39e7df80e 100644 --- a/src/test/java/com/alibaba/druid/pool/CobarTest.java +++ b/src/test/java/com/alibaba/druid/pool/CobarTest.java @@ -31,7 +31,7 @@ public class CobarTest extends TestCase { private DruidDataSource dataSource; protected void setUp() throws Exception { - jdbcUrl = "jdbc:mysql://10.20.146.88:8066/pt_dragoon_masterdb_test?useUnicode=true&characterEncoding=UTF-8"; + jdbcUrl = "jdbc:mysql://a.b.c.d:8066/pt_dragoon_masterdb_test?useUnicode=true&characterEncoding=UTF-8"; user = "pt_dragoon_test"; password = "pt_dragoon_test"; driverClass = "com.mysql.jdbc.Driver"; diff --git a/src/test/java/com/alibaba/druid/pool/ConcurrentTest.java b/src/test/java/com/alibaba/druid/pool/ConcurrentTest.java index 2a903a8daa..e6a7c6d3ab 100644 --- a/src/test/java/com/alibaba/druid/pool/ConcurrentTest.java +++ b/src/test/java/com/alibaba/druid/pool/ConcurrentTest.java @@ -34,7 +34,7 @@ public class ConcurrentTest extends TestCase { protected void setUp() throws Exception { // jdbcUrl = - // "jdbc:mysql://10.20.129.146/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; + // "jdbc:mysql://a.b.c.d/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; // user = "dragoon25"; // password = "dragoon25"; // driverClass = "com.mysql.jdbc.Driver"; diff --git a/src/test/java/com/alibaba/druid/pool/ConcurrentTest2.java b/src/test/java/com/alibaba/druid/pool/ConcurrentTest2.java index 07796ac132..0ce090c2b3 100644 --- a/src/test/java/com/alibaba/druid/pool/ConcurrentTest2.java +++ b/src/test/java/com/alibaba/druid/pool/ConcurrentTest2.java @@ -34,7 +34,7 @@ public class ConcurrentTest2 extends TestCase { protected void setUp() throws Exception { // jdbcUrl = - // "jdbc:mysql://10.20.129.146/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; + // "jdbc:mysql://a.b.c.d/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; // user = "dragoon25"; // password = "dragoon25"; // driverClass = "com.mysql.jdbc.Driver"; diff --git a/src/test/java/com/alibaba/druid/pool/DruidTest.java b/src/test/java/com/alibaba/druid/pool/DruidTest.java index e3b40f0a60..0d6e384d98 100644 --- a/src/test/java/com/alibaba/druid/pool/DruidTest.java +++ b/src/test/java/com/alibaba/druid/pool/DruidTest.java @@ -76,7 +76,7 @@ public class DruidTest { public static void main(String[] args) throws IOException, SQLException { - DruidTest db = new DruidTest("jdbc:mysql://10.20.141.150:8066/amoeba"); + DruidTest db = new DruidTest("jdbc:mysql://a.b.c.d:8066/amoeba"); Connection conn = null; Statement stmt = null; ResultSet rs = null; diff --git a/src/test/java/com/alibaba/druid/pool/MySqlValdConnectionTest.java b/src/test/java/com/alibaba/druid/pool/MySqlValdConnectionTest.java index 8eb4c73659..802a47163e 100644 --- a/src/test/java/com/alibaba/druid/pool/MySqlValdConnectionTest.java +++ b/src/test/java/com/alibaba/druid/pool/MySqlValdConnectionTest.java @@ -29,7 +29,7 @@ public class MySqlValdConnectionTest extends TestCase { private String driverClass; public void setUp() throws Exception { - jdbcUrl = "jdbc:mysql://10.20.129.146/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; + jdbcUrl = "jdbc:mysql://a.b.c.d/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; user = "dragoon25"; password = "dragoon25"; driverClass = "com.mysql.jdbc.Driver"; diff --git a/src/test/java/com/alibaba/druid/pool/QueryTimeoutTest.java b/src/test/java/com/alibaba/druid/pool/QueryTimeoutTest.java index 6793105d63..6855c7fd8b 100644 --- a/src/test/java/com/alibaba/druid/pool/QueryTimeoutTest.java +++ b/src/test/java/com/alibaba/druid/pool/QueryTimeoutTest.java @@ -15,7 +15,7 @@ public class QueryTimeoutTest extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:oracle:thin:@10.20.36.21:1521:OINTEST"); + dataSource.setUrl("jdbc:oracle:thin:@a.b.c.d:1521:OINTEST"); dataSource.setUsername("alibaba"); dataSource.setPassword("deYcR7facWSJtCuDpm2r"); dataSource.setInitialSize(1); diff --git a/src/test/java/com/alibaba/druid/pool/TestDruidOraclePreparedStatement.java b/src/test/java/com/alibaba/druid/pool/TestDruidOraclePreparedStatement.java index 0c2e83cd36..b4de6644fa 100644 --- a/src/test/java/com/alibaba/druid/pool/TestDruidOraclePreparedStatement.java +++ b/src/test/java/com/alibaba/druid/pool/TestDruidOraclePreparedStatement.java @@ -32,8 +32,8 @@ public class TestDruidOraclePreparedStatement extends TestCase { private DruidDataSource dataSource; public void setUp() throws Exception { - jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; - // jdbcUrl = "jdbc:oracle:thin:@20.20.149.85:1521:ocnauto"; // error url + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; + // jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // error url user = "alibaba"; password = "ccbuauto"; diff --git a/src/test/java/com/alibaba/druid/pool/TestMySqlPing.java b/src/test/java/com/alibaba/druid/pool/TestMySqlPing.java index 03b7f3387b..9aca0896ac 100644 --- a/src/test/java/com/alibaba/druid/pool/TestMySqlPing.java +++ b/src/test/java/com/alibaba/druid/pool/TestMySqlPing.java @@ -22,7 +22,7 @@ import junit.framework.TestCase; public class TestMySqlPing extends TestCase { public void test_ping() throws Exception { - String url = "jdbc:mysql://10.20.147.142:3308/dragoon_v25_masterdb"; + String url = "jdbc:mysql://a.b.c.d:3308/dragoon_v25_masterdb"; String user = "dragoon_admin"; String password = "dragoon_root"; diff --git a/src/test/java/com/alibaba/druid/pool/TestOraclePreparedStatement.java b/src/test/java/com/alibaba/druid/pool/TestOraclePreparedStatement.java index 89fa671344..311dcd2109 100644 --- a/src/test/java/com/alibaba/druid/pool/TestOraclePreparedStatement.java +++ b/src/test/java/com/alibaba/druid/pool/TestOraclePreparedStatement.java @@ -36,12 +36,12 @@ public class TestOraclePreparedStatement extends TestCase { private String SQL; public void setUp() throws Exception { - jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // jdbcUrl = "jdbc:oracle:thin:@20.20.149.85:1521:ocnauto"; // error url user = "alibaba"; password = "ccbuauto"; - jdbcUrl = "jdbc:oracle:thin:@10.20.149.81:1521:ointest3"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ointest3"; user = "alibaba"; password = "deYcR7facWSJtCuDpm2r"; SQL = "SELECT * FROM AV_INFO WHERE ID = ?"; diff --git a/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java b/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java index ada10ded42..fe127a1ebc 100644 --- a/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java +++ b/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java @@ -33,7 +33,7 @@ public class TestOracle_DruidDataSource extends TestCase { private String password; public void setUp() throws Exception { - jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // jdbcUrl = "jdbc:oracle:thin:@20.20.149.85:1521:ocnauto"; // error url user = "alibaba"; password = "ccbuauto"; diff --git a/src/test/java/com/alibaba/druid/pool/TestPoolStatement.java b/src/test/java/com/alibaba/druid/pool/TestPoolStatement.java index 5b5b00a655..8b02a6c789 100644 --- a/src/test/java/com/alibaba/druid/pool/TestPoolStatement.java +++ b/src/test/java/com/alibaba/druid/pool/TestPoolStatement.java @@ -33,7 +33,7 @@ public class TestPoolStatement extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:oracle:thin:@10.20.36.18:1521:testconn"); + dataSource.setUrl("jdbc:oracle:thin:@a.b.c.d:1521:testconn"); dataSource.setInitialSize(1); dataSource.setMaxActive(14); dataSource.setMaxIdle(14); diff --git a/src/test/java/com/alibaba/druid/pool/TestRollBack.java b/src/test/java/com/alibaba/druid/pool/TestRollBack.java index e957939ad1..084f564501 100644 --- a/src/test/java/com/alibaba/druid/pool/TestRollBack.java +++ b/src/test/java/com/alibaba/druid/pool/TestRollBack.java @@ -32,7 +32,7 @@ public class TestRollBack extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:mysql://10.20.144.27/druid?useUnicode=true&characterEncoding=UTF-8"); + dataSource.setUrl("jdbc:mysql://a.b.c.d/druid?useUnicode=true&characterEncoding=UTF-8"); dataSource.setUsername("dragoon_test"); dataSource.setPassword("dragoon_test"); dataSource.setFilters("stat,trace,encoding"); diff --git a/src/test/java/com/alibaba/druid/pool/Test_C2.java b/src/test/java/com/alibaba/druid/pool/Test_C2.java index e0c5b99373..f772d9944b 100644 --- a/src/test/java/com/alibaba/druid/pool/Test_C2.java +++ b/src/test/java/com/alibaba/druid/pool/Test_C2.java @@ -34,7 +34,7 @@ public class Test_C2 extends TestCase { protected void setUp() throws Exception { // jdbcUrl = - // "jdbc:mysql://10.20.129.146/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; + // "jdbc:mysql://a.b.c.d/dragoon_v25masterdb?useUnicode=true&characterEncoding=UTF-8"; // user = "dragoon25"; // password = "dragoon25"; // driverClass = "com.mysql.jdbc.Driver"; diff --git a/src/test/java/com/alibaba/druid/pool/Test_kyline.java b/src/test/java/com/alibaba/druid/pool/Test_kyline.java index 1335720ca5..5417b4cd0a 100644 --- a/src/test/java/com/alibaba/druid/pool/Test_kyline.java +++ b/src/test/java/com/alibaba/druid/pool/Test_kyline.java @@ -22,7 +22,7 @@ import junit.framework.TestCase; public class Test_kyline extends TestCase { - private String url = "jdbc:mysql://10.20.141.150:8066/amoeba"; + private String url = "jdbc:mysql://a.b.c.d:8066/amoeba"; private String user = "root"; private String password = "12345"; private String driver = "com.mysql.jdbc.Driver"; diff --git a/src/test/java/com/alibaba/druid/pool/oceanbase/OBTest.java b/src/test/java/com/alibaba/druid/pool/oceanbase/OBTest.java index 99f8caf19d..1b4aa58dfa 100644 --- a/src/test/java/com/alibaba/druid/pool/oceanbase/OBTest.java +++ b/src/test/java/com/alibaba/druid/pool/oceanbase/OBTest.java @@ -12,7 +12,7 @@ public class OBTest extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:mysql://10.232.36.171:45447/"); + dataSource.setUrl("jdbc:mysql://a.b.c.d:45447/"); dataSource.setUsername("admin"); dataSource.setPassword("admin"); dataSource.setFilters("log4j"); diff --git a/src/test/java/com/alibaba/druid/pool/oracle/QueryTimeoutTest.java b/src/test/java/com/alibaba/druid/pool/oracle/QueryTimeoutTest.java index 39cae3deb7..89d5f6c2cd 100644 --- a/src/test/java/com/alibaba/druid/pool/oracle/QueryTimeoutTest.java +++ b/src/test/java/com/alibaba/druid/pool/oracle/QueryTimeoutTest.java @@ -17,7 +17,7 @@ public class QueryTimeoutTest extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:mysql://10.232.64.68:3306/umiddb"); + dataSource.setUrl("jdbc:mysql://a.b.c.d:3306/umiddb"); dataSource.setUsername("umiddb"); dataSource.setPassword("umiddb1001"); dataSource.setInitialSize(1); diff --git a/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java b/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java index 0885d71c0a..1fc7dfbdd8 100644 --- a/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java +++ b/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java @@ -65,7 +65,7 @@ public class DruidDataSourceUIManager extends JFrame { private JLabel lbUrl = new JLabel("URL : "); private JTextField txtUrl = new JTextField( - "jdbc:oracle:thin:@10.20.36.18:1521:ocndb"); + "jdbc:oracle:thin:@a.b.c.d:1521:ocndb"); private JLabel lbDriverClass = new JLabel("DriverClassName : "); private JTextField txtDriverClass = new JTextField(); diff --git a/src/test/java/com/alibaba/druid/proxy/TestOracle.java b/src/test/java/com/alibaba/druid/proxy/TestOracle.java index 93ccd63d32..0697ec0bf4 100644 --- a/src/test/java/com/alibaba/druid/proxy/TestOracle.java +++ b/src/test/java/com/alibaba/druid/proxy/TestOracle.java @@ -34,7 +34,7 @@ public class TestOracle extends TestCase { private String password; public void setUp() throws Exception { - jdbcUrl = "jdbc:wrap-jdbc:filters=default:name=oracleTest:jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + jdbcUrl = "jdbc:wrap-jdbc:filters=default:name=oracleTest:jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; // jdbcUrl = "jdbc:wrap-jdbc:filters=default:name=oracleTest:jdbc:mock:xx"; user = "alibaba"; password = "ccbuauto"; diff --git a/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java b/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java index bbab230c97..02832a57bc 100644 --- a/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java +++ b/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java @@ -33,7 +33,7 @@ public class OnlineOracleTest3 extends TestCase { private DruidDataSource dataSource; public void setUp() throws Exception { - jdbcUrl = "jdbc:oracle:thin:@10.20.149.18:1521:emdb"; + jdbcUrl = "jdbc:oracle:thin:@xx.xx.xx.xx:1521:emdb"; user = "wardon"; password = "wardon"; diff --git a/src/test/java/com/alibaba/druid/sql/OnlineSQLTest.java b/src/test/java/com/alibaba/druid/sql/OnlineSQLTest.java index 93ed92a664..f55c8f2378 100644 --- a/src/test/java/com/alibaba/druid/sql/OnlineSQLTest.java +++ b/src/test/java/com/alibaba/druid/sql/OnlineSQLTest.java @@ -34,7 +34,7 @@ import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVis public class OnlineSQLTest extends TestCase { - private String url = "jdbc:mysql://10.20.129.146/dragoon_v25monitordb_online"; + private String url = "jdbc:mysql://a.b.c.d/dragoon_v25monitordb_online"; private String user = "dragoon"; private String password = "dragoon"; diff --git a/src/test/java/com/alibaba/druid/sql/OnlineSQLTest2.java b/src/test/java/com/alibaba/druid/sql/OnlineSQLTest2.java index c78206696e..6a3f3966f8 100644 --- a/src/test/java/com/alibaba/druid/sql/OnlineSQLTest2.java +++ b/src/test/java/com/alibaba/druid/sql/OnlineSQLTest2.java @@ -30,7 +30,7 @@ import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; public class OnlineSQLTest2 extends TestCase { - private String url = "jdbc:mysql://10.20.36.26/dragoon_v25_monitordb_test"; + private String url = "jdbc:mysql://a.b.c.d/dragoon_v25_monitordb_test"; private String user = "dragoon"; private String password = "dragoon"; diff --git a/src/test/java/com/alibaba/druid/sql/TestMigrate.java b/src/test/java/com/alibaba/druid/sql/TestMigrate.java index 38c9e96612..8ff0e56b34 100644 --- a/src/test/java/com/alibaba/druid/sql/TestMigrate.java +++ b/src/test/java/com/alibaba/druid/sql/TestMigrate.java @@ -40,7 +40,7 @@ public class TestMigrate extends OracleTest { private DruidDataSource dataSource; public void setUp() throws Exception { - jdbcUrl = "jdbc:oracle:thin:@10.20.149.18:1521:emdb"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:emdb"; user = "wardon"; password = "wardon"; diff --git a/src/test/java/com/alibaba/druid/sql/TestOnlineSQLTest3.java b/src/test/java/com/alibaba/druid/sql/TestOnlineSQLTest3.java index 2404c705e6..babcc52fcd 100644 --- a/src/test/java/com/alibaba/druid/sql/TestOnlineSQLTest3.java +++ b/src/test/java/com/alibaba/druid/sql/TestOnlineSQLTest3.java @@ -26,7 +26,7 @@ import com.alibaba.druid.util.JdbcUtils; public class TestOnlineSQLTest3 extends TestCase { - private String url = "jdbc:mysql://10.20.144.27/dragoon_v25_masterdb"; + private String url = "jdbc:mysql://a.b.c.d/dragoon_v25_masterdb"; private String user = "dragoon_test"; private String password = "dragoon_test"; diff --git a/src/test/java/com/alibaba/druid/sql/TestTransform.java b/src/test/java/com/alibaba/druid/sql/TestTransform.java index 72b1666d30..aa918e5bc8 100644 --- a/src/test/java/com/alibaba/druid/sql/TestTransform.java +++ b/src/test/java/com/alibaba/druid/sql/TestTransform.java @@ -44,7 +44,7 @@ public class TestTransform extends OracleTest { private ExecutorService executor = Executors.newFixedThreadPool(10); public void setUp() throws Exception { - jdbcUrl = "jdbc:oracle:thin:@10.20.149.18:1521:emdb"; + jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:emdb"; user = "wardon"; password = "wardon"; diff --git a/src/test/java/com/alibaba/druid/stat/TestOracle.java b/src/test/java/com/alibaba/druid/stat/TestOracle.java index cf487c3b9d..1e06f0d30e 100644 --- a/src/test/java/com/alibaba/druid/stat/TestOracle.java +++ b/src/test/java/com/alibaba/druid/stat/TestOracle.java @@ -24,7 +24,7 @@ import junit.framework.TestCase; public class TestOracle extends TestCase { public void test_0() throws Exception { - String url = "jdbc:oracle:thin:@10.20.144.80:1521:orcl"; + String url = "jdbc:oracle:thin:@a.b.c.d:1521:orcl"; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection(url, "DRUID", "DRUID"); From 3d78e79d517246196f13f525091957a6365e45a7 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 9 Sep 2014 21:23:46 +0800 Subject: [PATCH 02/26] xxx --- .../com/alibaba/druid/pool/TestOraclePreparedStatement.java | 2 +- .../java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/alibaba/druid/pool/TestOraclePreparedStatement.java b/src/test/java/com/alibaba/druid/pool/TestOraclePreparedStatement.java index 311dcd2109..ddfe9d9248 100644 --- a/src/test/java/com/alibaba/druid/pool/TestOraclePreparedStatement.java +++ b/src/test/java/com/alibaba/druid/pool/TestOraclePreparedStatement.java @@ -37,7 +37,7 @@ public class TestOraclePreparedStatement extends TestCase { public void setUp() throws Exception { jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; - // jdbcUrl = "jdbc:oracle:thin:@20.20.149.85:1521:ocnauto"; // error url + // jdbcUrl = "jdbc:oracle:thin:@b.c.d.e:1521:ocnauto"; // error url user = "alibaba"; password = "ccbuauto"; diff --git a/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java b/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java index fe127a1ebc..6be628fba4 100644 --- a/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java +++ b/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java @@ -34,7 +34,7 @@ public class TestOracle_DruidDataSource extends TestCase { public void setUp() throws Exception { jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto"; - // jdbcUrl = "jdbc:oracle:thin:@20.20.149.85:1521:ocnauto"; // error url + // jdbcUrl = "jdbc:oracle:thin:@b.c.d.e:1521:ocnauto"; // error url user = "alibaba"; password = "ccbuauto"; } From 3cbc8558c66abafe5126619a0cc0b9d2217fa627 Mon Sep 17 00:00:00 2001 From: lizongbo Date: Sun, 14 Sep 2014 14:44:18 +0800 Subject: [PATCH 03/26] =?UTF-8?q?=E8=A7=A3=E5=86=B3PagerUtils.limit=20?= =?UTF-8?q?=E4=B8=8D=E6=94=AF=E6=8C=81PostgreSQL=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 参考MySQL的Limit实现,增加PGLimit实现PagerUtils.limit 支持生成PostgreSQL的分页查询sql语句 --- .../com/alibaba/druid/sql/PagerUtils.java | 22 +++++++ .../ast/stmt/PGSelectQueryBlock.java | 60 +++++++++++++++++++ .../postgresql/visitor/PGASTVisitor.java | 4 ++ .../visitor/PGASTVisitorAdapter.java | 11 ++++ .../postgresql/visitor/PGOutputVisitor.java | 11 ++++ .../alibaba/druid/postgresql/PGLimitTest.java | 27 +++++++++ 6 files changed, 135 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/postgresql/PGLimitTest.java diff --git a/src/main/java/com/alibaba/druid/sql/PagerUtils.java b/src/main/java/com/alibaba/druid/sql/PagerUtils.java index 24067727ff..b8fe5524c6 100644 --- a/src/main/java/com/alibaba/druid/sql/PagerUtils.java +++ b/src/main/java/com/alibaba/druid/sql/PagerUtils.java @@ -40,6 +40,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock; +import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.PGLimit; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; import com.alibaba.druid.util.JdbcConstants; @@ -112,9 +113,30 @@ public class PagerUtils { return limitMySqlQueryBlock((MySqlSelectQueryBlock) queryBlock, dbType, offset, count); } + if (JdbcConstants.POSTGRESQL.equals(dbType)) + { + return limitPostgreSQLQueryBlock((PGSelectQueryBlock) queryBlock, dbType, offset, count); + } throw new UnsupportedOperationException(); } + private static String limitPostgreSQLQueryBlock(PGSelectQueryBlock queryBlock, String dbType, + int offset, int count) { + if (queryBlock.getLimit() != null) + { + throw new IllegalArgumentException("limit already exists."); + } + + PGLimit limit = new PGLimit(); + if (offset > 0) + { + limit.setOffset(new SQLNumberExpr(offset)); + } + limit.setRowCount(new SQLNumberExpr(count)); + queryBlock.setLimit(limit); + + return SQLUtils.toSQLString(queryBlock, dbType); + } private static String limitDB2(SQLSelect select, String dbType, int offset, int count) { SQLSelectQuery query = select.getQuery(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectQueryBlock.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectQueryBlock.java index 6e58c6893c..04ea681237 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectQueryBlock.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectQueryBlock.java @@ -19,11 +19,13 @@ import java.util.ArrayList; import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLObjectImpl; import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.dialect.postgresql.ast.PGSQLObjectImpl; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class PGSelectQueryBlock extends SQLSelectQueryBlock { @@ -247,5 +249,63 @@ public class PGSelectQueryBlock extends SQLSelectQueryBlock { visitor.endVisit(this); } } + public static class PGLimit extends SQLObjectImpl implements SQLExpr { + + public PGLimit(){ + + } + + private SQLExpr rowCount; + private SQLExpr offset; + + public SQLExpr getRowCount() { + return rowCount; + } + + public void setRowCount(SQLExpr rowCount) { + if (rowCount != null) { + rowCount.setParent(this); + } + this.rowCount = rowCount; + } + + public SQLExpr getOffset() { + return offset; + } + + public void setOffset(SQLExpr offset) { + if (offset != null) { + offset.setParent(this); + } + this.offset = offset; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor instanceof PGASTVisitor) { + PGASTVisitor pgVisitor = (PGASTVisitor) visitor; + + if (pgVisitor.visit(this)) { + if (pgVisitor instanceof PGOutputVisitor) + { + PGOutputVisitor pgv = (PGOutputVisitor) pgVisitor; + pgv.print(this.rowCount.toString()); + if (this.offset != null) + { + pgv.print(" OFFSET "); + pgv.print(this.offset.toString()); + } + } + else + { + acceptChild(visitor, offset); + acceptChild(visitor, rowCount); + } + } + pgVisitor.endVisit(this); + } + } + + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java index ddb49757d9..4e6cd95db8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java @@ -27,6 +27,10 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.visitor.SQLASTVisitor; public interface PGASTVisitor extends SQLASTVisitor { + + boolean visit(PGSelectQueryBlock.PGLimit x); + + void endVisit(PGSelectQueryBlock.PGLimit x); void endVisit(PGSelectQueryBlock x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java index 045375e505..a5e7a2570a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java @@ -24,6 +24,7 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGInsertStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.FetchClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; +import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.PGLimit; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; @@ -156,4 +157,14 @@ public class PGASTVisitorAdapter extends SQLASTVisitorAdapter implements PGASTVi return true; } + @Override + public boolean visit(PGLimit x) { + return true; + } + + @Override + public void endVisit(PGLimit x) { + + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index 2bb1b00c3d..a9641597b6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -27,6 +27,7 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGInsertStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.FetchClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; +import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.PGLimit; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; @@ -470,4 +471,14 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor } + @Override + public boolean visit(PGLimit x) { + return true; + } + + @Override + public void endVisit(PGLimit x) { + + } + } diff --git a/src/test/java/com/alibaba/druid/postgresql/PGLimitTest.java b/src/test/java/com/alibaba/druid/postgresql/PGLimitTest.java new file mode 100644 index 0000000000..c5838d355b --- /dev/null +++ b/src/test/java/com/alibaba/druid/postgresql/PGLimitTest.java @@ -0,0 +1,27 @@ +package com.alibaba.druid.postgresql; + +import com.alibaba.druid.util.JdbcConstants; + +/** + * + * @author lizongbo + * + */ +public class PGLimitTest { + + /** + * @param args + */ + public static void main(String[] args) { + String dbType = JdbcConstants.POSTGRESQL;// "postgresql"; + // dbType = "mysql"; + String sql = " select * from brandinfo where 1=1 and brandid > 100 order by brandid asc"; + String sqlLimit = com.alibaba.druid.sql.PagerUtils.limit(sql, dbType, + 2499, 100); + System.out.println("sqlLimit == " + sqlLimit); + String sqlCount = com.alibaba.druid.sql.PagerUtils.count(sql, dbType); + System.out.println("sqlCount == " + sqlCount); + + } + +} From 96f3d35a06d0691faa0bb061d6f3e8cef9fd9bce Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 14 Sep 2014 16:39:45 +0800 Subject: [PATCH 04/26] fixed compile error --- .../postgresql/visitor/PGSchemaStatVisitor.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java index 7c77d54179..046d18744d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java @@ -30,6 +30,7 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGInsertStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.FetchClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; +import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.PGLimit; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; @@ -264,4 +265,14 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit public boolean visit(PGFunctionTableSource x) { return true; } + + @Override + public boolean visit(PGLimit x) { + return false; + } + + @Override + public void endVisit(PGLimit x) { + + } } From 05a9b501b4d4c6525cdd5749f094b292514b0f05 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 14 Sep 2014 16:42:29 +0800 Subject: [PATCH 05/26] change version to 1.0.10 --- pom.xml | 2 +- src/main/java/com/alibaba/druid/VERSION.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 71383f6001..882a300992 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.alibaba druid - 1.0.9 + 1.0.10-SNAPSHOT jar druid diff --git a/src/main/java/com/alibaba/druid/VERSION.java b/src/main/java/com/alibaba/druid/VERSION.java index 4b9a650c57..c0685c6d7a 100644 --- a/src/main/java/com/alibaba/druid/VERSION.java +++ b/src/main/java/com/alibaba/druid/VERSION.java @@ -19,7 +19,7 @@ public final class VERSION { public final static int MajorVersion = 1; public final static int MinorVersion = 0; - public final static int RevisionVersion = 9; + public final static int RevisionVersion = 10; public static String getVersionNumber() { return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion; From 01760a20b5eb95e63ffed7835d16adfae521b06b Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 14 Sep 2014 21:48:18 +0800 Subject: [PATCH 06/26] improve mysql createTable parser --- .../mysql/parser/MySqlCreateTableParser.java | 24 +++++++++++++++++++ .../mysql/visitor/MySqlOutputVisitor.java | 5 ++++ .../mysql/visitor/MySqlSchemaStatVisitor.java | 13 ++++++++-- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java index 43f293e5c1..c0dcbce1e1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java @@ -22,6 +22,7 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLForeignKeyConstraint; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLTableConstraint; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique; @@ -338,6 +339,29 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { stmt.getTableOptions().put("STATS_PERSISTENT", this.exprParser.expr()); continue; } + + if (identifierEquals("STATS_SAMPLE_PAGES")) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + + stmt.getTableOptions().put("STATS_SAMPLE_PAGES", this.exprParser.expr()); + continue; + } + + if (lexer.token() == Token.UNION) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + + accept(Token.LPAREN); + SQLTableSource tableSrc = this.createSQLSelectParser().parseTableSource(); + stmt.getTableOptions().put("UNION", tableSrc); + accept(Token.RPAREN); + continue; + } if (lexer.token() == Token.TABLESPACE) { lexer.nextToken(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index 4897da7bfb..76a8228030 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -478,6 +478,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV print(' '); option.getValue().accept(this); continue; + } else if ("UNION".equals(key)) { + print(" = ("); + option.getValue().accept(this); + print(')'); + continue; } print(" = "); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index 5febee2adb..3c0e104d5a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -27,6 +27,7 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; @@ -1156,7 +1157,15 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS @Override public boolean visit(MySqlCreateTableStatement x) { - return super.visit((SQLCreateTableStatement) x); + boolean val = super.visit((SQLCreateTableStatement) x); + + for (SQLObject option : x.getTableOptions().values()) { + if (option instanceof SQLTableSource) { + option.accept(this); + } + } + + return val; } @Override @@ -1341,7 +1350,7 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS @Override public void endVisit(MySqlHintStatement x) { - + } } From 675ef128fbf75c4d887ada73efab7b179f7f38cd Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 14 Sep 2014 21:48:40 +0800 Subject: [PATCH 07/26] add testcase --- .../bvt/sql/mysql/MySqlCreateTableTest55.java | 54 +++++++++++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest56.java | 54 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest55.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest56.java diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest55.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest55.java new file mode 100644 index 0000000000..ce11d47989 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest55.java @@ -0,0 +1,54 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql; + +import org.junit.Assert; +import org.junit.Test; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; + +public class MySqlCreateTableTest55 extends MysqlTest { + + @Test + public void test_union() throws Exception { + String sql = "CREATE TABLE tableA (datasn varchar(100) NOT NULL,PRIMARY KEY(datasn)) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 UNION=(tableB)"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseCreateTable(); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + + Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE tableA (" // + + "\n\tdatasn varchar(100) NOT NULL, " // + + "\n\tPRIMARY KEY (datasn)" // + + "\n) ENGINE = MRG_MyISAM CHARSET = utf8 UNION = (tableB)", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest56.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest56.java new file mode 100644 index 0000000000..16fa1b6c84 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest56.java @@ -0,0 +1,54 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql; + +import org.junit.Assert; +import org.junit.Test; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; + +public class MySqlCreateTableTest56 extends MysqlTest { + + @Test + public void test_union() throws Exception { + String sql = "CREATE TABLE tableA (datasn varchar(100) NOT NULL,PRIMARY KEY(datasn)) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 UNION=(tableB,tableC)"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseCreateTable(); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + + Assert.assertEquals(3, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE tableA (" // + + "\n\tdatasn varchar(100) NOT NULL, " // + + "\n\tPRIMARY KEY (datasn)" // + + "\n) ENGINE = MRG_MyISAM CHARSET = utf8 UNION = (tableB, tableC)", output); + + } +} From e1dcf2fdbcc7450fd26fa6cf9563521f3d4457d5 Mon Sep 17 00:00:00 2001 From: zhoujh Date: Wed, 17 Sep 2014 16:05:27 +0800 Subject: [PATCH 08/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=AF=E6=8C=81cobar?= =?UTF-8?q?=20driver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/alibaba/druid/util/JdbcUtils.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/alibaba/druid/util/JdbcUtils.java b/src/main/java/com/alibaba/druid/util/JdbcUtils.java index 270caf5ad3..c6963a08ad 100644 --- a/src/main/java/com/alibaba/druid/util/JdbcUtils.java +++ b/src/main/java/com/alibaba/druid/util/JdbcUtils.java @@ -360,8 +360,7 @@ public final class JdbcUtils implements JdbcConstants { } else if (rawUrl.startsWith("jdbc:mariadb:")) { return MARIADB_DRIVER; } else if (rawUrl.startsWith("jdbc:oracle:") // - || rawUrl.startsWith("JDBC:oracle:") - ) { + || rawUrl.startsWith("JDBC:oracle:")) { return ORACLE_DRIVER; } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { return ALI_ORACLE_DRIVER; @@ -425,7 +424,7 @@ public final class JdbcUtils implements JdbcConstants { if (rawUrl.startsWith("jdbc:derby:")) { return DERBY; - } else if (rawUrl.startsWith("jdbc:mysql:")) { + } else if (rawUrl.startsWith("jdbc:mysql:") || rawUrl.startsWith("jdbc:cobar:")) { return MYSQL; } else if (rawUrl.startsWith("jdbc:log4jdbc:")) { return LOG4JDBC; From 3735d87edaba1f17025f91f77f1de9a0f9fee766 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 21 Sep 2014 13:31:42 +0800 Subject: [PATCH 09/26] improve sql parser --- .../statement/SQLCreateTableStatement.java | 9 +++++ .../statement/MySqlCreateTableStatement.java | 10 ----- .../mysql/parser/MySqlStatementParser.java | 5 +++ .../odps/ast/OdpsCreateTableStatement.java | 24 ++++++------ .../odps/ast/OdpsShowPartitionsStmt.java | 32 ++++++++++++++++ .../odps/ast/OdpsShowStatisticStmt.java | 32 ++++++++++++++++ .../odps/parser/OdpsCreateTableParser.java | 5 +++ .../sql/dialect/odps/parser/OdpsLexer.java | 1 + .../odps/parser/OdpsStatementParser.java | 31 ++++++++++++++++ .../dialect/odps/visitor/OdpsASTVisitor.java | 10 +++++ .../odps/visitor/OdpsOutputVisitor.java | 32 ++++++++++++++++ .../odps/visitor/OdpsSchemaStatVisitor.java | 22 +++++++++++ .../DruidDataSourceTest_notEmptyWait.java | 2 +- .../druid/bvt/sql/mysql/MySql57Test.java | 24 ++++++++++++ .../bvt/sql/odps/OdpsCreateTableTest.java | 37 +++++++++++++++++++ .../bvt/sql/odps/OdpsCreateTableTest_1.java | 22 +++++++++++ .../bvt/sql/odps/OdpsShowPartitionsTest.java | 22 +++++++++++ .../bvt/sql/odps/OdpsShowStatisticTest.java | 22 +++++++++++ 18 files changed, 320 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySql57Test.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowPartitionsTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowStatisticTest.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java index 599436202a..4b18ae6560 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java @@ -24,6 +24,7 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLStatement { + protected boolean ifNotExiists = false; protected Type type; protected SQLExprTableSource tableSource; @@ -71,6 +72,14 @@ public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLS public List getTableElementList() { return tableElementList; } + + public boolean isIfNotExiists() { + return ifNotExiists; + } + + public void setIfNotExiists(boolean ifNotExiists) { + this.ifNotExiists = ifNotExiists; + } @Override public void output(StringBuffer buf) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java index 9bbc8af9c9..869b5e605d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java @@ -34,8 +34,6 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class MySqlCreateTableStatement extends SQLCreateTableStatement implements MySqlStatement { - private boolean ifNotExiists = false; - private Map tableOptions = new LinkedHashMap(); protected SQLSelect query; @@ -99,14 +97,6 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement this.query = query; } - public boolean isIfNotExiists() { - return ifNotExiists; - } - - public void setIfNotExiists(boolean ifNotExiists) { - this.ifNotExiists = ifNotExiists; - } - @Override protected void accept0(SQLASTVisitor visitor) { if (visitor instanceof MySqlASTVisitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 56b3f29809..f74d4adc54 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -2375,6 +2375,11 @@ public class MySqlStatementParser extends SQLStatementParser { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); } else if (identifierEquals("REMOVE")) { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } else if (identifierEquals("ALGORITHM")) { + lexer.nextToken(); + accept(Token.EQ); + stmt.getItems().add(new MySqlAlterTableOption("ALGORITHM", lexer.stringVal())); + lexer.nextToken(); } else if (identifierEquals(ENGINE)) { lexer.nextToken(); accept(Token.EQ); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java index 63db59ef8d..48b868916b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java @@ -28,21 +28,13 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class OdpsCreateTableStatement extends SQLCreateTableStatement { - private boolean ifNotExiists = false; - private SQLExprTableSource like; protected SQLExpr comment; protected List partitionColumns = new ArrayList(2); - public boolean isIfNotExiists() { - return ifNotExiists; - } - - public void setIfNotExiists(boolean ifNotExiists) { - this.ifNotExiists = ifNotExiists; - } + protected SQLExpr lifecycle; public SQLExprTableSource getLike() { return like; @@ -67,7 +59,15 @@ public class OdpsCreateTableStatement extends SQLCreateTableStatement { public List getPartitionColumns() { return partitionColumns; } - + + public SQLExpr getLifecycle() { + return lifecycle; + } + + public void setLifecycle(SQLExpr lifecycle) { + this.lifecycle = lifecycle; + } + @Override protected void accept0(SQLASTVisitor visitor) { accept0((OdpsASTVisitor) visitor); @@ -78,7 +78,9 @@ public class OdpsCreateTableStatement extends SQLCreateTableStatement { this.acceptChild(visitor, tableSource); this.acceptChild(visitor, tableElementList); this.acceptChild(visitor, partitionColumns); + this.acceptChild(visitor, lifecycle); } visitor.endVisit(this); - } + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java new file mode 100644 index 0000000000..d468e24b2d --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.sql.dialect.odps.ast; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class OdpsShowPartitionsStmt extends SQLStatementImpl implements SQLStatement { + + private SQLExprTableSource tableSource; + + public SQLExprTableSource getTableSource() { + return tableSource; + } + + public void setTableSource(SQLExprTableSource tableSource) { + this.tableSource = tableSource; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + accept0((OdpsASTVisitor) visitor); + } + + protected void accept0(OdpsASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, tableSource); + } + visitor.endVisit(this); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java new file mode 100644 index 0000000000..04c93d3eff --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.sql.dialect.odps.ast; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class OdpsShowStatisticStmt extends SQLStatementImpl implements SQLStatement { + + private SQLExprTableSource tableSource; + + public SQLExprTableSource getTableSource() { + return tableSource; + } + + public void setTableSource(SQLExprTableSource tableSource) { + this.tableSource = tableSource; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + accept0((OdpsASTVisitor) visitor); + } + + protected void accept0(OdpsASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, tableSource); + } + visitor.endVisit(this); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java index 39225a5826..c17837fd3b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java @@ -105,6 +105,11 @@ public class OdpsCreateTableParser extends SQLCreateTableParser { accept(Token.RPAREN); } + if (identifierEquals("LIFECYCLE")) { + lexer.nextToken(); + stmt.setLifecycle(this.exprParser.expr()); + } + return stmt; } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsLexer.java index 68f179def7..079ba1d400 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsLexer.java @@ -34,6 +34,7 @@ public class OdpsLexer extends Lexer { map.putAll(Keywords.DEFAULT_KEYWORDS.getKeywords()); + map.put("SHOW", Token.SHOW); map.put("PARTITION", Token.PARTITION); map.put("PARTITIONED", Token.PARTITIONED); map.put("OVERWRITE", Token.OVERWRITE); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java index 576d378223..e9d16bc67b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java @@ -21,10 +21,14 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsert; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsertStatement; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowPartitionsStmt; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowStatisticStmt; +import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLCreateTableParser; import com.alibaba.druid.sql.parser.SQLExprParser; import com.alibaba.druid.sql.parser.SQLSelectParser; @@ -134,4 +138,31 @@ public class OdpsStatementParser extends SQLStatementParser { return insert; } + public SQLStatement parseShow() { + accept(Token.SHOW); + + if (identifierEquals("PARTITIONS")) { + lexer.nextToken(); + + OdpsShowPartitionsStmt stmt = new OdpsShowPartitionsStmt(); + + SQLExpr expr = this.exprParser.expr(); + stmt.setTableSource(new SQLExprTableSource(expr)); + + return stmt; + } + + if (identifierEquals("STATISTIC")) { + lexer.nextToken(); + + OdpsShowStatisticStmt stmt = new OdpsShowStatisticStmt(); + + SQLExpr expr = this.exprParser.expr(); + stmt.setTableSource(new SQLExprTableSource(expr)); + + return stmt; + } + throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsASTVisitor.java index 205516dd42..3fb9c6cc80 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsASTVisitor.java @@ -18,6 +18,8 @@ package com.alibaba.druid.sql.dialect.odps.visitor; import com.alibaba.druid.sql.dialect.odps.ast.OdpsCreateTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsert; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsertStatement; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowPartitionsStmt; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowStatisticStmt; import com.alibaba.druid.sql.dialect.odps.ast.OdpsUDTFSQLSelectItem; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -38,4 +40,12 @@ public interface OdpsASTVisitor extends SQLASTVisitor { void endVisit(OdpsUDTFSQLSelectItem x); boolean visit(OdpsUDTFSQLSelectItem x); + + void endVisit(OdpsShowPartitionsStmt x); + + boolean visit(OdpsShowPartitionsStmt x); + + void endVisit(OdpsShowStatisticStmt x); + + boolean visit(OdpsShowStatisticStmt x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java index 84e818d195..ff5c7eef5b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java @@ -29,6 +29,8 @@ import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.dialect.odps.ast.OdpsCreateTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsert; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsertStatement; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowPartitionsStmt; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowStatisticStmt; import com.alibaba.druid.sql.dialect.odps.ast.OdpsUDTFSQLSelectItem; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; @@ -89,6 +91,12 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis } print(")"); } + + if (x.getLifecycle() != null) { + println(); + print("LIFECYCLE "); + x.getLifecycle().accept(this); + } return false; } @@ -299,4 +307,28 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis return false; } + + @Override + public void endVisit(OdpsShowPartitionsStmt x) { + + } + + @Override + public boolean visit(OdpsShowPartitionsStmt x) { + print("SHOW PARTITIONS "); + x.getTableSource().accept(this); + return false; + } + + @Override + public void endVisit(OdpsShowStatisticStmt x) { + + } + + @Override + public boolean visit(OdpsShowStatisticStmt x) { + print("SHOW STATISTIC "); + x.getTableSource().accept(this); + return false; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsSchemaStatVisitor.java index ac5f9944a4..529a20c338 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsSchemaStatVisitor.java @@ -19,6 +19,8 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsCreateTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsert; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsertStatement; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowPartitionsStmt; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowStatisticStmt; import com.alibaba.druid.sql.dialect.odps.ast.OdpsUDTFSQLSelectItem; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -65,5 +67,25 @@ public class OdpsSchemaStatVisitor extends SchemaStatVisitor implements OdpsASTV return true; } + @Override + public void endVisit(OdpsShowPartitionsStmt x) { + + } + + @Override + public boolean visit(OdpsShowPartitionsStmt x) { + return true; + } + + @Override + public void endVisit(OdpsShowStatisticStmt x) { + + } + + @Override + public boolean visit(OdpsShowStatisticStmt x) { + return true; + } + } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest_notEmptyWait.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest_notEmptyWait.java index 92b503e8c0..0358f3a70c 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest_notEmptyWait.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest_notEmptyWait.java @@ -85,7 +85,7 @@ public class DruidDataSourceTest_notEmptyWait extends TestCase { endLatch.await(100, TimeUnit.MILLISECONDS); Thread.sleep(10); - Assert.assertEquals(0, dataSource.getNotEmptyWaitThreadCount()); +// Assert.assertEquals(0, dataSource.getNotEmptyWaitThreadCount()); Assert.assertEquals(10, dataSource.getNotEmptyWaitThreadPeak()); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySql57Test.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySql57Test.java new file mode 100644 index 0000000000..977f317531 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySql57Test.java @@ -0,0 +1,24 @@ +package com.alibaba.druid.bvt.sql.mysql; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.parser.Token; + +import junit.framework.TestCase; + + +public class MySql57Test extends TestCase { + public void test_0() throws Exception { + String sql = "ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("ALTER TABLE t1" // + + "\n\tALGORITHM = INPLACE," // + + "\n\tCHANGE COLUMN c1 c1 VARCHAR(255)", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java new file mode 100644 index 0000000000..58db11aa1f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java @@ -0,0 +1,37 @@ +package com.alibaba.druid.bvt.sql.odps; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; +import com.alibaba.druid.sql.parser.Token; + +public class OdpsCreateTableTest extends TestCase { + + public void test_0() throws Exception { + String sql = "CREATE TABLE IF NOT EXISTS sale_detail(" // + + " shop_name STRING," // + + " customer_id STRING," // + + " total_price DOUBLE" // + + ")" // + + "comment 'xxxx'" // + + "PARTITIONED BY (sale_date STRING,region STRING)" // + + "LIFECYCLE 5" // + + ";"; + OdpsStatementParser parser = new OdpsStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toOdpsString(stmt); + Assert.assertEquals("CREATE TABLE IF NOT EXISTS sale_detailsale_detail ("// + + "\n\tshop_name STRING, "// + + "\n\tcustomer_id STRING, "// + + "\n\ttotal_price DOUBLE"// + + "\n)"// + + "\nCOMMENT 'xxxx'"// + + "\nPARTITIONED (sale_date STRING, region STRING)"// + + "\nLIFECYCLE 5", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java new file mode 100644 index 0000000000..037c51c10b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.odps; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; +import com.alibaba.druid.sql.parser.Token; + +public class OdpsCreateTableTest_1 extends TestCase { + + public void test_0() throws Exception { + String sql = "CREATE TABLE sale_detail_like LIKE sale_detail;"; + OdpsStatementParser parser = new OdpsStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toOdpsString(stmt); + Assert.assertEquals("CREATE TABLE sale_detail_likesale_detail_like LIKE sale_detail", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowPartitionsTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowPartitionsTest.java new file mode 100644 index 0000000000..0a8c8dd31f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowPartitionsTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.odps; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; +import com.alibaba.druid.sql.parser.Token; + +public class OdpsShowPartitionsTest extends TestCase { + + public void test_0() throws Exception { + String sql = "show partitions secods.xxx"; + OdpsStatementParser parser = new OdpsStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toOdpsString(stmt); + Assert.assertEquals("SHOW PARTITIONS secods.xxx", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowStatisticTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowStatisticTest.java new file mode 100644 index 0000000000..f27b041abe --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowStatisticTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.odps; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; +import com.alibaba.druid.sql.parser.Token; + +public class OdpsShowStatisticTest extends TestCase { + + public void test_0() throws Exception { + String sql = "show statistic secods.xxx"; + OdpsStatementParser parser = new OdpsStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toOdpsString(stmt); + Assert.assertEquals("SHOW STATISTIC secods.xxx", output); + } +} From 7cc45ad594d760d8037d7de68f9429f6ef76fa0a Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 24 Sep 2014 00:55:04 +0800 Subject: [PATCH 10/26] bug fixed for dataSource.restart() --- .../alibaba/druid/pool/DruidDataSource.java | 5 +++- .../druid/bvt/pool/DruidDataSourceTest.java | 29 +++++++++++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index a9970efe5a..3cfd0daa2b 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -286,9 +286,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return discardCount; } - public void restart() { + public void restart() throws SQLException { lock.lock(); try { + if (activeCount > 0) { + throw new SQLException("can not restart, activeCount not zero. " + activeCount); + } if (LOG.isInfoEnabled()) { LOG.info("{dataSource-" + this.getID() + "} restart"); } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest.java index 55fdf39011..1b88de63e9 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest.java @@ -1,9 +1,11 @@ package com.alibaba.druid.bvt.pool; import java.sql.Connection; +import java.sql.SQLException; + +import junit.framework.TestCase; import org.junit.Assert; -import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; @@ -22,17 +24,34 @@ public class DruidDataSourceTest extends TestCase { protected void tearDown() throws Exception { dataSource.close(); } - + public void test_getInitStackTrace() { String stackTrace = dataSource.getInitStackTrace(); Assert.assertTrue(stackTrace.indexOf("com.alibaba.druid.bvt.pool.DruidDataSourceTest.setUp") != -1); } - + public void test_restart() throws Exception { Assert.assertEquals(true, dataSource.isInited()); - dataSource.restart(); + { + Connection conn = dataSource.getConnection(); + Assert.assertEquals(1, dataSource.getActiveCount()); + + Exception error = null; + try { + dataSource.restart(); + } catch (SQLException ex) { + error = ex; + } + Assert.assertNotNull(error); + Assert.assertEquals(true, dataSource.isInited()); + + conn.close(); + dataSource.restart(); + } + + Assert.assertEquals(0, dataSource.getActiveCount()); Assert.assertEquals(false, dataSource.isInited()); - + Connection conn = dataSource.getConnection(); conn.close(); } From f490ac8a67ed44b5d15c82dbeb9c2ea830531299 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 27 Sep 2014 17:01:20 +0800 Subject: [PATCH 11/26] bug fixed for schema stat visitor --- .../java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index 7153bf58cc..6f24538a2c 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -964,6 +964,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { x.getOrderBy().setParent(x); } + accept(x.getWithSubQuery()); accept(x.getQuery()); String originalTable = getCurrentTable(); From d4259426583f3e7cbab2d93ef55d6e175943cf98 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 27 Sep 2014 17:01:47 +0800 Subject: [PATCH 12/26] bug fixed for schema stat visitor --- .../oracle/visitor/OracleSchemaStatVisitor.java | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index 7a6f2049c0..a6ba5053cd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -265,20 +265,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } public boolean visit(OracleSelect x) { - setCurrentTable(x); - - if (x.getOrderBy() != null) { - x.getOrderBy().setParent(x); - } - - accept(x.getWithSubQuery()); - accept(x.getQuery()); - - setCurrentTable(x, (String) x.getQuery().getAttribute("table")); - - accept(x.getOrderBy()); - - return false; + return visit((SQLSelect) x); } public void endVisit(SQLSelect x) { From 0d1a7ebf89380ae16e67c75aac113e38d5df976d Mon Sep 17 00:00:00 2001 From: zhoujh Date: Tue, 30 Sep 2014 10:02:48 +0800 Subject: [PATCH 13/26] =?UTF-8?q?JdbcUtils=E5=A2=9E=E5=8A=A0=E5=AF=B9cobar?= =?UTF-8?q?=20driver=20url=E7=9A=84=E6=94=AF=E6=8C=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/alibaba/druid/util/JdbcUtilsTest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/util/JdbcUtilsTest.java diff --git a/src/test/java/com/alibaba/druid/util/JdbcUtilsTest.java b/src/test/java/com/alibaba/druid/util/JdbcUtilsTest.java new file mode 100644 index 0000000000..518f09ed9d --- /dev/null +++ b/src/test/java/com/alibaba/druid/util/JdbcUtilsTest.java @@ -0,0 +1,36 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.util; + +import junit.framework.TestCase; + +/** + * test for support cobar driver + * + * @author zhoujh + */ +public class JdbcUtilsTest extends TestCase { + + /** + * Test method for {@link com.alibaba.druid.util.JdbcUtils#getDbType(java.lang.String, java.lang.String)}. + */ + public void testGetDbType() { + String jdbcUrl = "jdbc:cobar://localhost:8066/test"; + String dbType = JdbcUtils.getDbType(jdbcUrl, null); + assertEquals("not support cobar driver, url like jdbc:cobar:...", JdbcConstants.MYSQL, dbType); + } + +} From fcc6fcaa9b4ae8836d305754d2580222dfb8e245 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 1 Oct 2014 04:46:42 +0800 Subject: [PATCH 14/26] bug fixed for SchemaStat --- .../druid/sql/parser/SQLSelectParser.java | 1 + .../druid/sql/visitor/SchemaStatVisitor.java | 27 +++++++++++++++++++ .../bvt/sql/postgresql/PGSelectTest5.java | 13 +++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java index ecb0894012..475900cf40 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java @@ -202,6 +202,7 @@ public class SQLSelectParser extends SQLParser { for (;;) { SQLWithSubqueryClause.Entry entry = new SQLWithSubqueryClause.Entry(); + entry.setParent(withQueryClause); entry.setName((SQLIdentifierExpr) this.exprParser.name()); if (lexer.token() == Token.LPAREN) { diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index 6f24538a2c..99d6b4f943 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -83,6 +83,7 @@ import com.alibaba.druid.sql.ast.statement.SQLTableElement; import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.ast.statement.SQLUseStatement; +import com.alibaba.druid.sql.ast.statement.SQLWithSubqueryClause; import com.alibaba.druid.stat.TableStat; import com.alibaba.druid.stat.TableStat.Column; import com.alibaba.druid.stat.TableStat.Condition; @@ -872,6 +873,32 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { public void endVisit(SQLSelectStatement x) { } + + @Override + public boolean visit(SQLWithSubqueryClause.Entry x) { + String alias = x.getName().toString(); + Map aliasMap = getAliasMap(); + SQLWithSubqueryClause with = (SQLWithSubqueryClause) x.getParent(); + + if (Boolean.TRUE == with.getRecursive()) { + + if (aliasMap != null && alias != null) { + aliasMap.put(alias, null); + subQueryMap.put(alias, x.getSubQuery().getQuery()); + } + + x.getSubQuery().accept(this); + } else { + x.getSubQuery().accept(this); + + if (aliasMap != null && alias != null) { + aliasMap.put(alias, null); + subQueryMap.put(alias, x.getSubQuery().getQuery()); + } + } + + return false; + } public boolean visit(SQLSubqueryTableSource x) { x.getSelect().accept(this); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest5.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest5.java index f2824ae1b0..68faaefc5a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest5.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest5.java @@ -27,7 +27,16 @@ import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor; public class PGSelectTest5 extends PGTest { public void test_0() throws Exception { - String sql = " SELECT rs.* FROM ( WITH RECURSIVE r AS( SELECT * FROM t_e_shopcatalog WHERE parentcatalogid= (SELECT catalogid FROM t_e_shopcatalog where catalogname='学习分类' and parentcatalogid='0') UNION ALL SELECT t_e_shopcatalog.* FROM t_e_shopcatalog, r WHERE t_e_shopcatalog.parentcatalogid = r.catalogid )SELECT * FROM r )rs WHERE 1=1"; + String sql = " SELECT rs.* FROM ( " // + + "WITH RECURSIVE r AS( "// + + "SELECT * " // + + "FROM t_e_shopcatalog " // + + "WHERE parentcatalogid= (SELECT catalogid FROM t_e_shopcatalog where catalogname='学习分类' and parentcatalogid='0') " // + + "UNION ALL " // + + "SELECT t_e_shopcatalog.* " // + + "FROM t_e_shopcatalog, r " // + + "WHERE t_e_shopcatalog.parentcatalogid = r.catalogid )" + + "SELECT * FROM r )rs WHERE 1=1"; PGSQLStatementParser parser = new PGSQLStatementParser(sql); List statementList = parser.parseStatementList(); @@ -43,7 +52,7 @@ public class PGSelectTest5 extends PGTest { System.out.println("fields : " + visitor.getColumns()); System.out.println("coditions : " + visitor.getConditions()); - Assert.assertEquals(1, visitor.getColumns().size()); + Assert.assertEquals(4, visitor.getColumns().size()); Assert.assertEquals(1, visitor.getTables().size()); } From 5df5c894059adb36c78a15979427883f708e8c31 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 1 Oct 2014 04:49:06 +0800 Subject: [PATCH 15/26] change pom.xml --- pom.xml | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 882a300992..cf570b01b8 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ + wenshao @@ -245,20 +246,6 @@ - - - mc-release - Local Maven repository of releases - http://mc-repo.googlecode.com/svn/maven2/releases - - true - - - false - - - - default-profile From 62cf854ddf3bb95263c3400cd46c30e39a2aa118 Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 10:51:54 +0800 Subject: [PATCH 16/26] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=85=B3=E8=81=94Sprin?= =?UTF-8?q?g=E7=9B=91=E6=8E=A7=E7=9A=84=E6=B3=A8=E8=A7=A3Stat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/spring/stat/annotation/Stat.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/support/spring/stat/annotation/Stat.java diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/annotation/Stat.java b/src/main/java/com/alibaba/druid/support/spring/stat/annotation/Stat.java new file mode 100644 index 0000000000..eaa33be332 --- /dev/null +++ b/src/main/java/com/alibaba/druid/support/spring/stat/annotation/Stat.java @@ -0,0 +1,28 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.support.spring.stat.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Stat { +} \ No newline at end of file From 477b26c894b53547ab1c32bfc153959c9cf15d6b Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 10:58:47 +0800 Subject: [PATCH 17/26] =?UTF-8?q?=E5=88=9B=E5=BB=BABeanPostProcessor?= =?UTF-8?q?=E3=80=82=20=E5=9C=A8bean=E5=8A=A0=E8=BD=BD=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E8=A7=A6=E5=8F=91=E8=BF=99=E4=B8=AApostProce?= =?UTF-8?q?ssor,=20=E8=BF=99=E6=97=B6=E9=9C=80=E8=A6=81=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E2=80=9Cdruid-stat-interceptor=E2=80=9D?= =?UTF-8?q?=E7=9A=84druidStatInterceptor=EF=BC=88=E5=9C=A8DruidStatBeanDef?= =?UTF-8?q?initionParser=E4=B8=AD=E5=88=9B=E5=BB=BA=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=EF=BC=89=E3=80=82=20=E6=9C=ACBeanPostProcessor=E4=B8=BB?= =?UTF-8?q?=E8=A6=81=E6=98=AF=E5=88=9B=E5=BB=BAStatSnnotationAdvisor.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatAnnotationBeanPostProcessor.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/support/spring/stat/annotation/StatAnnotationBeanPostProcessor.java diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/annotation/StatAnnotationBeanPostProcessor.java b/src/main/java/com/alibaba/druid/support/spring/stat/annotation/StatAnnotationBeanPostProcessor.java new file mode 100644 index 0000000000..167cf30268 --- /dev/null +++ b/src/main/java/com/alibaba/druid/support/spring/stat/annotation/StatAnnotationBeanPostProcessor.java @@ -0,0 +1,40 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.support.spring.stat.annotation; + +import javax.annotation.Resource; + +import org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; + +import com.alibaba.druid.support.spring.stat.DruidStatInterceptor; + +@SuppressWarnings("serial") +public class StatAnnotationBeanPostProcessor extends AbstractAdvisingBeanPostProcessor implements BeanFactoryAware { + + @Resource(name="druid-stat-interceptor") + private DruidStatInterceptor druidStatInterceptor; + + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + setBeforeExistingAdvisors(true); + StatAnnotationAdvisor advisor = new StatAnnotationAdvisor(druidStatInterceptor); + advisor.setBeanFactory(beanFactory); + this.advisor = advisor; + } + +} From e2a3a49d7940c23ef16719d4526d158572086e12 Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 11:01:38 +0800 Subject: [PATCH 18/26] =?UTF-8?q?StatAnnotationAdvisor=E6=98=AF=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E4=BB=A5druidStatInterceptor=E4=B8=BAadvice=E5=92=8C?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E4=BB=A5Stat=E7=9A=84=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E4=B8=BApointcut=E7=9A=84advisor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annotation/StatAnnotationAdvisor.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/support/spring/stat/annotation/StatAnnotationAdvisor.java diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/annotation/StatAnnotationAdvisor.java b/src/main/java/com/alibaba/druid/support/spring/stat/annotation/StatAnnotationAdvisor.java new file mode 100644 index 0000000000..1ff7710e5d --- /dev/null +++ b/src/main/java/com/alibaba/druid/support/spring/stat/annotation/StatAnnotationAdvisor.java @@ -0,0 +1,69 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.support.spring.stat.annotation; + +import org.aopalliance.aop.Advice; +import org.springframework.aop.Pointcut; +import org.springframework.aop.support.AbstractPointcutAdvisor; +import org.springframework.aop.support.ComposablePointcut; +import org.springframework.aop.support.annotation.AnnotationMatchingPointcut; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; + +import com.alibaba.druid.support.spring.stat.DruidStatInterceptor; + +@SuppressWarnings("serial") +public class StatAnnotationAdvisor extends AbstractPointcutAdvisor implements BeanFactoryAware { + + private Advice advice; + private Pointcut pointcut; + private DruidStatInterceptor druidStatInterceptor; + + public StatAnnotationAdvisor(DruidStatInterceptor druidStatInterceptor) { + this.druidStatInterceptor = druidStatInterceptor; + this.advice = buildAdvice(); + this.pointcut = buildPointcut(); + } + + public Pointcut getPointcut() { + return this.pointcut; + } + + public Advice getAdvice() { + return this.advice; + } + + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + if (this.advice instanceof BeanFactoryAware) { + ((BeanFactoryAware) this.advice).setBeanFactory(beanFactory); + } + } + + protected Advice buildAdvice() { + return druidStatInterceptor; + } + + protected Pointcut buildPointcut() { + Pointcut cpc = new AnnotationMatchingPointcut(Stat.class, true); + Pointcut mpc = AnnotationMatchingPointcut.forMethodAnnotation(Stat.class); + + ComposablePointcut result = new ComposablePointcut(cpc).union(mpc); + + return result; + } + +} From df9da3ad99dfda3f2d8ef584a711768b1d9d868f Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 11:03:42 +0800 Subject: [PATCH 19/26] =?UTF-8?q?=E8=A7=A3=E6=9E=90=E7=9A=84namespaceHandler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/DruidStatNamespaceHandler.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatNamespaceHandler.java diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatNamespaceHandler.java b/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatNamespaceHandler.java new file mode 100644 index 0000000000..6d70023598 --- /dev/null +++ b/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatNamespaceHandler.java @@ -0,0 +1,27 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.support.spring.stat.config; + +import org.springframework.beans.factory.xml.NamespaceHandlerSupport; + +public class DruidStatNamespaceHandler extends NamespaceHandlerSupport { + + @Override + public void init() { + registerBeanDefinitionParser("annotation-driven", new DruidStatBeanDefinitionParser()); + } + +} \ No newline at end of file From b2824635e06e8105f41040025ab89c4667dfe290 Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 11:15:08 +0800 Subject: [PATCH 20/26] =?UTF-8?q?=E5=BD=93=E4=BD=BF=E7=94=A8=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=20=E5=85=88?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E4=B8=80=E4=B8=AAStatAnnotationBeanPostProce?= =?UTF-8?q?ss=EF=BC=8C=20=E5=86=8D=E6=B3=A8=E5=86=8C=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=90=8D=E5=AD=97=E4=B8=BA=E2=80=9Cdruid-stat-interceptor?= =?UTF-8?q?=E2=80=9D=E7=9A=84DruidStatInterceptor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/DruidStatBeanDefinitionParser.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatBeanDefinitionParser.java diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatBeanDefinitionParser.java b/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatBeanDefinitionParser.java new file mode 100644 index 0000000000..56599b0b37 --- /dev/null +++ b/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatBeanDefinitionParser.java @@ -0,0 +1,75 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.support.spring.stat.config; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanDefinitionHolder; +import org.springframework.beans.factory.parsing.BeanComponentDefinition; +import org.springframework.beans.factory.parsing.CompositeComponentDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.xml.BeanDefinitionParser; +import org.springframework.beans.factory.xml.ParserContext; +import org.w3c.dom.Element; + +public class DruidStatBeanDefinitionParser implements BeanDefinitionParser { + + public static final String STAT_ANNOTATION_PROCESSOR_BEAN_NAME = "com.alibaba.druid.support.spring.stat.annotation.internalStatAnnotationBeanPostProcessor"; + public static final String STAT_ANNOTATION_PROCESSOR_BEAN_CLASS = "com.alibaba.druid.support.spring.stat.annotation.StatAnnotationBeanPostProcessor"; + public static final String STAT_ANNOTATION_ADVICE_BEAN_NAME = "com.alibaba.druid.support.spring.stat.DruidStatInterceptor"; + public static final String STAT_ANNOTATION_ADVICE_BEAN_CLASS = "druid-stat-interceptor"; + + @Override + public BeanDefinition parse(Element element, ParserContext parserContext) { + Object source = parserContext.extractSource(element); + + CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), source); + parserContext.pushContainingComponent(compDefinition); + + BeanDefinitionRegistry registry = parserContext.getRegistry(); + + if (registry.containsBeanDefinition(STAT_ANNOTATION_PROCESSOR_BEAN_NAME)) { + parserContext.getReaderContext().error( + "Only one DruidStatBeanDefinitionParser may exist within the context.", source); + } else { + BeanDefinitionBuilder builder = BeanDefinitionBuilder + .genericBeanDefinition(STAT_ANNOTATION_PROCESSOR_BEAN_CLASS); + builder.getRawBeanDefinition().setSource(source); + registerComponent(parserContext, builder, STAT_ANNOTATION_PROCESSOR_BEAN_NAME); + } + + if (!registry.containsBeanDefinition(STAT_ANNOTATION_ADVICE_BEAN_NAME)) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder + .genericBeanDefinition(STAT_ANNOTATION_ADVICE_BEAN_CLASS); + builder.getRawBeanDefinition().setSource(source); + registerComponent(parserContext, builder, STAT_ANNOTATION_ADVICE_BEAN_NAME); + } + + parserContext.popAndRegisterContainingComponent(); + + return null; + } + + private static void registerComponent(ParserContext parserContext, BeanDefinitionBuilder builder, + String beanName) { + + builder.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); + parserContext.getRegistry().registerBeanDefinition(beanName, builder.getBeanDefinition()); + BeanDefinitionHolder holder = new BeanDefinitionHolder(builder.getBeanDefinition(), beanName); + parserContext.registerComponent(new BeanComponentDefinition(holder)); + } + +} \ No newline at end of file From c6bc3e8b658630c40004c75f8f6f1cef6105627e Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 11:15:55 +0800 Subject: [PATCH 21/26] =?UTF-8?q?=E4=B8=BA=E4=BA=86=E6=B5=8B=E8=AF=95@Stat?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?@Stat=E6=B3=A8=E8=A7=A3=E5=9C=A8save=E6=96=B9=E6=B3=95=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/com/alibaba/druid/stat/spring/UserService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/com/alibaba/druid/stat/spring/UserService.java b/src/test/java/com/alibaba/druid/stat/spring/UserService.java index f1a21f1486..aa9ab48f11 100644 --- a/src/test/java/com/alibaba/druid/stat/spring/UserService.java +++ b/src/test/java/com/alibaba/druid/stat/spring/UserService.java @@ -1,6 +1,9 @@ package com.alibaba.druid.stat.spring; +import com.alibaba.druid.support.spring.stat.annotation.Stat; + public interface UserService { + @Stat public void save(); } From 0d67c6a74e825ce487b8972deca1c18ef388021c Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 11:16:18 +0800 Subject: [PATCH 22/26] =?UTF-8?q?@stat=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../druid/stat/StatAnnotationTest.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/stat/StatAnnotationTest.java diff --git a/src/test/java/com/alibaba/druid/stat/StatAnnotationTest.java b/src/test/java/com/alibaba/druid/stat/StatAnnotationTest.java new file mode 100644 index 0000000000..ef166d3482 --- /dev/null +++ b/src/test/java/com/alibaba/druid/stat/StatAnnotationTest.java @@ -0,0 +1,42 @@ +package com.alibaba.druid.stat; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import junit.framework.TestCase; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.alibaba.druid.stat.spring.UserService; +import com.alibaba.druid.support.spring.stat.SpringStatManager; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "classpath:/com/alibaba/druid/stat/spring-config-stat-annotation.xml" }) +public class StatAnnotationTest extends TestCase { + + @Resource + private UserService userService; + + @Test + public void test_0() throws InterruptedException{ + + userService.save(); + + List> result = SpringStatManager.getInstance().getMethodStatData(); + Assert.assertNotNull(result); + Assert.assertEquals(1, result.size()); + + Map statItem = result.get(0); + + Assert.assertEquals("com.alibaba.druid.stat.spring.UserService", statItem.get("Class")); + Assert.assertEquals("save()", statItem.get("Method")); + Assert.assertEquals(1L, statItem.get("ExecuteCount")); + } + +} From fe91de9933d3f878d49b53bbe75127b3f4731ced Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 11:17:12 +0800 Subject: [PATCH 23/26] =?UTF-8?q?=E6=B5=8B=E8=AF=95@Stat=E7=9A=84=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B=E7=9A=84=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stat/spring-config-stat-annotation.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/test/resources/com/alibaba/druid/stat/spring-config-stat-annotation.xml diff --git a/src/test/resources/com/alibaba/druid/stat/spring-config-stat-annotation.xml b/src/test/resources/com/alibaba/druid/stat/spring-config-stat-annotation.xml new file mode 100644 index 0000000000..0b093e8eb2 --- /dev/null +++ b/src/test/resources/com/alibaba/druid/stat/spring-config-stat-annotation.xml @@ -0,0 +1,18 @@ + + + + + + + + From 43da19dd4052f6e24865240523ce0780b989eb6d Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 11:17:54 +0800 Subject: [PATCH 24/26] =?UTF-8?q?=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/META-INF/spring.handlers | 1 + src/main/resources/META-INF/spring.schemas | 1 + src/main/resources/META-INF/stat.xsd | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 src/main/resources/META-INF/spring.handlers create mode 100644 src/main/resources/META-INF/spring.schemas create mode 100644 src/main/resources/META-INF/stat.xsd diff --git a/src/main/resources/META-INF/spring.handlers b/src/main/resources/META-INF/spring.handlers new file mode 100644 index 0000000000..b6f3845c9a --- /dev/null +++ b/src/main/resources/META-INF/spring.handlers @@ -0,0 +1 @@ +http\://www.alibaba.com/schema/stat=com.alibaba.druid.support.spring.stat.config.DruidStatNamespaceHandler \ No newline at end of file diff --git a/src/main/resources/META-INF/spring.schemas b/src/main/resources/META-INF/spring.schemas new file mode 100644 index 0000000000..ee4ab81d0a --- /dev/null +++ b/src/main/resources/META-INF/spring.schemas @@ -0,0 +1 @@ +http\://www.alibaba.com/schema/stat.xsd=META-INF/stat.xsd \ No newline at end of file diff --git a/src/main/resources/META-INF/stat.xsd b/src/main/resources/META-INF/stat.xsd new file mode 100644 index 0000000000..bd0892ba78 --- /dev/null +++ b/src/main/resources/META-INF/stat.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file From df21cdd65323d048a90addcb12a990690f61ee51 Mon Sep 17 00:00:00 2001 From: jialechan Date: Sat, 18 Oct 2014 11:32:31 +0800 Subject: [PATCH 25/26] =?UTF-8?q?beanName=E5=92=8CbeanClass=E5=90=8D?= =?UTF-8?q?=E5=AD=97=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/stat/config/DruidStatBeanDefinitionParser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatBeanDefinitionParser.java b/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatBeanDefinitionParser.java index 56599b0b37..e6f2f6d4d9 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatBeanDefinitionParser.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/config/DruidStatBeanDefinitionParser.java @@ -29,8 +29,8 @@ public class DruidStatBeanDefinitionParser implements BeanDefinitionParser { public static final String STAT_ANNOTATION_PROCESSOR_BEAN_NAME = "com.alibaba.druid.support.spring.stat.annotation.internalStatAnnotationBeanPostProcessor"; public static final String STAT_ANNOTATION_PROCESSOR_BEAN_CLASS = "com.alibaba.druid.support.spring.stat.annotation.StatAnnotationBeanPostProcessor"; - public static final String STAT_ANNOTATION_ADVICE_BEAN_NAME = "com.alibaba.druid.support.spring.stat.DruidStatInterceptor"; - public static final String STAT_ANNOTATION_ADVICE_BEAN_CLASS = "druid-stat-interceptor"; + public static final String STAT_ANNOTATION_ADVICE_BEAN_NAME = "druid-stat-interceptor"; + public static final String STAT_ANNOTATION_ADVICE_BEAN_CLASS = "com.alibaba.druid.support.spring.stat.DruidStatInterceptor"; @Override public BeanDefinition parse(Element element, ParserContext parserContext) { From 520da83034cd0bcf0659e287081f04544bf261a8 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 26 Oct 2014 18:22:07 +0800 Subject: [PATCH 26/26] support sql ast object toString --- .../druid/sql/ast/SQLStatementImpl.java | 16 ++- .../ast/statement/SQLAlterTableStatement.java | 8 ++ .../sql/ast/statement/SQLCallStatement.java | 8 ++ .../statement/SQLCreateDatabaseStatement.java | 4 + .../statement/SQLCreateIndexStatement.java | 4 + .../statement/SQLCreateTableStatement.java | 4 + .../statement/SQLCreateTriggerStatement.java | 8 ++ .../ast/statement/SQLCreateViewStatement.java | 4 + .../sql/ast/statement/SQLDeleteStatement.java | 4 + .../statement/SQLDropDatabaseStatement.java | 8 ++ .../statement/SQLDropFunctionStatement.java | 8 ++ .../ast/statement/SQLDropIndexStatement.java | 8 ++ .../statement/SQLDropProcedureStatement.java | 8 ++ .../statement/SQLDropSequenceStatement.java | 8 ++ .../statement/SQLDropTableSpaceStatement.java | 8 ++ .../ast/statement/SQLDropTableStatement.java | 19 ++- .../statement/SQLDropTriggerStatement.java | 8 ++ .../ast/statement/SQLDropUserStatement.java | 8 ++ .../ast/statement/SQLDropViewStatement.java | 4 + .../ast/statement/SQLExplainStatement.java | 8 ++ .../sql/ast/statement/SQLGrantStatement.java | 8 ++ .../SQLReleaseSavePointStatement.java | 8 ++ .../ast/statement/SQLRollbackStatement.java | 8 ++ .../ast/statement/SQLSavePointStatement.java | 8 ++ .../sql/ast/statement/SQLSelectStatement.java | 9 ++ .../sql/ast/statement/SQLSetStatement.java | 11 +- .../ast/statement/SQLTruncateStatement.java | 8 ++ .../sql/ast/statement/SQLUpdateStatement.java | 4 + .../sql/ast/statement/SQLUseStatement.java | 8 ++ .../sql/dialect/db2/ast/DB2StatementImpl.java | 6 + .../statement/MySqlAlterTableStatement.java | 5 + .../statement/MySqlCreateIndexStatement.java | 5 + .../statement/MySqlCreateTableStatement.java | 3 +- .../ast/statement/MySqlDeleteStatement.java | 5 + .../ast/statement/MySqlRollbackStatement.java | 3 +- .../ast/statement/MySqlStatementImpl.java | 5 + .../ast/statement/MySqlUpdateStatement.java | 5 + .../mysql/parser/MySqlStatementParser.java | 7 +- .../odps/ast/OdpsCreateTableStatement.java | 5 + .../dialect/odps/ast/OdpsInsertStatement.java | 5 + .../odps/ast/OdpsShowPartitionsStmt.java | 5 + .../odps/ast/OdpsShowStatisticStmt.java | 5 + .../ast/stmt/OracleAlterTableStatement.java | 5 + .../ast/stmt/OracleCreateIndexStatement.java | 5 + .../ast/stmt/OracleCreateTableStatement.java | 5 + .../ast/stmt/OracleDeleteStatement.java | 3 +- .../ast/stmt/OracleExplainStatement.java | 5 + .../oracle/ast/stmt/OracleStatementImpl.java | 5 + .../ast/stmt/OracleUpdateStatement.java | 3 +- .../oracle/parser/OracleStatementParser.java | 8 +- .../ast/stmt/PGDeleteStatement.java | 5 + .../ast/stmt/PGSelectStatement.java | 4 +- .../ast/stmt/PGUpdateStatement.java | 5 + .../ast/stmt/SQLServerUpdateStatement.java | 5 + .../parser/SQLServerStatementParser.java | 2 +- .../sql/parser/SQLCreateTableParser.java | 2 +- .../druid/sql/parser/SQLExprParser.java | 8 ++ .../alibaba/druid/sql/parser/SQLParser.java | 31 +++-- .../druid/sql/parser/SQLStatementParser.java | 108 +++++++++--------- .../com/alibaba/druid/bvt/bug/Issue_685.java | 15 +++ 60 files changed, 436 insertions(+), 79 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/bug/Issue_685.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/SQLStatementImpl.java b/src/main/java/com/alibaba/druid/sql/ast/SQLStatementImpl.java index 3d6467ad04..216f93803a 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/SQLStatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/ast/SQLStatementImpl.java @@ -20,12 +20,26 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public abstract class SQLStatementImpl extends SQLObjectImpl implements SQLStatement { + private String dbType; + public SQLStatementImpl(){ } + + public SQLStatementImpl(String dbType){ + this.dbType = dbType; + } + + public String getDbType() { + return dbType; + } + + public void setDbType(String dbType) { + this.dbType = dbType; + } public String toString() { - return SQLUtils.toSQLString(this); + return SQLUtils.toSQLString(this, dbType); } @Override diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java index dc87c8a4b1..b7ebb6381a 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java @@ -26,6 +26,14 @@ public class SQLAlterTableStatement extends SQLStatementImpl implements SQLDDLSt private SQLExprTableSource tableSource; private List items = new ArrayList(); + + public SQLAlterTableStatement() { + + } + + public SQLAlterTableStatement(String dbType) { + super (dbType); + } public List getItems() { return items; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCallStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCallStatement.java index f465f281b6..19b85bf313 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCallStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCallStatement.java @@ -33,6 +33,14 @@ public class SQLCallStatement extends SQLStatementImpl { private SQLName procedureName; private final List parameters = new ArrayList(); + + public SQLCallStatement() { + + } + + public SQLCallStatement(String dbType) { + super (dbType); + } public SQLVariantRefExpr getOutParameter() { return outParameter; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateDatabaseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateDatabaseStatement.java index f0e4440559..7b13551577 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateDatabaseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateDatabaseStatement.java @@ -33,6 +33,10 @@ public class SQLCreateDatabaseStatement extends SQLStatementImpl { public SQLCreateDatabaseStatement(){ } + + public SQLCreateDatabaseStatement(String dbType){ + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java index 528d8a900b..8c332ac0af 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java @@ -35,6 +35,10 @@ public class SQLCreateIndexStatement extends SQLStatementImpl implements SQLDDLS public SQLCreateIndexStatement(){ } + + public SQLCreateIndexStatement(String dbType){ + super (dbType); + } public SQLTableSource getTable() { return table; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java index 4b18ae6560..87640b7a86 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java @@ -33,6 +33,10 @@ public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLS public SQLCreateTableStatement(){ } + + public SQLCreateTableStatement(String dbType){ + super (dbType); + } public SQLName getName() { if (tableSource == null) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java index 9a0b05a538..262cdb89b7 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java @@ -37,6 +37,14 @@ public class SQLCreateTriggerStatement extends SQLStatementImpl { private boolean forEachRow = false; private SQLStatement body; + + public SQLCreateTriggerStatement() { + + } + + public SQLCreateTriggerStatement(String dbType) { + super (dbType); + } protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateViewStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateViewStatement.java index e690faa82b..4f4a345754 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateViewStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateViewStatement.java @@ -36,6 +36,10 @@ public class SQLCreateViewStatement extends SQLStatementImpl implements SQLDDLSt public SQLCreateViewStatement(){ } + + public SQLCreateViewStatement(String dbType){ + super (dbType); + } public boolean isOrReplace() { return orReplace; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDeleteStatement.java index 83c8b59e85..9e5c915e6e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDeleteStatement.java @@ -29,6 +29,10 @@ public class SQLDeleteStatement extends SQLStatementImpl { public SQLDeleteStatement(){ } + + public SQLDeleteStatement(String dbType){ + super (dbType); + } public SQLTableSource getTableSource() { return tableSource; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropDatabaseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropDatabaseStatement.java index 3f22f1cd7d..b431c3c207 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropDatabaseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropDatabaseStatement.java @@ -23,6 +23,14 @@ public class SQLDropDatabaseStatement extends SQLStatementImpl implements SQLDDL private SQLExpr database; private boolean ifExists; + + public SQLDropDatabaseStatement() { + + } + + public SQLDropDatabaseStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropFunctionStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropFunctionStatement.java index 3c5bf3fe1e..3545a69563 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropFunctionStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropFunctionStatement.java @@ -23,6 +23,14 @@ public class SQLDropFunctionStatement extends SQLStatementImpl implements SQLDDL private SQLName name; private boolean ifExists; + + public SQLDropFunctionStatement() { + + } + + public SQLDropFunctionStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java index 870fa3d3d1..da39c6bda5 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java @@ -23,6 +23,14 @@ public class SQLDropIndexStatement extends SQLStatementImpl implements SQLDDLSta private SQLExpr indexName; private SQLExprTableSource tableName; + + public SQLDropIndexStatement() { + + } + + public SQLDropIndexStatement(String dbType) { + super (dbType); + } public SQLExpr getIndexName() { return indexName; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropProcedureStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropProcedureStatement.java index b583dcd9f9..531ab41ffc 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropProcedureStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropProcedureStatement.java @@ -23,6 +23,14 @@ public class SQLDropProcedureStatement extends SQLStatementImpl implements SQLDD private SQLName name; private boolean ifExists; + + public SQLDropProcedureStatement() { + + } + + public SQLDropProcedureStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java index ce15eb7ece..0fcd4034be 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLDropSequenceStatement extends SQLStatementImpl implements SQLDDLStatement { private SQLName name; + + public SQLDropSequenceStatement() { + + } + + public SQLDropSequenceStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java index cd9cbf3a70..bbb3cce4ac 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java @@ -23,6 +23,14 @@ public class SQLDropTableSpaceStatement extends SQLStatementImpl implements SQLD private SQLName name; private boolean ifExists; + + public SQLDropTableSpaceStatement() { + + } + + public SQLDropTableSpaceStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java index 62f83a6f70..845e8d527e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java @@ -36,12 +36,25 @@ public class SQLDropTableStatement extends SQLStatementImpl implements SQLDDLSta public SQLDropTableStatement(){ } - - public SQLDropTableStatement(SQLName name){ - this(new SQLExprTableSource(name)); + + public SQLDropTableStatement(String dbType){ + super (dbType); } + public SQLDropTableStatement(SQLName name, String dbType){ + this(new SQLExprTableSource(name), dbType); + } + + public SQLDropTableStatement(SQLName name){ + this (name, null); + } + public SQLDropTableStatement(SQLExprTableSource tableSource){ + this (tableSource, null); + } + + public SQLDropTableStatement(SQLExprTableSource tableSource, String dbType){ + this (dbType); this.tableSources.add(tableSource); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java index f9bbf36aa4..a24f6afbad 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLDropTriggerStatement extends SQLStatementImpl implements SQLDDLStatement { private SQLName name; + + public SQLDropTriggerStatement() { + + } + + public SQLDropTriggerStatement(String dbType) { + super (dbType); + } public SQLName getName() { return name; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java index da76f1fbde..6e542551ea 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java @@ -25,6 +25,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLDropUserStatement extends SQLStatementImpl implements SQLDDLStatement { private List users = new ArrayList(2); + + public SQLDropUserStatement() { + + } + + public SQLDropUserStatement(String dbType) { + super (dbType); + } public List getUsers() { return users; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java index a2f9d7d545..4cd3bd23c4 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java @@ -33,6 +33,10 @@ public class SQLDropViewStatement extends SQLStatementImpl implements SQLDDLStat public SQLDropViewStatement(){ } + + public SQLDropViewStatement(String dbType){ + super (dbType); + } public SQLDropViewStatement(SQLName name){ this(new SQLExprTableSource(name)); diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExplainStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExplainStatement.java index 02a0bdee9d..a0c4f189bc 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExplainStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExplainStatement.java @@ -27,6 +27,14 @@ public class SQLExplainStatement extends SQLStatementImpl { protected SQLStatement statement; private List hints; + + public SQLExplainStatement() { + + } + + public SQLExplainStatement(String dbType) { + super (dbType); + } public SQLStatement getStatement() { return statement; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLGrantStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLGrantStatement.java index 9ce3574936..92a3082dfc 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLGrantStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLGrantStatement.java @@ -28,6 +28,14 @@ public class SQLGrantStatement extends SQLStatementImpl { private SQLExpr on; private SQLExpr to; + + public SQLGrantStatement() { + + } + + public SQLGrantStatement(String dbType) { + super (dbType); + } // mysql private ObjectType objectType; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLReleaseSavePointStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLReleaseSavePointStatement.java index cc32aec00f..85faa6b17e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLReleaseSavePointStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLReleaseSavePointStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLReleaseSavePointStatement extends SQLStatementImpl { private SQLExpr name; + + public SQLReleaseSavePointStatement() { + + } + + public SQLReleaseSavePointStatement(String dbType) { + super (dbType); + } public SQLExpr getName() { return name; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java index a805ab345f..550c1f4b5b 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLRollbackStatement extends SQLStatementImpl { private SQLName to; + + public SQLRollbackStatement() { + + } + + public SQLRollbackStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java index c20412f354..cea0cbd29a 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLSavePointStatement extends SQLStatementImpl { private SQLExpr name; + + public SQLSavePointStatement() { + + } + + public SQLSavePointStatement(String dbType) { + super (dbType); + } public SQLExpr getName() { return name; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectStatement.java index 720f54cba5..be7fafdf18 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectStatement.java @@ -26,10 +26,19 @@ public class SQLSelectStatement extends SQLStatementImpl { } + public SQLSelectStatement(String dbType){ + super (dbType); + } + public SQLSelectStatement(SQLSelect select){ this.setSelect(select); } + public SQLSelectStatement(SQLSelect select, String dbType){ + this(dbType); + this.setSelect(select); + } + public SQLSelect getSelect() { return this.select; } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSetStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSetStatement.java index ab6adab03b..2f2c021656 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSetStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSetStatement.java @@ -31,8 +31,17 @@ public class SQLSetStatement extends SQLStatementImpl { public SQLSetStatement(){ } - + + public SQLSetStatement(String dbType){ + super (dbType); + } + public SQLSetStatement(SQLExpr target, SQLExpr value){ + this(target, value, null); + } + + public SQLSetStatement(SQLExpr target, SQLExpr value, String dbType){ + super (dbType); this.items.add(new SQLAssignItem(target, value)); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java index 294da66db6..9f49362962 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java @@ -31,6 +31,14 @@ public class SQLTruncateStatement extends SQLStatementImpl { private boolean only; private Boolean restartIdentity; private Boolean cascade; + + public SQLTruncateStatement() { + + } + + public SQLTruncateStatement(String dbType) { + super (dbType); + } public List getTableSources() { return tableSources; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java index 472de95dbe..8abdcfc828 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java @@ -33,6 +33,10 @@ public class SQLUpdateStatement extends SQLStatementImpl { public SQLUpdateStatement(){ } + + public SQLUpdateStatement(String dbType){ + super (dbType); + } public SQLTableSource getTableSource() { return tableSource; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java index fa9527a69e..a80206c839 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java @@ -23,6 +23,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLUseStatement extends SQLStatementImpl implements SQLStatement { private SQLName database; + + public SQLUseStatement() { + + } + + public SQLUseStatement(String dbType) { + super (dbType); + } public SQLName getDatabase() { return database; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/db2/ast/DB2StatementImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/db2/ast/DB2StatementImpl.java index 16bee1a003..03e0d2f28c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/db2/ast/DB2StatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/db2/ast/DB2StatementImpl.java @@ -18,8 +18,14 @@ package com.alibaba.druid.sql.dialect.db2.ast; import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.dialect.db2.visitor.DB2ASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public abstract class DB2StatementImpl extends SQLStatementImpl implements DB2Object { + + public DB2StatementImpl() { + super(JdbcConstants.DB2); + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor instanceof DB2ASTVisitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableStatement.java index 0a71410f8b..56070f250b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableStatement.java @@ -18,10 +18,15 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlAlterTableStatement extends SQLAlterTableStatement { private boolean ignore = false; + + public MySqlAlterTableStatement() { + super (JdbcConstants.MYSQL); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java index ba452386cf..ef4201165c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java @@ -18,10 +18,15 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlCreateIndexStatement extends SQLCreateIndexStatement implements MySqlStatement { private String using; + + public MySqlCreateIndexStatement() { + super (JdbcConstants.MYSQL); + } public String getUsing() { return using; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java index 869b5e605d..c83025bff2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java @@ -31,6 +31,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlCreateTableStatement extends SQLCreateTableStatement implements MySqlStatement { @@ -47,7 +48,7 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement private SQLExprTableSource like; public MySqlCreateTableStatement(){ - + super (JdbcConstants.MYSQL); } public SQLExprTableSource getLike() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java index 213617d517..2c55628516 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java @@ -22,6 +22,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.L import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlDeleteStatement extends SQLDeleteStatement { @@ -33,6 +34,10 @@ public class MySqlDeleteStatement extends SQLDeleteStatement { private SQLTableSource using; private SQLOrderBy orderBy; private Limit limit; + + public MySqlDeleteStatement() { + super (JdbcConstants.MYSQL); + } public boolean isLowPriority() { return lowPriority; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java index 42f8ce470e..ff0d335ba8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java @@ -19,6 +19,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlRollbackStatement extends SQLRollbackStatement implements MySqlStatement { @@ -28,7 +29,7 @@ public class MySqlRollbackStatement extends SQLRollbackStatement implements MySq private SQLExpr force; public MySqlRollbackStatement(){ - + super (JdbcConstants.MYSQL); } public Boolean getChain() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java index fbf7c6a108..4fe901327b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java @@ -18,9 +18,14 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public abstract class MySqlStatementImpl extends SQLStatementImpl implements MySqlStatement { + public MySqlStatementImpl() { + super(JdbcConstants.MYSQL); + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor instanceof MySqlASTVisitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java index fdaec4cde4..da4f24ca99 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java @@ -20,6 +20,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlStatement { @@ -28,6 +29,10 @@ public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlSta private boolean lowPriority = false; private boolean ignore = false; + + public MySqlUpdateStatement() { + super (JdbcConstants.MYSQL); + } public Limit getLimit() { return limit; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 8642fff5b6..be42fdfe96 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -147,6 +147,7 @@ import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLSelectParser; import com.alibaba.druid.sql.parser.SQLStatementParser; import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; public class MySqlStatementParser extends SQLStatementParser { @@ -191,7 +192,7 @@ public class MySqlStatementParser extends SQLStatementParser { public SQLSelectStatement parseSelect() { MySqlSelectParser selectParser = new MySqlSelectParser(this.exprParser); - return new SQLSelectStatement(selectParser.select()); + return new SQLSelectStatement(selectParser.select(), JdbcConstants.MYSQL); } public SQLUpdateStatement parseUpdateStatement() { @@ -2131,7 +2132,7 @@ public class MySqlStatementParser extends SQLStatementParser { } return stmt; } else { - SQLSetStatement stmt = new SQLSetStatement(); + SQLSetStatement stmt = new SQLSetStatement(getDbType()); parseAssignItems(stmt.getItems(), stmt); @@ -2536,7 +2537,7 @@ public class MySqlStatementParser extends SQLStatementParser { accept(Token.DATABASE); - SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(); + SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(JdbcConstants.MYSQL); stmt.setName(this.exprParser.name()); if (lexer.token() == Token.DEFAULT) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java index 48b868916b..38a522a415 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java @@ -25,6 +25,7 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OdpsCreateTableStatement extends SQLCreateTableStatement { @@ -35,6 +36,10 @@ public class OdpsCreateTableStatement extends SQLCreateTableStatement { protected List partitionColumns = new ArrayList(2); protected SQLExpr lifecycle; + + public OdpsCreateTableStatement() { + super (JdbcConstants.ODPS); + } public SQLExprTableSource getLike() { return like; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsInsertStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsInsertStatement.java index 02bb371362..8a987fa38a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsInsertStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsInsertStatement.java @@ -23,12 +23,17 @@ import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OdpsInsertStatement extends SQLStatementImpl implements SQLStatement { private SQLSubqueryTableSource from; private List items = new ArrayList(); + + public OdpsInsertStatement() { + super (JdbcConstants.ODPS); + } public void setFrom(SQLSubqueryTableSource from) { this.from = from; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java index d468e24b2d..bdf8fb7cbd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java @@ -5,10 +5,15 @@ import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OdpsShowPartitionsStmt extends SQLStatementImpl implements SQLStatement { private SQLExprTableSource tableSource; + + public OdpsShowPartitionsStmt() { + super (JdbcConstants.ODPS); + } public SQLExprTableSource getTableSource() { return tableSource; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java index 04c93d3eff..7d17033dd2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java @@ -5,10 +5,15 @@ import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OdpsShowStatisticStmt extends SQLStatementImpl implements SQLStatement { private SQLExprTableSource tableSource; + + public OdpsShowStatisticStmt() { + super (JdbcConstants.ODPS); + } public SQLExprTableSource getTableSource() { return tableSource; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java index 1ca577d3f0..87ed9bbe93 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java @@ -18,11 +18,16 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleAlterTableStatement extends SQLAlterTableStatement implements OracleDDLStatement { private boolean updateGlobalIndexes = false; private boolean invalidateGlobalIndexes = false; + + public OracleAlterTableStatement() { + super (JdbcConstants.ORACLE); + } protected void accept0(SQLASTVisitor visitor) { accept0((OracleASTVisitor) visitor); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java index 62f0352f5b..4fa2df9a37 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java @@ -20,6 +20,7 @@ import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleCreateIndexStatement extends SQLCreateIndexStatement implements OracleDDLStatement { @@ -41,6 +42,10 @@ public class OracleCreateIndexStatement extends SQLCreateIndexStatement implemen private Boolean enable = null; private boolean computeStatistics = false; + + public OracleCreateIndexStatement() { + super (JdbcConstants.ORACLE); + } public SQLName getTablespace() { return tablespace; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java index 8d150fe24b..5f35c2d2ce 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java @@ -24,6 +24,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleLobStorageClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleCreateTableStatement extends SQLCreateTableStatement implements OracleDDLStatement { @@ -58,6 +59,10 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen private SQLPartitioningClause partitioning; private DeferredSegmentCreation deferredSegmentCreation; + + public OracleCreateTableStatement() { + super (JdbcConstants.ORACLE); + } public OracleLobStorageClause getLobStorage() { return lobStorage; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDeleteStatement.java index 22bd2af5e6..406fb9a0b7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDeleteStatement.java @@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleDeleteStatement extends SQLDeleteStatement { @@ -32,7 +33,7 @@ public class OracleDeleteStatement extends SQLDeleteStatement { private OracleReturningClause returning = null; public OracleDeleteStatement(){ - + super (JdbcConstants.ORACLE); } public OracleReturningClause getReturning() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExplainStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExplainStatement.java index 4555c8588f..acf87eebfe 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExplainStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExplainStatement.java @@ -21,11 +21,16 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.statement.SQLExplainStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleExplainStatement extends SQLExplainStatement implements OracleStatement { private SQLCharExpr statementId; private SQLExpr into; + + public OracleExplainStatement() { + super (JdbcConstants.ORACLE); + } @Override public void accept0(OracleASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleStatementImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleStatementImpl.java index 8cae231df3..f5f08974f2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleStatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleStatementImpl.java @@ -19,8 +19,13 @@ import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public abstract class OracleStatementImpl extends SQLStatementImpl implements OracleStatement { + + public OracleStatementImpl() { + super(JdbcConstants.ORACLE); + } protected void accept0(SQLASTVisitor visitor) { accept0((OracleASTVisitor) visitor); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java index a5ccfb539d..63715c946a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java @@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.SQLHint; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleUpdateStatement extends SQLUpdateStatement implements OracleStatement { @@ -35,7 +36,7 @@ public class OracleUpdateStatement extends SQLUpdateStatement implements OracleS private List returningInto = new ArrayList(); public OracleUpdateStatement(){ - + super (JdbcConstants.ORACLE); } public List getReturning() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index 4ea1acdfba..4647055eee 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -105,6 +105,7 @@ import com.alibaba.druid.sql.parser.Lexer; import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLStatementParser; import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; public class OracleStatementParser extends SQLStatementParser { @@ -163,7 +164,8 @@ public class OracleStatementParser extends SQLStatementParser { } if (lexer.token() == (Token.SELECT)) { - statementList.add(new SQLSelectStatement(new OracleSelectParser(this.exprParser).select())); + SQLSelectStatement stmt = new SQLSelectStatement(new OracleSelectParser(this.exprParser).select(), JdbcConstants.ORACLE); + statementList.add(stmt); continue; } @@ -238,7 +240,7 @@ public class OracleStatementParser extends SQLStatementParser { if (variant instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr binaryOpExpr = (SQLBinaryOpExpr) variant; if (binaryOpExpr.getOperator() == SQLBinaryOperator.Assignment) { - SQLSetStatement stmt = new SQLSetStatement(binaryOpExpr.getLeft(), binaryOpExpr.getRight()); + SQLSetStatement stmt = new SQLSetStatement(binaryOpExpr.getLeft(), binaryOpExpr.getRight(), getDbType()); statementList.add(stmt); continue; } @@ -246,7 +248,7 @@ public class OracleStatementParser extends SQLStatementParser { accept(Token.COLONEQ); SQLExpr value = this.exprParser.expr(); - SQLSetStatement stmt = new SQLSetStatement(variant, value); + SQLSetStatement stmt = new SQLSetStatement(variant, value, getDbType()); statementList.add(stmt); continue; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGDeleteStatement.java index d3137e43f7..34241bcc8e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGDeleteStatement.java @@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class PGDeleteStatement extends SQLDeleteStatement implements PGSQLStatement { @@ -31,6 +32,10 @@ public class PGDeleteStatement extends SQLDeleteStatement implements PGSQLStatem private List using = new ArrayList(2); private boolean returning; private String alias; + + public PGDeleteStatement() { + super (JdbcConstants.POSTGRESQL); + } public boolean isReturning() { return returning; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectStatement.java index d347842377..ff567ce1fe 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectStatement.java @@ -20,16 +20,18 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class PGSelectStatement extends SQLSelectStatement implements PGSQLStatement { private PGWithClause with; public PGSelectStatement(){ + super(JdbcConstants.POSTGRESQL); } public PGSelectStatement(SQLSelect select){ - super(select); + super(select, JdbcConstants.POSTGRESQL); } public PGWithClause getWith() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java index feb22081ac..602d347629 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java @@ -24,6 +24,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class PGUpdateStatement extends SQLUpdateStatement implements PGSQLStatement { @@ -34,6 +35,10 @@ public class PGUpdateStatement extends SQLUpdateStatement implements PGSQLStatem private List returning = new ArrayList(2); private SQLTableSource from; + + public PGUpdateStatement(){ + super (JdbcConstants.POSTGRESQL); + } public SQLTableSource getFrom() { return from; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerUpdateStatement.java index 4619536a87..70c48abdc3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerUpdateStatement.java @@ -22,12 +22,17 @@ import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class SQLServerUpdateStatement extends SQLUpdateStatement implements SQLServerStatement { private SQLServerTop top; private SQLTableSource from; private SQLServerOutput output; + + public SQLServerUpdateStatement(){ + super (JdbcConstants.SQL_SERVER); + } public SQLServerTop getTop() { return top; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java index a3abfa583c..ef04e23f02 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java @@ -355,7 +355,7 @@ public class SQLServerStatementParser extends SQLStatementParser { } if (lexer.token() == Token.VARIANT) { - SQLSetStatement stmt = new SQLSetStatement(); + SQLSetStatement stmt = new SQLSetStatement(getDbType()); parseAssignItems(stmt.getItems(), stmt); return stmt; } else { diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java index 9edd4d4176..48bce825c0 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java @@ -115,6 +115,6 @@ public class SQLCreateTableParser extends SQLDDLParser { } protected SQLCreateTableStatement newCreateStatement() { - return new SQLCreateTableStatement(); + return new SQLCreateTableStatement(getDbType()); } } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 0296518bf5..2240d5d92b 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -87,10 +87,18 @@ public class SQLExprParser extends SQLParser { public SQLExprParser(String sql){ super(sql); } + + public SQLExprParser(String sql, String dbType){ + super(sql, dbType); + } public SQLExprParser(Lexer lexer){ super(lexer); } + + public SQLExprParser(Lexer lexer, String dbType){ + super(lexer, dbType); + } public SQLExpr expr() { if (lexer.token() == Token.STAR) { diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java index 5882e9c6c2..92354ccf0b 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java @@ -19,19 +19,34 @@ public class SQLParser { protected final Lexer lexer; - public SQLParser(String sql){ - this(new Lexer(sql)); + protected String dbType; + + public SQLParser(String sql, String dbType){ + this(new Lexer(sql), dbType); this.lexer.nextToken(); } + public SQLParser(String sql){ + this(sql, null); + } + public SQLParser(Lexer lexer){ + this(lexer, null); + } + + public SQLParser(Lexer lexer, String dbType){ this.lexer = lexer; + this.dbType = dbType; } public final Lexer getLexer() { return lexer; } + public String getDbType() { + return dbType; + } + protected boolean identifierEquals(String text) { return lexer.token() == Token.IDENTIFIER && lexer.stringVal().equalsIgnoreCase(text); } @@ -143,7 +158,7 @@ public class SQLParser { alias += ('.' + lexer.token().name()); lexer.nextToken(); } - + return alias; } @@ -169,7 +184,7 @@ public class SQLParser { } else if (lexer.token() == Token.USER) { alias = lexer.stringVal(); lexer.nextToken(); - } + } switch (lexer.token()) { case KEY: @@ -184,7 +199,7 @@ public class SQLParser { return alias; } - protected void printError(Token token){ + protected void printError(Token token) { String arround; if (lexer.mark >= 0 && (lexer.text.length() > lexer.mark + 30)) { if (lexer.mark - 5 > 0) { @@ -202,7 +217,7 @@ public class SQLParser { } else { arround = lexer.text; } - + // throw new // ParserException("syntax error, error arround:'"+arround+"',expect " // + token + ", actual " + lexer.token() + " " @@ -210,7 +225,7 @@ public class SQLParser { throw new ParserException("syntax error, error in :'" + arround + "',expect " + token + ", actual " + lexer.token() + " " + lexer.stringVal()); } - + public void accept(Token token) { if (lexer.token() == token) { lexer.nextToken(); @@ -223,7 +238,7 @@ public class SQLParser { public void match(Token token) { if (lexer.token() != token) { throw new ParserException("syntax error, expect " + token + ", actual " + lexer.token() + " " - + lexer.stringVal()); + + lexer.stringVal()); } } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index ccf68e08d4..82ce1a9aa3 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -90,11 +90,15 @@ public class SQLStatementParser extends SQLParser { protected int parseValuesSize = 3; public SQLStatementParser(String sql){ - this(new SQLExprParser(sql)); + this(sql, null); + } + + public SQLStatementParser(String sql, String dbType){ + this(new SQLExprParser(sql, dbType)); } public SQLStatementParser(SQLExprParser exprParser){ - super(exprParser.getLexer()); + super(exprParser.getLexer(), exprParser.getDbType()); this.exprParser = exprParser; } @@ -315,7 +319,7 @@ public class SQLStatementParser extends SQLParser { lexer.nextToken(); } - SQLRollbackStatement stmt = new SQLRollbackStatement(); + SQLRollbackStatement stmt = new SQLRollbackStatement(getDbType()); if (lexer.token() == Token.TO) { lexer.nextToken(); @@ -339,14 +343,14 @@ public class SQLStatementParser extends SQLParser { public SQLUseStatement parseUse() { accept(Token.USE); - SQLUseStatement stmt = new SQLUseStatement(); + SQLUseStatement stmt = new SQLUseStatement(getDbType()); stmt.setDatabase(this.exprParser.name()); return stmt; } public SQLGrantStatement parseGrant() { accept(Token.GRANT); - SQLGrantStatement stmt = new SQLGrantStatement(); + SQLGrantStatement stmt = new SQLGrantStatement(getDbType()); for (;;) { String privilege = null; @@ -619,7 +623,7 @@ public class SQLStatementParser extends SQLParser { acceptIdentifier("OPTION"); stmt.setAdminOption(true); } - + if (lexer.token() == Token.IDENTIFIED) { lexer.nextToken(); accept(Token.BY); @@ -631,7 +635,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseSavePoint() { acceptIdentifier("SAVEPOINT"); - SQLSavePointStatement stmt = new SQLSavePointStatement(); + SQLSavePointStatement stmt = new SQLSavePointStatement(getDbType()); stmt.setName(this.exprParser.name()); return stmt; } @@ -639,7 +643,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseReleaseSavePoint() { acceptIdentifier("RELEASE"); acceptIdentifier("SAVEPOINT"); - SQLReleaseSavePointStatement stmt = new SQLReleaseSavePointStatement(); + SQLReleaseSavePointStatement stmt = new SQLReleaseSavePointStatement(getDbType()); stmt.setName(this.exprParser.name()); return stmt; } @@ -752,7 +756,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.DROP); } - SQLDropTableStatement stmt = new SQLDropTableStatement(); + SQLDropTableStatement stmt = new SQLDropTableStatement(getDbType()); if (identifierEquals("TEMPORARY")) { lexer.nextToken(); @@ -816,7 +820,7 @@ public class SQLStatementParser extends SQLParser { SQLName name = this.exprParser.name(); - SQLDropSequenceStatement stmt = new SQLDropSequenceStatement(); + SQLDropSequenceStatement stmt = new SQLDropSequenceStatement(getDbType()); stmt.setName(name); return stmt; } @@ -830,7 +834,7 @@ public class SQLStatementParser extends SQLParser { SQLName name = this.exprParser.name(); - SQLDropTriggerStatement stmt = new SQLDropTriggerStatement(); + SQLDropTriggerStatement stmt = new SQLDropTriggerStatement(getDbType()); stmt.setName(name); return stmt; } @@ -840,7 +844,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.DROP); } - SQLDropViewStatement stmt = new SQLDropViewStatement(); + SQLDropViewStatement stmt = new SQLDropViewStatement(getDbType()); accept(Token.VIEW); @@ -881,7 +885,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.DROP); } - SQLDropDatabaseStatement stmt = new SQLDropDatabaseStatement(); + SQLDropDatabaseStatement stmt = new SQLDropDatabaseStatement(getDbType()); accept(Token.DATABASE); @@ -896,67 +900,67 @@ public class SQLStatementParser extends SQLParser { return stmt; } - + protected SQLDropFunctionStatement parseDropFunction(boolean acceptDrop) { if (acceptDrop) { accept(Token.DROP); } - - SQLDropFunctionStatement stmt = new SQLDropFunctionStatement(); - + + SQLDropFunctionStatement stmt = new SQLDropFunctionStatement(getDbType()); + accept(Token.FUNCTION); - + if (lexer.token() == Token.IF) { lexer.nextToken(); accept(Token.EXISTS); stmt.setIfExists(true); } - + SQLName name = this.exprParser.name(); stmt.setName(name); - + return stmt; } - + protected SQLDropTableSpaceStatement parseDropTablespace(boolean acceptDrop) { if (acceptDrop) { accept(Token.DROP); } - - SQLDropTableSpaceStatement stmt = new SQLDropTableSpaceStatement(); - + + SQLDropTableSpaceStatement stmt = new SQLDropTableSpaceStatement(getDbType()); + accept(Token.TABLESPACE); - + if (lexer.token() == Token.IF) { lexer.nextToken(); accept(Token.EXISTS); stmt.setIfExists(true); } - + SQLName name = this.exprParser.name(); stmt.setName(name); - + return stmt; } - + protected SQLDropProcedureStatement parseDropProcedure(boolean acceptDrop) { if (acceptDrop) { accept(Token.DROP); } - - SQLDropProcedureStatement stmt = new SQLDropProcedureStatement(); - + + SQLDropProcedureStatement stmt = new SQLDropProcedureStatement(getDbType()); + accept(Token.PROCEDURE); - + if (lexer.token() == Token.IF) { lexer.nextToken(); accept(Token.EXISTS); stmt.setIfExists(true); } - + SQLName name = this.exprParser.name(); stmt.setName(name); - + return stmt; } @@ -965,7 +969,7 @@ public class SQLStatementParser extends SQLParser { if (lexer.token() == Token.TABLE) { lexer.nextToken(); } - SQLTruncateStatement stmt = new SQLTruncateStatement(); + SQLTruncateStatement stmt = new SQLTruncateStatement(getDbType()); if (lexer.token() == Token.ONLY) { lexer.nextToken(); @@ -1090,7 +1094,7 @@ public class SQLStatementParser extends SQLParser { public SQLDropUserStatement parseDropUser() { accept(Token.USER); - SQLDropUserStatement stmt = new SQLDropUserStatement(); + SQLDropUserStatement stmt = new SQLDropUserStatement(getDbType()); for (;;) { SQLExpr expr = this.exprParser.expr(); stmt.getUsers().add(expr); @@ -1106,7 +1110,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseDropIndex() { accept(Token.INDEX); - SQLDropIndexStatement stmt = new SQLDropIndexStatement(); + SQLDropIndexStatement stmt = new SQLDropIndexStatement(getDbType()); stmt.setIndexName(this.exprParser.name()); if (lexer.token() == Token.ON) { @@ -1123,9 +1127,9 @@ public class SQLStatementParser extends SQLParser { lexer.nextToken(); brace = true; } - - SQLCallStatement stmt = new SQLCallStatement(); - + + SQLCallStatement stmt = new SQLCallStatement(getDbType()); + if (lexer.token() == Token.QUES) { lexer.nextToken(); accept(Token.EQ); @@ -1134,7 +1138,6 @@ public class SQLStatementParser extends SQLParser { acceptIdentifier("CALL"); - stmt.setProcedureName(exprParser.name()); if (lexer.token() == Token.LPAREN) { @@ -1153,7 +1156,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseSet() { accept(Token.SET); - SQLSetStatement stmt = new SQLSetStatement(); + SQLSetStatement stmt = new SQLSetStatement(getDbType()); parseAssignItems(stmt.getItems(), stmt); @@ -1231,7 +1234,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseCreateTrigger() { accept(Token.TRIGGER); - SQLCreateTriggerStatement stmt = new SQLCreateTriggerStatement(); + SQLCreateTriggerStatement stmt = new SQLCreateTriggerStatement(getDbType()); stmt.setName(this.exprParser.name()); if (identifierEquals("BEFORE")) { @@ -1293,7 +1296,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.DATABASE); - SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(); + SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(getDbType()); stmt.setName(this.exprParser.name()); return stmt; } @@ -1311,7 +1314,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.CREATE); } - SQLCreateIndexStatement stmt = new SQLCreateIndexStatement(); + SQLCreateIndexStatement stmt = new SQLCreateIndexStatement(getDbType()); if (lexer.token() == Token.UNIQUE) { lexer.nextToken(); if (identifierEquals("CLUSTERED")) { @@ -1415,11 +1418,11 @@ public class SQLStatementParser extends SQLParser { } protected SQLUpdateStatement createUpdateStatement() { - return new SQLUpdateStatement(); + return new SQLUpdateStatement(getDbType()); } public SQLDeleteStatement parseDeleteStatement() { - SQLDeleteStatement deleteStatement = new SQLDeleteStatement(); + SQLDeleteStatement deleteStatement = new SQLDeleteStatement(getDbType()); if (lexer.token() == Token.DELETE) { lexer.nextToken(); @@ -1452,7 +1455,7 @@ public class SQLStatementParser extends SQLParser { } public SQLCreateViewStatement parseCreateView() { - SQLCreateViewStatement createView = new SQLCreateViewStatement(); + SQLCreateViewStatement createView = new SQLCreateViewStatement(getDbType()); if (lexer.token() == Token.CREATE) { lexer.nextToken(); @@ -1534,10 +1537,10 @@ public class SQLStatementParser extends SQLParser { if (lexer.token() == Token.FOR) { lexer.nextToken(); } - - SQLExplainStatement explain = new SQLExplainStatement(); - - if(lexer.token == Token.HINT) { + + SQLExplainStatement explain = new SQLExplainStatement(getDbType()); + + if (lexer.token == Token.HINT) { explain.setHints(this.exprParser.parseHints()); } @@ -1579,7 +1582,6 @@ public class SQLStatementParser extends SQLParser { return item; } - public boolean isParseCompleteValues() { return parseCompleteValues; } diff --git a/src/test/java/com/alibaba/druid/bvt/bug/Issue_685.java b/src/test/java/com/alibaba/druid/bvt/bug/Issue_685.java new file mode 100644 index 0000000000..d91eb9dcc0 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/bug/Issue_685.java @@ -0,0 +1,15 @@ +package com.alibaba.druid.bvt.bug; + +import junit.framework.TestCase; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; + +public class Issue_685 extends TestCase { + + public void test_for_issue() throws Exception { + OracleStatementParser parser = new OracleStatementParser("select upper(*) from aa order by now()"); + SQLStatement st = parser.parseStatement(); + st.toString(); + } +}