diff --git a/pom.xml b/pom.xml
index daa2279989..cf570b01b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
com.alibaba
druid
- 1.0.9
+ 1.0.10-SNAPSHOT
jar
druid
@@ -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
@@ -528,7 +515,7 @@
org.apache.tomcat
tomcat-jdbc
- 7.0.34
+ 8.0.12
test
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;
diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
index 4d68c303d2..ac9f9c4091 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);
@@ -284,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");
}
@@ -2702,4 +2707,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/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/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 599436202a..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
@@ -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;
@@ -32,6 +33,10 @@ public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLS
public SQLCreateTableStatement(){
}
+
+ public SQLCreateTableStatement(String dbType){
+ super (dbType);
+ }
public SQLName getName() {
if (tableSource == null) {
@@ -71,6 +76,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/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 9bbc8af9c9..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,11 +31,10 @@ 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 {
- private boolean ifNotExiists = false;
-
private Map tableOptions = new LinkedHashMap();
protected SQLSelect query;
@@ -49,7 +48,7 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement
private SQLExprTableSource like;
public MySqlCreateTableStatement(){
-
+ super (JdbcConstants.MYSQL);
}
public SQLExprTableSource getLike() {
@@ -99,14 +98,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/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/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/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java
index a0d0f3d961..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);
@@ -2375,6 +2376,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);
@@ -2531,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/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java
index d1c68b9ea0..58e246b2ff 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
@@ -479,6 +479,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 c13e3c357d..b9ae24a1db 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;
@@ -1157,7 +1158,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
@@ -1342,7 +1351,7 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS
@Override
public void endVisit(MySqlHintStatement x) {
-
+
}
@Override
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..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,23 +25,20 @@ 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 {
- 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 OdpsCreateTableStatement() {
+ super (JdbcConstants.ODPS);
}
public SQLExprTableSource getLike() {
@@ -67,7 +64,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 +83,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/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
new file mode 100644
index 0000000000..bdf8fb7cbd
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java
@@ -0,0 +1,37 @@
+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;
+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;
+ }
+
+ 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..7d17033dd2
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java
@@ -0,0 +1,37 @@
+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;
+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;
+ }
+
+ 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 a53f5c2138..2c8928ac25 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/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/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) {
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/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/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/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/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) {
+
+ }
}
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 ccd5ec66e3..c567c1a791 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
@@ -374,7 +374,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 8d447d0364..5f260cd32b 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 b5b0552556..0eee5499ff 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;
}
@@ -187,7 +202,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) {
@@ -205,7 +220,7 @@ public class SQLParser {
} else {
arround = lexer.text;
}
-
+
// throw new
// ParserException("syntax error, error arround:'"+arround+"',expect "
// + token + ", actual " + lexer.token() + " "
@@ -213,7 +228,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();
@@ -226,7 +241,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/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/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java
index 17ea3f836b..97099b488d 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;
}
@@ -318,7 +322,7 @@ public class SQLStatementParser extends SQLParser {
lexer.nextToken();
}
- SQLRollbackStatement stmt = new SQLRollbackStatement();
+ SQLRollbackStatement stmt = new SQLRollbackStatement(getDbType());
if (lexer.token() == Token.TO) {
lexer.nextToken();
@@ -342,14 +346,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;
@@ -622,7 +626,7 @@ public class SQLStatementParser extends SQLParser {
acceptIdentifier("OPTION");
stmt.setAdminOption(true);
}
-
+
if (lexer.token() == Token.IDENTIFIED) {
lexer.nextToken();
accept(Token.BY);
@@ -634,7 +638,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;
}
@@ -642,7 +646,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;
}
@@ -755,7 +759,7 @@ public class SQLStatementParser extends SQLParser {
accept(Token.DROP);
}
- SQLDropTableStatement stmt = new SQLDropTableStatement();
+ SQLDropTableStatement stmt = new SQLDropTableStatement(getDbType());
if (identifierEquals("TEMPORARY")) {
lexer.nextToken();
@@ -819,7 +823,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;
}
@@ -833,7 +837,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;
}
@@ -843,7 +847,7 @@ public class SQLStatementParser extends SQLParser {
accept(Token.DROP);
}
- SQLDropViewStatement stmt = new SQLDropViewStatement();
+ SQLDropViewStatement stmt = new SQLDropViewStatement(getDbType());
accept(Token.VIEW);
@@ -884,7 +888,7 @@ public class SQLStatementParser extends SQLParser {
accept(Token.DROP);
}
- SQLDropDatabaseStatement stmt = new SQLDropDatabaseStatement();
+ SQLDropDatabaseStatement stmt = new SQLDropDatabaseStatement(getDbType());
accept(Token.DATABASE);
@@ -899,67 +903,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;
}
@@ -968,7 +972,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();
@@ -1093,7 +1097,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);
@@ -1109,7 +1113,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) {
@@ -1126,9 +1130,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);
@@ -1137,7 +1141,6 @@ public class SQLStatementParser extends SQLParser {
acceptIdentifier("CALL");
-
stmt.setProcedureName(exprParser.name());
if (lexer.token() == Token.LPAREN) {
@@ -1156,7 +1159,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);
@@ -1234,7 +1237,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")) {
@@ -1296,7 +1299,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;
}
@@ -1314,7 +1317,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")) {
@@ -1418,11 +1421,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();
@@ -1455,7 +1458,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();
@@ -1537,10 +1540,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());
}
@@ -1582,7 +1585,6 @@ public class SQLStatementParser extends SQLParser {
return item;
}
-
public boolean isParseCompleteValues() {
return parseCompleteValues;
}
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..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);
@@ -964,6 +991,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
x.getOrderBy().setParent(x);
}
+ accept(x.getWithSubQuery());
accept(x.getQuery());
String originalTable = getCurrentTable();
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
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;
+ }
+
+}
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;
+ }
+
+}
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..e6f2f6d4d9
--- /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 = "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) {
+ 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
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
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;
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
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/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();
+ }
+}
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();
}
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/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);
+
+ }
+}
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);
+ }
+}
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());
}
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..ddfe9d9248 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:@20.20.149.85:1521:ocnauto"; // error url
+ jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto";
+ // jdbcUrl = "jdbc:oracle:thin:@b.c.d.e: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..6be628fba4 100644
--- a/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java
+++ b/src/test/java/com/alibaba/druid/pool/TestOracle_DruidDataSource.java
@@ -33,8 +33,8 @@ 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:@20.20.149.85:1521:ocnauto"; // error url
+ jdbcUrl = "jdbc:oracle:thin:@a.b.c.d:1521:ocnauto";
+ // 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/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/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);
+
+ }
+
+}
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/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