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 e9ac4bc663..777649f2fa 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 @@ -3,6 +3,7 @@ package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; +import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLStatementImpl; public class SQLAlterTableStatement extends SQLStatementImpl implements SQLDDLStatement { @@ -28,4 +29,14 @@ public class SQLAlterTableStatement extends SQLStatementImpl implements SQLDDLSt this.tableSource = tableSource; } + public SQLName getName() { + if (getTableSource() == null) { + return null; + } + return (SQLName) getTableSource().getExpr(); + } + + public void setName(SQLName name) { + this.setTableSource(new SQLExprTableSource(name)); + } } 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 2430569058..865d0b3470 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 @@ -1,8 +1,24 @@ 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; -public class MySqlAlterTableStatement extends MySqlStatementImpl { + +public class MySqlAlterTableStatement extends SQLAlterTableStatement { private static final long serialVersionUID = 1L; + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor instanceof MySqlASTVisitor) { + accept0((MySqlASTVisitor) visitor); + } else { + throw new IllegalArgumentException("not support visitor type : " + visitor.getClass().getName()); + } + } + + public void accept0(MySqlASTVisitor visitor) { + throw new UnsupportedOperationException(this.getClass().getName()); + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java index 32c659dd2b..6fb45a6ff2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java @@ -3,17 +3,19 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt; import java.util.ArrayList; import java.util.List; +import com.alibaba.druid.sql.ast.SQLObjectImpl; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleAlterTableAddColumn extends OracleAlterTableItem { +public class OracleAlterTableAddColumn extends SQLObjectImpl implements SQLAlterTableItem { private static final long serialVersionUID = 1L; private List columns = new ArrayList(); @Override - public void accept0(OracleASTVisitor visitor) { + protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, columns); } 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 012d903bf0..0c83ded0f7 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 @@ -1,12 +1,10 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt; -import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleAlterTableStatement extends SQLAlterTableStatement implements OracleStatement { +public class OracleAlterTableStatement extends SQLAlterTableStatement implements OracleDDLStatement { private static final long serialVersionUID = 1L; @@ -41,15 +39,4 @@ public class OracleAlterTableStatement extends SQLAlterTableStatement implements public void setInvalidateGlobalIndexes(boolean invalidateGlobalIndexes) { this.invalidateGlobalIndexes = invalidateGlobalIndexes; } - - public SQLName getName() { - if (getTableSource() == null) { - return null; - } - return (SQLName) getTableSource().getExpr(); - } - - public void setName(SQLName name) { - this.setTableSource(new SQLExprTableSource(name)); - } } 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 afbd2d9959..5588d115ac 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 @@ -9,7 +9,7 @@ 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; -public class OracleCreateTableStatement extends SQLCreateTableStatement implements OracleStatement { +public class OracleCreateTableStatement extends SQLCreateTableStatement implements OracleDDLStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDDLStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDDLStatement.java new file mode 100644 index 0000000000..03e42e867c --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDDLStatement.java @@ -0,0 +1,8 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import com.alibaba.druid.sql.ast.statement.SQLDDLStatement; + + +public interface OracleDDLStatement extends SQLDDLStatement, OracleStatement { + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java index c3396c00ff..c9173d2867 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java @@ -473,10 +473,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleAlterTableModify x); - boolean visit(OracleAlterTableAddColumn x); - - void endVisit(OracleAlterTableAddColumn x); - boolean visit(OracleCreateIndexStatement x); void endVisit(OracleCreateIndexStatement x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java index 252e056954..e322d904b3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java @@ -50,7 +50,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; @@ -1032,16 +1031,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleAlterTableAddColumn x) { - return true; - } - - @Override - public void endVisit(OracleAlterTableAddColumn x) { - - } - @Override public boolean visit(OracleCreateIndexStatement x) { return true; @@ -1391,15 +1380,15 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora public void endVisit(OracleSavePointStatement x) { } - + @Override public boolean visit(OracleCreateProcedureStatement x) { return true; } - + @Override public void endVisit(OracleCreateProcedureStatement x) { - + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index b52957e4f2..559747344b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -88,7 +88,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement.R import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; @@ -2179,19 +2178,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - @Override - public boolean visit(OracleAlterTableAddColumn x) { - print("ADD ("); - printAndAccept(x.getColumns(), ", "); - print(")"); - return false; - } - - @Override - public void endVisit(OracleAlterTableAddColumn x) { - - } - @Override public boolean visit(OracleCreateIndexStatement x) { print("CREATE INDEX "); 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 6e017733b6..9bdbf4f8b2 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 @@ -1422,23 +1422,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleAlterTableAddColumn x) { - OracleAlterTableStatement stmt = (OracleAlterTableStatement) x.getParent(); - String table = stmt.getName().toString(); - - for (SQLColumnDefinition column : x.getColumns()) { - String columnName = column.getName().toString(); - addColumn(table, columnName); - } - return false; - } - - @Override - public void endVisit(OracleAlterTableAddColumn x) { - - } - @Override public boolean visit(OracleCreateIndexStatement x) { this.setCurrentTable(x); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 38b77c1c0b..f363fc1506 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -83,6 +83,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.ast.statement.SQLUseStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { @@ -1005,4 +1006,16 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { return false; } + @Override + public boolean visit(OracleAlterTableAddColumn x) { + print("ADD ("); + printAndAccept(x.getColumns(), ", "); + print(")"); + return false; + } + + @Override + public void endVisit(OracleAlterTableAddColumn x) { + + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java index 60ffbd1344..3b5bef3481 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -77,6 +77,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.ast.statement.SQLUseStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; public interface SQLASTVisitor { @@ -336,4 +337,7 @@ public interface SQLASTVisitor { boolean visit(SQLUseStatement x); + boolean visit(OracleAlterTableAddColumn x); + + void endVisit(OracleAlterTableAddColumn x); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java index d37f7a3abe..df8dbcfd3e 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -78,6 +78,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.ast.statement.SQLUseStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; public class SQLASTVisitorAdapter implements SQLASTVisitor { @@ -585,4 +586,13 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { return true; } + @Override + public boolean visit(OracleAlterTableAddColumn x) { + return true; + } + + @Override + public void endVisit(OracleAlterTableAddColumn x) { + + } } 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 fcabbc2f11..2f439072db 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -21,6 +21,7 @@ import com.alibaba.druid.sql.ast.expr.SQLInSubQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCommentStatement; @@ -40,6 +41,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; 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.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; import com.alibaba.druid.stat.TableStat; import com.alibaba.druid.stat.TableStat.Column; import com.alibaba.druid.stat.TableStat.Condition; @@ -899,4 +901,21 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { public boolean visit(SQLCurrentOfCursorExpr x) { return false; } + + @Override + public boolean visit(OracleAlterTableAddColumn x) { + SQLAlterTableStatement stmt = (SQLAlterTableStatement) x.getParent(); + String table = stmt.getName().toString(); + + for (SQLColumnDefinition column : x.getColumns()) { + String columnName = column.getName().toString(); + addColumn(table, columnName); + } + return false; + } + + @Override + public void endVisit(OracleAlterTableAddColumn x) { + + } }