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 cd8c2bafdf..1decc67cb3 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 @@ -26,7 +26,7 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLCreateTableStatement extends SQLStatementImpl { protected Type type; - protected SQLName name; + protected SQLExprTableSource tableSource; protected List tableElementList = new ArrayList(); @@ -35,11 +35,23 @@ public class SQLCreateTableStatement extends SQLStatementImpl { } public SQLName getName() { - return name; + if (tableSource == null) { + return null; + } + + return (SQLName) tableSource.getExpr(); } public void setName(SQLName name) { - this.name = name; + this.setTableSource(new SQLExprTableSource(name)); + } + + public SQLExprTableSource getTableSource() { + return tableSource; + } + + public void setTableSource(SQLExprTableSource tableSource) { + this.tableSource = tableSource; } public Type getType() { @@ -67,7 +79,7 @@ public class SQLCreateTableStatement extends SQLStatementImpl { buf.append("LOCAL TEMPORARY "); } - this.name.output(buf); + this.tableSource.output(buf); buf.append(" "); buf.append("("); @@ -83,7 +95,7 @@ public class SQLCreateTableStatement extends SQLStatementImpl { @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { - this.acceptChild(visitor, name); + this.acceptChild(visitor, tableSource); this.acceptChild(visitor, tableElementList); } visitor.endVisit(this); 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 b013dfdca6..c4ed36ed67 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 @@ -9,21 +9,25 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLTruncateStatement extends SQLStatementImpl { - private static final long serialVersionUID = 1L; - protected List tableNames = new ArrayList(2); + private static final long serialVersionUID = 1L; + protected List tableSources = new ArrayList(2); - public List getTableNames() { - return tableNames; + public List getTableSources() { + return tableSources; } - public void setTableNames(List tableNames) { - this.tableNames = tableNames; + public void setTableSources(List tableSources) { + this.tableSources = tableSources; + } + + public void addTableSource(SQLName name) { + this.tableSources.add(new SQLExprTableSource(name)); } @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { - acceptChild(visitor, tableNames); + acceptChild(visitor, tableSources); } visitor.endVisit(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/hive/ast/stmt/HiveCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/hive/ast/stmt/HiveCreateTableStatement.java index aaa217164a..ec2340d83e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/hive/ast/stmt/HiveCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/hive/ast/stmt/HiveCreateTableStatement.java @@ -29,7 +29,7 @@ public class HiveCreateTableStatement extends SQLCreateTableStatement implements @Override public void accept0(HiveASTVisitor visitor) { if (visitor.visit(this)) { - this.acceptChild(visitor, name); + this.acceptChild(visitor, tableSource); this.acceptChild(visitor, tableElementList); this.acceptChild(visitor, partitionedBy); } 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 487f1ebc68..ab021430c5 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 @@ -69,7 +69,7 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement { buf.append("IF NOT EXISTS "); } - this.name.output(buf); + this.tableSource.output(buf); buf.append(" "); buf.append("("); for (int i = 0, size = tableElementList.size(); i < size; ++i) { 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 c95f5c86cb..73cfa9a3ee 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 @@ -184,7 +184,7 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen public void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { - this.acceptChild(visitor, name); + this.acceptChild(visitor, tableSource); this.acceptChild(visitor, tableElementList); this.acceptChild(visitor, tablespace); this.acceptChild(visitor, select); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleTruncateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleTruncateStatement.java index 7552609285..b603055ece 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleTruncateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleTruncateStatement.java @@ -17,7 +17,7 @@ public class OracleTruncateStatement extends SQLTruncateStatement implements Ora public void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { - acceptChild(visitor, tableNames); + acceptChild(visitor, tableSources); } visitor.endVisit(this); } 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 445d6137c3..57dbe2e6b0 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 @@ -580,7 +580,7 @@ public class OracleStatementParser extends SQLStatementParser { OracleTruncateStatement stmt = new OracleTruncateStatement(); SQLName name = this.exprParser.name(); - stmt.getTableNames().add(name); + stmt.addTableSource(name); if (identifierEquals("PURGE")) { lexer.nextToken(); 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 0ed82e5548..e44a9d854c 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 @@ -2839,7 +2839,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS @Override public boolean visit(OracleTruncateStatement x) { print("TRUNCATE TABLE "); - printAndAccept(x.getTableNames(), ", "); + printAndAccept(x.getTableSources(), ", "); if (x.isPurgeSnapshotLog()) { print(" PURGE SNAPSHOT LOG"); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGTruncateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGTruncateStatement.java index 75cf4d2fa5..dfc0af46e0 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGTruncateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGTruncateStatement.java @@ -37,7 +37,7 @@ public class PGTruncateStatement extends SQLTruncateStatement implements PGSQLSt public void accept0(PGASTVisitor visitor) { if (visitor.visit(this)) { - acceptChild(visitor, tableNames); + acceptChild(visitor, tableSources); } visitor.endVisit(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java index e50b99707a..df650ddb94 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java @@ -205,7 +205,7 @@ public class PGSQLStatementParser extends SQLStatementParser { for (;;) { SQLName name = this.exprParser.name(); - stmt.getTableNames().add(name); + stmt.addTableSource(name); if (lexer.token() == Token.COMMA) { lexer.nextToken(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index 3428f8f6e1..4b937f47df 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -251,7 +251,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor print("ONLY "); } - printlnAndAccept(x.getTableNames(), ", "); + printlnAndAccept(x.getTableSources(), ", "); if (x.getRestartIdentity() != null) { if (x.getRestartIdentity().booleanValue()) { 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 9261d45d2e..52116a1226 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -176,7 +176,7 @@ public class SQLStatementParser extends SQLParser { for (;;) { SQLName name = this.exprParser.name(); - stmt.getTableNames().add(name); + stmt.addTableSource(name); if (lexer.token() == Token.COMMA) { lexer.nextToken(); 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 725db7f312..ef816257ca 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -967,7 +967,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { @Override public boolean visit(SQLTruncateStatement x) { print("TRUNCATE TABLE "); - printAndAccept(x.getTableNames(), ", "); + printAndAccept(x.getTableSources(), ", "); return false; } 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 1af1611abc..557dee300b 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -377,7 +377,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { String originalTable = getCurrentTable(); - for (SQLName name : x.getTableNames()) { + for (SQLExprTableSource tableSource : x.getTableSources()) { + SQLName name = (SQLName) tableSource.getExpr(); + String ident = name.toString(); setCurrentTable(ident); x.putAttribute("_old_local_", originalTable);