diff --git a/src/main/java/com/alibaba/druid/sql/ast/SQLStatementImpl.java b/src/main/java/com/alibaba/druid/sql/ast/SQLStatementImpl.java index 3d6467ad04..216f93803a 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/SQLStatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/ast/SQLStatementImpl.java @@ -20,12 +20,26 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public abstract class SQLStatementImpl extends SQLObjectImpl implements SQLStatement { + private String dbType; + public SQLStatementImpl(){ } + + public SQLStatementImpl(String dbType){ + this.dbType = dbType; + } + + public String getDbType() { + return dbType; + } + + public void setDbType(String dbType) { + this.dbType = dbType; + } public String toString() { - return SQLUtils.toSQLString(this); + return SQLUtils.toSQLString(this, dbType); } @Override diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java index dc87c8a4b1..b7ebb6381a 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java @@ -26,6 +26,14 @@ public class SQLAlterTableStatement extends SQLStatementImpl implements SQLDDLSt private SQLExprTableSource tableSource; private List items = new ArrayList(); + + public SQLAlterTableStatement() { + + } + + public SQLAlterTableStatement(String dbType) { + super (dbType); + } public List getItems() { return items; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCallStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCallStatement.java index f465f281b6..19b85bf313 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCallStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCallStatement.java @@ -33,6 +33,14 @@ public class SQLCallStatement extends SQLStatementImpl { private SQLName procedureName; private final List parameters = new ArrayList(); + + public SQLCallStatement() { + + } + + public SQLCallStatement(String dbType) { + super (dbType); + } public SQLVariantRefExpr getOutParameter() { return outParameter; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateDatabaseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateDatabaseStatement.java index f0e4440559..7b13551577 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateDatabaseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateDatabaseStatement.java @@ -33,6 +33,10 @@ public class SQLCreateDatabaseStatement extends SQLStatementImpl { public SQLCreateDatabaseStatement(){ } + + public SQLCreateDatabaseStatement(String dbType){ + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java index 528d8a900b..8c332ac0af 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java @@ -35,6 +35,10 @@ public class SQLCreateIndexStatement extends SQLStatementImpl implements SQLDDLS public SQLCreateIndexStatement(){ } + + public SQLCreateIndexStatement(String dbType){ + super (dbType); + } public SQLTableSource getTable() { return table; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java index 4b18ae6560..87640b7a86 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java @@ -33,6 +33,10 @@ public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLS public SQLCreateTableStatement(){ } + + public SQLCreateTableStatement(String dbType){ + super (dbType); + } public SQLName getName() { if (tableSource == null) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java index 9a0b05a538..262cdb89b7 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTriggerStatement.java @@ -37,6 +37,14 @@ public class SQLCreateTriggerStatement extends SQLStatementImpl { private boolean forEachRow = false; private SQLStatement body; + + public SQLCreateTriggerStatement() { + + } + + public SQLCreateTriggerStatement(String dbType) { + super (dbType); + } protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateViewStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateViewStatement.java index e690faa82b..4f4a345754 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateViewStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateViewStatement.java @@ -36,6 +36,10 @@ public class SQLCreateViewStatement extends SQLStatementImpl implements SQLDDLSt public SQLCreateViewStatement(){ } + + public SQLCreateViewStatement(String dbType){ + super (dbType); + } public boolean isOrReplace() { return orReplace; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDeleteStatement.java index 83c8b59e85..9e5c915e6e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDeleteStatement.java @@ -29,6 +29,10 @@ public class SQLDeleteStatement extends SQLStatementImpl { public SQLDeleteStatement(){ } + + public SQLDeleteStatement(String dbType){ + super (dbType); + } public SQLTableSource getTableSource() { return tableSource; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropDatabaseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropDatabaseStatement.java index 3f22f1cd7d..b431c3c207 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropDatabaseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropDatabaseStatement.java @@ -23,6 +23,14 @@ public class SQLDropDatabaseStatement extends SQLStatementImpl implements SQLDDL private SQLExpr database; private boolean ifExists; + + public SQLDropDatabaseStatement() { + + } + + public SQLDropDatabaseStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropFunctionStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropFunctionStatement.java index 3c5bf3fe1e..3545a69563 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropFunctionStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropFunctionStatement.java @@ -23,6 +23,14 @@ public class SQLDropFunctionStatement extends SQLStatementImpl implements SQLDDL private SQLName name; private boolean ifExists; + + public SQLDropFunctionStatement() { + + } + + public SQLDropFunctionStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java index 870fa3d3d1..da39c6bda5 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropIndexStatement.java @@ -23,6 +23,14 @@ public class SQLDropIndexStatement extends SQLStatementImpl implements SQLDDLSta private SQLExpr indexName; private SQLExprTableSource tableName; + + public SQLDropIndexStatement() { + + } + + public SQLDropIndexStatement(String dbType) { + super (dbType); + } public SQLExpr getIndexName() { return indexName; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropProcedureStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropProcedureStatement.java index b583dcd9f9..531ab41ffc 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropProcedureStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropProcedureStatement.java @@ -23,6 +23,14 @@ public class SQLDropProcedureStatement extends SQLStatementImpl implements SQLDD private SQLName name; private boolean ifExists; + + public SQLDropProcedureStatement() { + + } + + public SQLDropProcedureStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java index ce15eb7ece..0fcd4034be 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLDropSequenceStatement extends SQLStatementImpl implements SQLDDLStatement { private SQLName name; + + public SQLDropSequenceStatement() { + + } + + public SQLDropSequenceStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java index cd9cbf3a70..bbb3cce4ac 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableSpaceStatement.java @@ -23,6 +23,14 @@ public class SQLDropTableSpaceStatement extends SQLStatementImpl implements SQLD private SQLName name; private boolean ifExists; + + public SQLDropTableSpaceStatement() { + + } + + public SQLDropTableSpaceStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java index 62f83a6f70..845e8d527e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java @@ -36,12 +36,25 @@ public class SQLDropTableStatement extends SQLStatementImpl implements SQLDDLSta public SQLDropTableStatement(){ } - - public SQLDropTableStatement(SQLName name){ - this(new SQLExprTableSource(name)); + + public SQLDropTableStatement(String dbType){ + super (dbType); } + public SQLDropTableStatement(SQLName name, String dbType){ + this(new SQLExprTableSource(name), dbType); + } + + public SQLDropTableStatement(SQLName name){ + this (name, null); + } + public SQLDropTableStatement(SQLExprTableSource tableSource){ + this (tableSource, null); + } + + public SQLDropTableStatement(SQLExprTableSource tableSource, String dbType){ + this (dbType); this.tableSources.add(tableSource); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java index f9bbf36aa4..a24f6afbad 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLDropTriggerStatement extends SQLStatementImpl implements SQLDDLStatement { private SQLName name; + + public SQLDropTriggerStatement() { + + } + + public SQLDropTriggerStatement(String dbType) { + super (dbType); + } public SQLName getName() { return name; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java index da76f1fbde..6e542551ea 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java @@ -25,6 +25,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLDropUserStatement extends SQLStatementImpl implements SQLDDLStatement { private List users = new ArrayList(2); + + public SQLDropUserStatement() { + + } + + public SQLDropUserStatement(String dbType) { + super (dbType); + } public List getUsers() { return users; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java index a2f9d7d545..4cd3bd23c4 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java @@ -33,6 +33,10 @@ public class SQLDropViewStatement extends SQLStatementImpl implements SQLDDLStat public SQLDropViewStatement(){ } + + public SQLDropViewStatement(String dbType){ + super (dbType); + } public SQLDropViewStatement(SQLName name){ this(new SQLExprTableSource(name)); diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExplainStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExplainStatement.java index 02a0bdee9d..a0c4f189bc 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExplainStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExplainStatement.java @@ -27,6 +27,14 @@ public class SQLExplainStatement extends SQLStatementImpl { protected SQLStatement statement; private List hints; + + public SQLExplainStatement() { + + } + + public SQLExplainStatement(String dbType) { + super (dbType); + } public SQLStatement getStatement() { return statement; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLGrantStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLGrantStatement.java index 9ce3574936..92a3082dfc 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLGrantStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLGrantStatement.java @@ -28,6 +28,14 @@ public class SQLGrantStatement extends SQLStatementImpl { private SQLExpr on; private SQLExpr to; + + public SQLGrantStatement() { + + } + + public SQLGrantStatement(String dbType) { + super (dbType); + } // mysql private ObjectType objectType; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLReleaseSavePointStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLReleaseSavePointStatement.java index cc32aec00f..85faa6b17e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLReleaseSavePointStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLReleaseSavePointStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLReleaseSavePointStatement extends SQLStatementImpl { private SQLExpr name; + + public SQLReleaseSavePointStatement() { + + } + + public SQLReleaseSavePointStatement(String dbType) { + super (dbType); + } public SQLExpr getName() { return name; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java index a805ab345f..550c1f4b5b 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLRollbackStatement extends SQLStatementImpl { private SQLName to; + + public SQLRollbackStatement() { + + } + + public SQLRollbackStatement(String dbType) { + super (dbType); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java index c20412f354..cea0cbd29a 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java @@ -22,6 +22,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLSavePointStatement extends SQLStatementImpl { private SQLExpr name; + + public SQLSavePointStatement() { + + } + + public SQLSavePointStatement(String dbType) { + super (dbType); + } public SQLExpr getName() { return name; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectStatement.java index 720f54cba5..be7fafdf18 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectStatement.java @@ -26,10 +26,19 @@ public class SQLSelectStatement extends SQLStatementImpl { } + public SQLSelectStatement(String dbType){ + super (dbType); + } + public SQLSelectStatement(SQLSelect select){ this.setSelect(select); } + public SQLSelectStatement(SQLSelect select, String dbType){ + this(dbType); + this.setSelect(select); + } + public SQLSelect getSelect() { return this.select; } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSetStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSetStatement.java index ab6adab03b..2f2c021656 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSetStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSetStatement.java @@ -31,8 +31,17 @@ public class SQLSetStatement extends SQLStatementImpl { public SQLSetStatement(){ } - + + public SQLSetStatement(String dbType){ + super (dbType); + } + public SQLSetStatement(SQLExpr target, SQLExpr value){ + this(target, value, null); + } + + public SQLSetStatement(SQLExpr target, SQLExpr value, String dbType){ + super (dbType); this.items.add(new SQLAssignItem(target, value)); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java index 294da66db6..9f49362962 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java @@ -31,6 +31,14 @@ public class SQLTruncateStatement extends SQLStatementImpl { private boolean only; private Boolean restartIdentity; private Boolean cascade; + + public SQLTruncateStatement() { + + } + + public SQLTruncateStatement(String dbType) { + super (dbType); + } public List getTableSources() { return tableSources; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java index 472de95dbe..8abdcfc828 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java @@ -33,6 +33,10 @@ public class SQLUpdateStatement extends SQLStatementImpl { public SQLUpdateStatement(){ } + + public SQLUpdateStatement(String dbType){ + super (dbType); + } public SQLTableSource getTableSource() { return tableSource; diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java index fa9527a69e..a80206c839 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java @@ -23,6 +23,14 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLUseStatement extends SQLStatementImpl implements SQLStatement { private SQLName database; + + public SQLUseStatement() { + + } + + public SQLUseStatement(String dbType) { + super (dbType); + } public SQLName getDatabase() { return database; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/db2/ast/DB2StatementImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/db2/ast/DB2StatementImpl.java index 16bee1a003..03e0d2f28c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/db2/ast/DB2StatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/db2/ast/DB2StatementImpl.java @@ -18,8 +18,14 @@ package com.alibaba.druid.sql.dialect.db2.ast; import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.dialect.db2.visitor.DB2ASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public abstract class DB2StatementImpl extends SQLStatementImpl implements DB2Object { + + public DB2StatementImpl() { + super(JdbcConstants.DB2); + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor instanceof DB2ASTVisitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableStatement.java index 0a71410f8b..56070f250b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableStatement.java @@ -18,10 +18,15 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlAlterTableStatement extends SQLAlterTableStatement { private boolean ignore = false; + + public MySqlAlterTableStatement() { + super (JdbcConstants.MYSQL); + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java index ba452386cf..ef4201165c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java @@ -18,10 +18,15 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlCreateIndexStatement extends SQLCreateIndexStatement implements MySqlStatement { private String using; + + public MySqlCreateIndexStatement() { + super (JdbcConstants.MYSQL); + } public String getUsing() { return using; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java index 869b5e605d..c83025bff2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java @@ -31,6 +31,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlCreateTableStatement extends SQLCreateTableStatement implements MySqlStatement { @@ -47,7 +48,7 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement private SQLExprTableSource like; public MySqlCreateTableStatement(){ - + super (JdbcConstants.MYSQL); } public SQLExprTableSource getLike() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java index 213617d517..2c55628516 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java @@ -22,6 +22,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.L import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlDeleteStatement extends SQLDeleteStatement { @@ -33,6 +34,10 @@ public class MySqlDeleteStatement extends SQLDeleteStatement { private SQLTableSource using; private SQLOrderBy orderBy; private Limit limit; + + public MySqlDeleteStatement() { + super (JdbcConstants.MYSQL); + } public boolean isLowPriority() { return lowPriority; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java index 42f8ce470e..ff0d335ba8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java @@ -19,6 +19,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlRollbackStatement extends SQLRollbackStatement implements MySqlStatement { @@ -28,7 +29,7 @@ public class MySqlRollbackStatement extends SQLRollbackStatement implements MySq private SQLExpr force; public MySqlRollbackStatement(){ - + super (JdbcConstants.MYSQL); } public Boolean getChain() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java index fbf7c6a108..4fe901327b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java @@ -18,9 +18,14 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public abstract class MySqlStatementImpl extends SQLStatementImpl implements MySqlStatement { + public MySqlStatementImpl() { + super(JdbcConstants.MYSQL); + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor instanceof MySqlASTVisitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java index fdaec4cde4..da4f24ca99 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java @@ -20,6 +20,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlStatement { @@ -28,6 +29,10 @@ public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlSta private boolean lowPriority = false; private boolean ignore = false; + + public MySqlUpdateStatement() { + super (JdbcConstants.MYSQL); + } public Limit getLimit() { return limit; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 8642fff5b6..be42fdfe96 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -147,6 +147,7 @@ import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLSelectParser; import com.alibaba.druid.sql.parser.SQLStatementParser; import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; public class MySqlStatementParser extends SQLStatementParser { @@ -191,7 +192,7 @@ public class MySqlStatementParser extends SQLStatementParser { public SQLSelectStatement parseSelect() { MySqlSelectParser selectParser = new MySqlSelectParser(this.exprParser); - return new SQLSelectStatement(selectParser.select()); + return new SQLSelectStatement(selectParser.select(), JdbcConstants.MYSQL); } public SQLUpdateStatement parseUpdateStatement() { @@ -2131,7 +2132,7 @@ public class MySqlStatementParser extends SQLStatementParser { } return stmt; } else { - SQLSetStatement stmt = new SQLSetStatement(); + SQLSetStatement stmt = new SQLSetStatement(getDbType()); parseAssignItems(stmt.getItems(), stmt); @@ -2536,7 +2537,7 @@ public class MySqlStatementParser extends SQLStatementParser { accept(Token.DATABASE); - SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(); + SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(JdbcConstants.MYSQL); stmt.setName(this.exprParser.name()); if (lexer.token() == Token.DEFAULT) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java index 48b868916b..38a522a415 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java @@ -25,6 +25,7 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OdpsCreateTableStatement extends SQLCreateTableStatement { @@ -35,6 +36,10 @@ public class OdpsCreateTableStatement extends SQLCreateTableStatement { protected List partitionColumns = new ArrayList(2); protected SQLExpr lifecycle; + + public OdpsCreateTableStatement() { + super (JdbcConstants.ODPS); + } public SQLExprTableSource getLike() { return like; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsInsertStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsInsertStatement.java index 02bb371362..8a987fa38a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsInsertStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsInsertStatement.java @@ -23,12 +23,17 @@ import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OdpsInsertStatement extends SQLStatementImpl implements SQLStatement { private SQLSubqueryTableSource from; private List items = new ArrayList(); + + public OdpsInsertStatement() { + super (JdbcConstants.ODPS); + } public void setFrom(SQLSubqueryTableSource from) { this.from = from; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java index d468e24b2d..bdf8fb7cbd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java @@ -5,10 +5,15 @@ import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OdpsShowPartitionsStmt extends SQLStatementImpl implements SQLStatement { private SQLExprTableSource tableSource; + + public OdpsShowPartitionsStmt() { + super (JdbcConstants.ODPS); + } public SQLExprTableSource getTableSource() { return tableSource; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java index 04c93d3eff..7d17033dd2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java @@ -5,10 +5,15 @@ import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OdpsShowStatisticStmt extends SQLStatementImpl implements SQLStatement { private SQLExprTableSource tableSource; + + public OdpsShowStatisticStmt() { + super (JdbcConstants.ODPS); + } public SQLExprTableSource getTableSource() { return tableSource; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java index 1ca577d3f0..87ed9bbe93 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java @@ -18,11 +18,16 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleAlterTableStatement extends SQLAlterTableStatement implements OracleDDLStatement { private boolean updateGlobalIndexes = false; private boolean invalidateGlobalIndexes = false; + + public OracleAlterTableStatement() { + super (JdbcConstants.ORACLE); + } protected void accept0(SQLASTVisitor visitor) { accept0((OracleASTVisitor) visitor); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java index 62f0352f5b..4fa2df9a37 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java @@ -20,6 +20,7 @@ import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleCreateIndexStatement extends SQLCreateIndexStatement implements OracleDDLStatement { @@ -41,6 +42,10 @@ public class OracleCreateIndexStatement extends SQLCreateIndexStatement implemen private Boolean enable = null; private boolean computeStatistics = false; + + public OracleCreateIndexStatement() { + super (JdbcConstants.ORACLE); + } public SQLName getTablespace() { return tablespace; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java index 8d150fe24b..5f35c2d2ce 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java @@ -24,6 +24,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleLobStorageClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleCreateTableStatement extends SQLCreateTableStatement implements OracleDDLStatement { @@ -58,6 +59,10 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen private SQLPartitioningClause partitioning; private DeferredSegmentCreation deferredSegmentCreation; + + public OracleCreateTableStatement() { + super (JdbcConstants.ORACLE); + } public OracleLobStorageClause getLobStorage() { return lobStorage; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDeleteStatement.java index 22bd2af5e6..406fb9a0b7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDeleteStatement.java @@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleDeleteStatement extends SQLDeleteStatement { @@ -32,7 +33,7 @@ public class OracleDeleteStatement extends SQLDeleteStatement { private OracleReturningClause returning = null; public OracleDeleteStatement(){ - + super (JdbcConstants.ORACLE); } public OracleReturningClause getReturning() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExplainStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExplainStatement.java index 4555c8588f..acf87eebfe 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExplainStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExplainStatement.java @@ -21,11 +21,16 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.statement.SQLExplainStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleExplainStatement extends SQLExplainStatement implements OracleStatement { private SQLCharExpr statementId; private SQLExpr into; + + public OracleExplainStatement() { + super (JdbcConstants.ORACLE); + } @Override public void accept0(OracleASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleStatementImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleStatementImpl.java index 8cae231df3..f5f08974f2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleStatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleStatementImpl.java @@ -19,8 +19,13 @@ import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatementImpl; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public abstract class OracleStatementImpl extends SQLStatementImpl implements OracleStatement { + + public OracleStatementImpl() { + super(JdbcConstants.ORACLE); + } protected void accept0(SQLASTVisitor visitor) { accept0((OracleASTVisitor) visitor); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java index a5ccfb539d..63715c946a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java @@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.SQLHint; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class OracleUpdateStatement extends SQLUpdateStatement implements OracleStatement { @@ -35,7 +36,7 @@ public class OracleUpdateStatement extends SQLUpdateStatement implements OracleS private List returningInto = new ArrayList(); public OracleUpdateStatement(){ - + super (JdbcConstants.ORACLE); } public List getReturning() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index 4ea1acdfba..4647055eee 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -105,6 +105,7 @@ import com.alibaba.druid.sql.parser.Lexer; import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLStatementParser; import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; public class OracleStatementParser extends SQLStatementParser { @@ -163,7 +164,8 @@ public class OracleStatementParser extends SQLStatementParser { } if (lexer.token() == (Token.SELECT)) { - statementList.add(new SQLSelectStatement(new OracleSelectParser(this.exprParser).select())); + SQLSelectStatement stmt = new SQLSelectStatement(new OracleSelectParser(this.exprParser).select(), JdbcConstants.ORACLE); + statementList.add(stmt); continue; } @@ -238,7 +240,7 @@ public class OracleStatementParser extends SQLStatementParser { if (variant instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr binaryOpExpr = (SQLBinaryOpExpr) variant; if (binaryOpExpr.getOperator() == SQLBinaryOperator.Assignment) { - SQLSetStatement stmt = new SQLSetStatement(binaryOpExpr.getLeft(), binaryOpExpr.getRight()); + SQLSetStatement stmt = new SQLSetStatement(binaryOpExpr.getLeft(), binaryOpExpr.getRight(), getDbType()); statementList.add(stmt); continue; } @@ -246,7 +248,7 @@ public class OracleStatementParser extends SQLStatementParser { accept(Token.COLONEQ); SQLExpr value = this.exprParser.expr(); - SQLSetStatement stmt = new SQLSetStatement(variant, value); + SQLSetStatement stmt = new SQLSetStatement(variant, value, getDbType()); statementList.add(stmt); continue; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGDeleteStatement.java index d3137e43f7..34241bcc8e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGDeleteStatement.java @@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class PGDeleteStatement extends SQLDeleteStatement implements PGSQLStatement { @@ -31,6 +32,10 @@ public class PGDeleteStatement extends SQLDeleteStatement implements PGSQLStatem private List using = new ArrayList(2); private boolean returning; private String alias; + + public PGDeleteStatement() { + super (JdbcConstants.POSTGRESQL); + } public boolean isReturning() { return returning; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectStatement.java index d347842377..ff567ce1fe 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGSelectStatement.java @@ -20,16 +20,18 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class PGSelectStatement extends SQLSelectStatement implements PGSQLStatement { private PGWithClause with; public PGSelectStatement(){ + super(JdbcConstants.POSTGRESQL); } public PGSelectStatement(SQLSelect select){ - super(select); + super(select, JdbcConstants.POSTGRESQL); } public PGWithClause getWith() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java index feb22081ac..602d347629 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java @@ -24,6 +24,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class PGUpdateStatement extends SQLUpdateStatement implements PGSQLStatement { @@ -34,6 +35,10 @@ public class PGUpdateStatement extends SQLUpdateStatement implements PGSQLStatem private List returning = new ArrayList(2); private SQLTableSource from; + + public PGUpdateStatement(){ + super (JdbcConstants.POSTGRESQL); + } public SQLTableSource getFrom() { return from; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerUpdateStatement.java index 4619536a87..70c48abdc3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerUpdateStatement.java @@ -22,12 +22,17 @@ import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; +import com.alibaba.druid.util.JdbcConstants; public class SQLServerUpdateStatement extends SQLUpdateStatement implements SQLServerStatement { private SQLServerTop top; private SQLTableSource from; private SQLServerOutput output; + + public SQLServerUpdateStatement(){ + super (JdbcConstants.SQL_SERVER); + } public SQLServerTop getTop() { return top; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java index a3abfa583c..ef04e23f02 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java @@ -355,7 +355,7 @@ public class SQLServerStatementParser extends SQLStatementParser { } if (lexer.token() == Token.VARIANT) { - SQLSetStatement stmt = new SQLSetStatement(); + SQLSetStatement stmt = new SQLSetStatement(getDbType()); parseAssignItems(stmt.getItems(), stmt); return stmt; } else { diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java index 9edd4d4176..48bce825c0 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java @@ -115,6 +115,6 @@ public class SQLCreateTableParser extends SQLDDLParser { } protected SQLCreateTableStatement newCreateStatement() { - return new SQLCreateTableStatement(); + return new SQLCreateTableStatement(getDbType()); } } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 0296518bf5..2240d5d92b 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -87,10 +87,18 @@ public class SQLExprParser extends SQLParser { public SQLExprParser(String sql){ super(sql); } + + public SQLExprParser(String sql, String dbType){ + super(sql, dbType); + } public SQLExprParser(Lexer lexer){ super(lexer); } + + public SQLExprParser(Lexer lexer, String dbType){ + super(lexer, dbType); + } public SQLExpr expr() { if (lexer.token() == Token.STAR) { diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java index 5882e9c6c2..92354ccf0b 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java @@ -19,19 +19,34 @@ public class SQLParser { protected final Lexer lexer; - public SQLParser(String sql){ - this(new Lexer(sql)); + protected String dbType; + + public SQLParser(String sql, String dbType){ + this(new Lexer(sql), dbType); this.lexer.nextToken(); } + public SQLParser(String sql){ + this(sql, null); + } + public SQLParser(Lexer lexer){ + this(lexer, null); + } + + public SQLParser(Lexer lexer, String dbType){ this.lexer = lexer; + this.dbType = dbType; } public final Lexer getLexer() { return lexer; } + public String getDbType() { + return dbType; + } + protected boolean identifierEquals(String text) { return lexer.token() == Token.IDENTIFIER && lexer.stringVal().equalsIgnoreCase(text); } @@ -143,7 +158,7 @@ public class SQLParser { alias += ('.' + lexer.token().name()); lexer.nextToken(); } - + return alias; } @@ -169,7 +184,7 @@ public class SQLParser { } else if (lexer.token() == Token.USER) { alias = lexer.stringVal(); lexer.nextToken(); - } + } switch (lexer.token()) { case KEY: @@ -184,7 +199,7 @@ public class SQLParser { return alias; } - protected void printError(Token token){ + protected void printError(Token token) { String arround; if (lexer.mark >= 0 && (lexer.text.length() > lexer.mark + 30)) { if (lexer.mark - 5 > 0) { @@ -202,7 +217,7 @@ public class SQLParser { } else { arround = lexer.text; } - + // throw new // ParserException("syntax error, error arround:'"+arround+"',expect " // + token + ", actual " + lexer.token() + " " @@ -210,7 +225,7 @@ public class SQLParser { throw new ParserException("syntax error, error in :'" + arround + "',expect " + token + ", actual " + lexer.token() + " " + lexer.stringVal()); } - + public void accept(Token token) { if (lexer.token() == token) { lexer.nextToken(); @@ -223,7 +238,7 @@ public class SQLParser { public void match(Token token) { if (lexer.token() != token) { throw new ParserException("syntax error, expect " + token + ", actual " + lexer.token() + " " - + lexer.stringVal()); + + lexer.stringVal()); } } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index ccf68e08d4..82ce1a9aa3 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -90,11 +90,15 @@ public class SQLStatementParser extends SQLParser { protected int parseValuesSize = 3; public SQLStatementParser(String sql){ - this(new SQLExprParser(sql)); + this(sql, null); + } + + public SQLStatementParser(String sql, String dbType){ + this(new SQLExprParser(sql, dbType)); } public SQLStatementParser(SQLExprParser exprParser){ - super(exprParser.getLexer()); + super(exprParser.getLexer(), exprParser.getDbType()); this.exprParser = exprParser; } @@ -315,7 +319,7 @@ public class SQLStatementParser extends SQLParser { lexer.nextToken(); } - SQLRollbackStatement stmt = new SQLRollbackStatement(); + SQLRollbackStatement stmt = new SQLRollbackStatement(getDbType()); if (lexer.token() == Token.TO) { lexer.nextToken(); @@ -339,14 +343,14 @@ public class SQLStatementParser extends SQLParser { public SQLUseStatement parseUse() { accept(Token.USE); - SQLUseStatement stmt = new SQLUseStatement(); + SQLUseStatement stmt = new SQLUseStatement(getDbType()); stmt.setDatabase(this.exprParser.name()); return stmt; } public SQLGrantStatement parseGrant() { accept(Token.GRANT); - SQLGrantStatement stmt = new SQLGrantStatement(); + SQLGrantStatement stmt = new SQLGrantStatement(getDbType()); for (;;) { String privilege = null; @@ -619,7 +623,7 @@ public class SQLStatementParser extends SQLParser { acceptIdentifier("OPTION"); stmt.setAdminOption(true); } - + if (lexer.token() == Token.IDENTIFIED) { lexer.nextToken(); accept(Token.BY); @@ -631,7 +635,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseSavePoint() { acceptIdentifier("SAVEPOINT"); - SQLSavePointStatement stmt = new SQLSavePointStatement(); + SQLSavePointStatement stmt = new SQLSavePointStatement(getDbType()); stmt.setName(this.exprParser.name()); return stmt; } @@ -639,7 +643,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseReleaseSavePoint() { acceptIdentifier("RELEASE"); acceptIdentifier("SAVEPOINT"); - SQLReleaseSavePointStatement stmt = new SQLReleaseSavePointStatement(); + SQLReleaseSavePointStatement stmt = new SQLReleaseSavePointStatement(getDbType()); stmt.setName(this.exprParser.name()); return stmt; } @@ -752,7 +756,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.DROP); } - SQLDropTableStatement stmt = new SQLDropTableStatement(); + SQLDropTableStatement stmt = new SQLDropTableStatement(getDbType()); if (identifierEquals("TEMPORARY")) { lexer.nextToken(); @@ -816,7 +820,7 @@ public class SQLStatementParser extends SQLParser { SQLName name = this.exprParser.name(); - SQLDropSequenceStatement stmt = new SQLDropSequenceStatement(); + SQLDropSequenceStatement stmt = new SQLDropSequenceStatement(getDbType()); stmt.setName(name); return stmt; } @@ -830,7 +834,7 @@ public class SQLStatementParser extends SQLParser { SQLName name = this.exprParser.name(); - SQLDropTriggerStatement stmt = new SQLDropTriggerStatement(); + SQLDropTriggerStatement stmt = new SQLDropTriggerStatement(getDbType()); stmt.setName(name); return stmt; } @@ -840,7 +844,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.DROP); } - SQLDropViewStatement stmt = new SQLDropViewStatement(); + SQLDropViewStatement stmt = new SQLDropViewStatement(getDbType()); accept(Token.VIEW); @@ -881,7 +885,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.DROP); } - SQLDropDatabaseStatement stmt = new SQLDropDatabaseStatement(); + SQLDropDatabaseStatement stmt = new SQLDropDatabaseStatement(getDbType()); accept(Token.DATABASE); @@ -896,67 +900,67 @@ public class SQLStatementParser extends SQLParser { return stmt; } - + protected SQLDropFunctionStatement parseDropFunction(boolean acceptDrop) { if (acceptDrop) { accept(Token.DROP); } - - SQLDropFunctionStatement stmt = new SQLDropFunctionStatement(); - + + SQLDropFunctionStatement stmt = new SQLDropFunctionStatement(getDbType()); + accept(Token.FUNCTION); - + if (lexer.token() == Token.IF) { lexer.nextToken(); accept(Token.EXISTS); stmt.setIfExists(true); } - + SQLName name = this.exprParser.name(); stmt.setName(name); - + return stmt; } - + protected SQLDropTableSpaceStatement parseDropTablespace(boolean acceptDrop) { if (acceptDrop) { accept(Token.DROP); } - - SQLDropTableSpaceStatement stmt = new SQLDropTableSpaceStatement(); - + + SQLDropTableSpaceStatement stmt = new SQLDropTableSpaceStatement(getDbType()); + accept(Token.TABLESPACE); - + if (lexer.token() == Token.IF) { lexer.nextToken(); accept(Token.EXISTS); stmt.setIfExists(true); } - + SQLName name = this.exprParser.name(); stmt.setName(name); - + return stmt; } - + protected SQLDropProcedureStatement parseDropProcedure(boolean acceptDrop) { if (acceptDrop) { accept(Token.DROP); } - - SQLDropProcedureStatement stmt = new SQLDropProcedureStatement(); - + + SQLDropProcedureStatement stmt = new SQLDropProcedureStatement(getDbType()); + accept(Token.PROCEDURE); - + if (lexer.token() == Token.IF) { lexer.nextToken(); accept(Token.EXISTS); stmt.setIfExists(true); } - + SQLName name = this.exprParser.name(); stmt.setName(name); - + return stmt; } @@ -965,7 +969,7 @@ public class SQLStatementParser extends SQLParser { if (lexer.token() == Token.TABLE) { lexer.nextToken(); } - SQLTruncateStatement stmt = new SQLTruncateStatement(); + SQLTruncateStatement stmt = new SQLTruncateStatement(getDbType()); if (lexer.token() == Token.ONLY) { lexer.nextToken(); @@ -1090,7 +1094,7 @@ public class SQLStatementParser extends SQLParser { public SQLDropUserStatement parseDropUser() { accept(Token.USER); - SQLDropUserStatement stmt = new SQLDropUserStatement(); + SQLDropUserStatement stmt = new SQLDropUserStatement(getDbType()); for (;;) { SQLExpr expr = this.exprParser.expr(); stmt.getUsers().add(expr); @@ -1106,7 +1110,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseDropIndex() { accept(Token.INDEX); - SQLDropIndexStatement stmt = new SQLDropIndexStatement(); + SQLDropIndexStatement stmt = new SQLDropIndexStatement(getDbType()); stmt.setIndexName(this.exprParser.name()); if (lexer.token() == Token.ON) { @@ -1123,9 +1127,9 @@ public class SQLStatementParser extends SQLParser { lexer.nextToken(); brace = true; } - - SQLCallStatement stmt = new SQLCallStatement(); - + + SQLCallStatement stmt = new SQLCallStatement(getDbType()); + if (lexer.token() == Token.QUES) { lexer.nextToken(); accept(Token.EQ); @@ -1134,7 +1138,6 @@ public class SQLStatementParser extends SQLParser { acceptIdentifier("CALL"); - stmt.setProcedureName(exprParser.name()); if (lexer.token() == Token.LPAREN) { @@ -1153,7 +1156,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseSet() { accept(Token.SET); - SQLSetStatement stmt = new SQLSetStatement(); + SQLSetStatement stmt = new SQLSetStatement(getDbType()); parseAssignItems(stmt.getItems(), stmt); @@ -1231,7 +1234,7 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseCreateTrigger() { accept(Token.TRIGGER); - SQLCreateTriggerStatement stmt = new SQLCreateTriggerStatement(); + SQLCreateTriggerStatement stmt = new SQLCreateTriggerStatement(getDbType()); stmt.setName(this.exprParser.name()); if (identifierEquals("BEFORE")) { @@ -1293,7 +1296,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.DATABASE); - SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(); + SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(getDbType()); stmt.setName(this.exprParser.name()); return stmt; } @@ -1311,7 +1314,7 @@ public class SQLStatementParser extends SQLParser { accept(Token.CREATE); } - SQLCreateIndexStatement stmt = new SQLCreateIndexStatement(); + SQLCreateIndexStatement stmt = new SQLCreateIndexStatement(getDbType()); if (lexer.token() == Token.UNIQUE) { lexer.nextToken(); if (identifierEquals("CLUSTERED")) { @@ -1415,11 +1418,11 @@ public class SQLStatementParser extends SQLParser { } protected SQLUpdateStatement createUpdateStatement() { - return new SQLUpdateStatement(); + return new SQLUpdateStatement(getDbType()); } public SQLDeleteStatement parseDeleteStatement() { - SQLDeleteStatement deleteStatement = new SQLDeleteStatement(); + SQLDeleteStatement deleteStatement = new SQLDeleteStatement(getDbType()); if (lexer.token() == Token.DELETE) { lexer.nextToken(); @@ -1452,7 +1455,7 @@ public class SQLStatementParser extends SQLParser { } public SQLCreateViewStatement parseCreateView() { - SQLCreateViewStatement createView = new SQLCreateViewStatement(); + SQLCreateViewStatement createView = new SQLCreateViewStatement(getDbType()); if (lexer.token() == Token.CREATE) { lexer.nextToken(); @@ -1534,10 +1537,10 @@ public class SQLStatementParser extends SQLParser { if (lexer.token() == Token.FOR) { lexer.nextToken(); } - - SQLExplainStatement explain = new SQLExplainStatement(); - - if(lexer.token == Token.HINT) { + + SQLExplainStatement explain = new SQLExplainStatement(getDbType()); + + if (lexer.token == Token.HINT) { explain.setHints(this.exprParser.parseHints()); } @@ -1579,7 +1582,6 @@ public class SQLStatementParser extends SQLParser { return item; } - public boolean isParseCompleteValues() { return parseCompleteValues; } diff --git a/src/test/java/com/alibaba/druid/bvt/bug/Issue_685.java b/src/test/java/com/alibaba/druid/bvt/bug/Issue_685.java new file mode 100644 index 0000000000..d91eb9dcc0 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/bug/Issue_685.java @@ -0,0 +1,15 @@ +package com.alibaba.druid.bvt.bug; + +import junit.framework.TestCase; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; + +public class Issue_685 extends TestCase { + + public void test_for_issue() throws Exception { + OracleStatementParser parser = new OracleStatementParser("select upper(*) from aa order by now()"); + SQLStatement st = parser.parseStatement(); + st.toString(); + } +}