diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java similarity index 61% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java index 32c659dd2b..f1c0dbce0b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java @@ -1,19 +1,19 @@ -package com.alibaba.druid.sql.dialect.oracle.ast.stmt; +package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; -import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.ast.SQLObjectImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleAlterTableAddColumn extends OracleAlterTableItem { +public class SQLAlterTableAddColumn 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/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/OracleAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java index 9a357bcb4b..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,8 +1,6 @@ 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; @@ -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/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index 4b69ceae1e..b4b089fc11 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 @@ -27,6 +27,7 @@ import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLConstaint; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; @@ -46,7 +47,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.OracleAlterTableItem; @@ -816,7 +816,7 @@ public class OracleStatementParser extends SQLStatementParser { if (lexer.token() == Token.LPAREN) { lexer.nextToken(); - OracleAlterTableAddColumn item = new OracleAlterTableAddColumn(); + SQLAlterTableAddColumn item = new SQLAlterTableAddColumn(); for (;;) { SQLColumnDefinition columnDef = this.exprParser.parseColumn(); 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..376e0dc6ac 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 @@ -16,6 +16,7 @@ package com.alibaba.druid.sql.dialect.oracle.visitor; import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; @@ -56,7 +57,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; @@ -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..3597b27c12 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 @@ -11,6 +11,7 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; @@ -69,7 +70,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; @@ -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..2571a3c00f 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -68,6 +68,7 @@ import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause; import com.alibaba.druid.sql.ast.statement.SQLSelectItem; @@ -1005,4 +1006,16 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { return false; } + @Override + public boolean visit(SQLAlterTableAddColumn x) { + print("ADD ("); + printAndAccept(x.getColumns(), ", "); + print(")"); + return false; + } + + @Override + public void endVisit(SQLAlterTableAddColumn 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..54cd4b89db 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -51,6 +51,7 @@ import com.alibaba.druid.sql.ast.expr.SQLSomeExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.NotNullConstraint; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; @@ -336,4 +337,7 @@ public interface SQLASTVisitor { boolean visit(SQLUseStatement x); + boolean visit(SQLAlterTableAddColumn x); + + void endVisit(SQLAlterTableAddColumn 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..8d9a6de033 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -62,6 +62,7 @@ import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause; @@ -585,4 +586,13 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { return true; } + @Override + public boolean visit(SQLAlterTableAddColumn x) { + return true; + } + + @Override + public void endVisit(SQLAlterTableAddColumn 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..500a4e2ddb 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,8 @@ 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.SQLAlterTableAddColumn; +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; @@ -899,4 +901,21 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { public boolean visit(SQLCurrentOfCursorExpr x) { return false; } + + @Override + public boolean visit(SQLAlterTableAddColumn 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(SQLAlterTableAddColumn x) { + + } }