From 123385f74a12843da2994677f750c6c078539684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Thu, 15 Mar 2012 13:04:56 +0800 Subject: [PATCH] refactor --- .../ast/statement/SQLDropTableStatement.java | 30 +++++++++++++------ .../statement/MySqlDropTableStatement.java | 2 +- .../mysql/parser/MySqlStatementParser.java | 2 +- .../mysql/visitor/MySqlOutputVisitor.java | 2 +- .../druid/sql/parser/SQLStatementParser.java | 3 +- .../sql/visitor/SQLASTOutputVisitor.java | 2 +- .../druid/sql/visitor/SchemaStatVisitor.java | 7 +++-- 7 files changed, 31 insertions(+), 17 deletions(-) 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 de74074987..3d1a091f74 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 @@ -24,34 +24,46 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLDropTableStatement extends SQLStatementImpl { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - protected List tableNames = new ArrayList(); + protected List tableSources = new ArrayList(); public SQLDropTableStatement(){ } public SQLDropTableStatement(SQLName name){ - tableNames.add(name); + this(new SQLExprTableSource(name)); } - public List getTableNames() { - return tableNames; + public SQLDropTableStatement(SQLExprTableSource tableSource){ + this.tableSources.add(tableSource); } - public void setTableNames(List tableNames) { - this.tableNames = tableNames; + public List getTableSources() { + return tableSources; + } + + public void setTableSources(List tableSources) { + this.tableSources = tableSources; } public void setName(SQLName name) { - tableNames.add(name); + this.addTableSource(new SQLExprTableSource(name)); + } + + public void addTableSource(SQLName name) { + this.addTableSource(new SQLExprTableSource(name)); + } + + public void addTableSource(SQLExprTableSource tableSource) { + tableSources.add(tableSource); } @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { - this.acceptChild(visitor, tableNames); + this.acceptChild(visitor, tableSources); } visitor.endVisit(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropTableStatement.java index 11eeaef1d7..4d59b7bf17 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropTableStatement.java @@ -21,7 +21,7 @@ public class MySqlDropTableStatement extends SQLDropTableStatement implements My public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { - this.acceptChild(visitor, tableNames); + this.acceptChild(visitor, tableSources); } visitor.endVisit(this); } 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 289c016822..faea699089 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 @@ -1030,7 +1030,7 @@ public class MySqlStatementParser extends SQLStatementParser { for (;;) { SQLName name = this.exprParser.name(); - stmt.getTableNames().add(name); + stmt.addTableSource(name); if (lexer.token() == Token.COMMA) { lexer.nextToken(); continue; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index b84a936387..ec68acf43a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -1322,7 +1322,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV print("IF EXISTS "); } - printAndAccept(x.getTableNames(), ", "); + printAndAccept(x.getTableSources(), ", "); return false; } 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 b90116e289..9261d45d2e 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -29,6 +29,7 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLInsertInto; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; @@ -158,7 +159,7 @@ public class SQLStatementParser extends SQLParser { for (;;) { SQLName name = this.exprParser.name(); - stmt.getTableNames().add(name); + stmt.getTableSources().add(new SQLExprTableSource(name)); if (lexer.token() == Token.COMMA) { lexer.nextToken(); continue; 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 128e4deb42..725db7f312 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -594,7 +594,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { public boolean visit(SQLDropTableStatement x) { print("DROP 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 12c46ff580..1af1611abc 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -358,7 +358,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { if (table != null) { return new Column(table, column); } - + if (variants.containsKey(column)) { return null; } @@ -402,7 +402,8 @@ 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); @@ -868,7 +869,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { public boolean visit(SQLCommentStatement x) { return false; } - + public boolean visit(SQLCurrentOfCursorExpr x) { return false; }