diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/SQLServerUseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java similarity index 57% rename from src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/SQLServerUseStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java index c1a5d60692..6af27e78c6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/SQLServerUseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUseStatement.java @@ -1,9 +1,11 @@ -package com.alibaba.druid.sql.dialect.sqlserver.ast; +package com.alibaba.druid.sql.ast.statement; import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class SQLServerUseStatement extends SQLServerObjectImpl implements SQLServerStatement { +public class SQLUseStatement extends SQLStatementImpl implements SQLStatement { private static final long serialVersionUID = 1L; private SQLName database; @@ -17,7 +19,7 @@ public class SQLServerUseStatement extends SQLServerObjectImpl implements SQLSer } @Override - public void accept0(SQLServerASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, database); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitor.java index 73c86dd34e..30133fe68c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitor.java @@ -1,7 +1,6 @@ package com.alibaba.druid.sql.dialect.sqlserver.visitor; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; -import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerUseStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.Top; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -14,8 +13,4 @@ public interface SQLServerASTVisitor extends SQLASTVisitor { boolean visit(Top x); void endVisit(Top x); - - boolean visit(SQLServerUseStatement x); - - void endVisit(SQLServerUseStatement x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitorAdapter.java index 34a8407010..9eff67f70d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitorAdapter.java @@ -1,7 +1,6 @@ package com.alibaba.druid.sql.dialect.sqlserver.visitor; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; -import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerUseStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.Top; import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter; @@ -27,14 +26,4 @@ public class SQLServerASTVisitorAdapter extends SQLASTVisitorAdapter implements } - @Override - public boolean visit(SQLServerUseStatement x) { - return true; - } - - @Override - public void endVisit(SQLServerUseStatement x) { - - } - } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java index 34dc5fa18a..5d38004f23 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java @@ -2,7 +2,6 @@ package com.alibaba.druid.sql.dialect.sqlserver.visitor; import com.alibaba.druid.sql.ast.SQLSetQuantifier; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; -import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerUseStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.Top; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; @@ -68,16 +67,4 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe } - @Override - public boolean visit(SQLServerUseStatement x) { - print("USE "); - x.getDatabase().accept(this); - return false; - } - - @Override - public void endVisit(SQLServerUseStatement x) { - - } - } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerSchemaStatVisitor.java index 9ec19d6507..aafc17d44a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerSchemaStatVisitor.java @@ -2,7 +2,6 @@ package com.alibaba.druid.sql.dialect.sqlserver.visitor; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; -import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerUseStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.Top; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -29,14 +28,5 @@ public class SQLServerSchemaStatVisitor extends SchemaStatVisitor implements SQL } - @Override - public boolean visit(SQLServerUseStatement x) { - return false; - } - - @Override - public void endVisit(SQLServerUseStatement x) { - - } } 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 fd8341cd69..ce9f5e210c 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -38,6 +38,7 @@ import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; +import com.alibaba.druid.sql.ast.statement.SQLUseStatement; public class SQLStatementParser extends SQLParser { @@ -155,8 +156,11 @@ public class SQLStatementParser extends SQLParser { } } - public SQLStatement parseUse() { - throw new ParserException("TODO " + lexer.token()); + public SQLUseStatement parseUse() { + accept(Token.USE); + SQLUseStatement stmt = new SQLUseStatement(); + stmt.setDatabase(this.exprParser.name()); + return stmt; } protected SQLDropTableStatement parseDropTable(boolean acceptDrop) { 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 ef816257ca..d1179a16d2 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -82,6 +82,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; 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; public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { @@ -997,4 +998,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { return false; } + @Override + public boolean visit(SQLUseStatement x) { + print("USE "); + x.getDatabase().accept(this); + return false; + } + } 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 58610c2288..60ffbd1344 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -76,6 +76,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; 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; public interface SQLASTVisitor { @@ -330,5 +331,9 @@ public interface SQLASTVisitor { void endVisit(SQLCommentStatement x); boolean visit(SQLCommentStatement x); + + void endVisit(SQLUseStatement x); + + boolean visit(SQLUseStatement 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 2cf5dfa83e..d37f7a3abe 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -77,6 +77,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; 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; public class SQLASTVisitorAdapter implements SQLASTVisitor { @@ -574,4 +575,14 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { return true; } + @Override + public void endVisit(SQLUseStatement x) { + + } + + @Override + public boolean visit(SQLUseStatement x) { + return true; + } + } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerSelectTest.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerSelectTest.java index 58397f5430..8ceadf9c4c 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerSelectTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerSelectTest.java @@ -3,7 +3,7 @@ package com.alibaba.druid.bvt.sql.sqlserver; import junit.framework.Assert; import junit.framework.TestCase; -import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; +import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; import com.alibaba.druid.sql.test.TestUtils; @@ -12,10 +12,10 @@ public class SQLServerSelectTest extends TestCase { public void test_isEmpty() throws Exception { String sql = "USE AdventureWorks2008R2;"; - String expect = "USE AdventureWorks2008R2;"; + String expect = "USE AdventureWorks2008R2"; SQLServerStatementParser parser = new SQLServerStatementParser(sql); - SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); + SQLStatement stmt = parser.parseStatementList().get(0); String text = TestUtils.outputSqlServer(stmt);