From 228e5873cc1076bd632c051f7a705b1679dcce7e Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 5 Aug 2013 09:48:26 +0800 Subject: [PATCH] improve sql parser & add testcase & refactor --- ...y.java => SQLAlterTableAddConstraint.java} | 43 ++++++++------ .../statement/SQLAlterTableAddPrimaryKey.java | 41 ------------- .../mysql/parser/MySqlStatementParser.java | 12 ++-- .../druid/sql/parser/SQLStatementParser.java | 16 +++++- .../sql/visitor/SQLASTOutputVisitor.java | 35 ++++++------ .../druid/sql/visitor/SQLASTVisitor.java | 37 ++++++------ .../sql/visitor/SQLASTVisitorAdapter.java | 57 ++++++++----------- .../bvt/sql/SQLASTVisitorAdapterTest.java | 2 - .../sqlserver/SQLServerAlterTableTest_10.java | 54 ++++++++++++++++++ .../sqlserver/SQLServerAlterTableTest_11.java | 54 ++++++++++++++++++ .../sqlserver/SQLServerAlterTableTest_6.java | 53 +++++++++++++++++ .../sqlserver/SQLServerAlterTableTest_7.java | 53 +++++++++++++++++ .../sqlserver/SQLServerAlterTableTest_8.java | 53 +++++++++++++++++ .../sqlserver/SQLServerAlterTableTest_9.java | 53 +++++++++++++++++ 14 files changed, 418 insertions(+), 145 deletions(-) rename src/main/java/com/alibaba/druid/sql/ast/statement/{SQLAlterTableAddForeignKey.java => SQLAlterTableAddConstraint.java} (56%) delete mode 100644 src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddPrimaryKey.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_10.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_11.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_6.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_7.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_8.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_9.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddForeignKey.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddConstraint.java similarity index 56% rename from src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddForeignKey.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddConstraint.java index f33fbdd9c2..7cce49b190 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddForeignKey.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddConstraint.java @@ -18,35 +18,44 @@ package com.alibaba.druid.sql.ast.statement; import com.alibaba.druid.sql.ast.SQLObjectImpl; import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class SQLAlterTableAddForeignKey extends SQLObjectImpl implements SQLAlterTableItem { +public class SQLAlterTableAddConstraint extends SQLObjectImpl implements SQLAlterTableItem { - private SQLForeignKeyConstraint foreignKey; + private SQLConstaint constraint; + private boolean withNoCheck = false; - public SQLAlterTableAddForeignKey(){ + public SQLAlterTableAddConstraint(){ } - public SQLAlterTableAddForeignKey(SQLForeignKeyConstraint foreignKey){ - this.setForeignKey(foreignKey); - } - - public SQLForeignKeyConstraint getForeignKey() { - return foreignKey; - } - - public void setForeignKey(SQLForeignKeyConstraint foreignKey) { - if (foreignKey != null) { - foreignKey.setParent(this); - } - this.foreignKey = foreignKey; + public SQLAlterTableAddConstraint(SQLConstaint constraint){ + this.setConstraint(constraint); } @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { - acceptChild(visitor, foreignKey); + acceptChild(visitor, constraint); } visitor.endVisit(this); } + public SQLConstaint getConstraint() { + return constraint; + } + + public void setConstraint(SQLConstaint constraint) { + if (constraint != null) { + constraint.setParent(this); + } + this.constraint = constraint; + } + + public boolean isWithNoCheck() { + return withNoCheck; + } + + public void setWithNoCheck(boolean withNoCheck) { + this.withNoCheck = withNoCheck; + } + } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddPrimaryKey.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddPrimaryKey.java deleted file mode 100644 index 8ee80fbee2..0000000000 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddPrimaryKey.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 1999-2011 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.ast.statement; - -import com.alibaba.druid.sql.ast.SQLObjectImpl; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class SQLAlterTableAddPrimaryKey extends SQLObjectImpl implements SQLAlterTableItem { - - private SQLPrimaryKey primaryKey; - - public SQLPrimaryKey getPrimaryKey() { - return primaryKey; - } - - public void setPrimaryKey(SQLPrimaryKey primaryKey) { - this.primaryKey = primaryKey; - } - - @Override - protected void accept0(SQLASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, primaryKey); - } - 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 f3be7b3ed2..272ccecfe9 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 @@ -29,9 +29,8 @@ import com.alibaba.druid.sql.ast.expr.SQLListExpr; import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddForeignKey; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddIndex; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; @@ -2159,8 +2158,7 @@ public class MySqlStatementParser extends SQLStatementParser { stmt.getItems().add(item); } else if (lexer.token() == Token.PRIMARY) { SQLPrimaryKey primaryKey = this.exprParser.parsePrimaryKey(); - SQLAlterTableAddPrimaryKey item = new SQLAlterTableAddPrimaryKey(); - item.setPrimaryKey(primaryKey); + SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(primaryKey); stmt.getItems().add(item); } else if (lexer.token() == Token.KEY) { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); @@ -2173,9 +2171,7 @@ public class MySqlStatementParser extends SQLStatementParser { primaryKey.setName(constraintName); - SQLAlterTableAddPrimaryKey item = new SQLAlterTableAddPrimaryKey(); - item.setPrimaryKey(primaryKey); - + SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(primaryKey); item.setParent(stmt); stmt.getItems().add(item); @@ -2183,7 +2179,7 @@ public class MySqlStatementParser extends SQLStatementParser { SQLForeignKeyConstraint fk = this.getExprParser().parseForeignKey(); fk.setName(constraintName); - SQLAlterTableAddForeignKey item = new SQLAlterTableAddForeignKey(fk); + SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(fk); item.setParent(stmt); 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 e2110ae262..7e3321a97a 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -25,8 +25,8 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLListExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddIndex; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; @@ -39,6 +39,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCommentStatement; +import com.alibaba.druid.sql.ast.statement.SQLConstaint; import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; @@ -568,8 +569,7 @@ public class SQLStatementParser extends SQLParser { if (lexer.token() == Token.PRIMARY) { SQLPrimaryKey primaryKey = this.exprParser.parsePrimaryKey(); - SQLAlterTableAddPrimaryKey item = new SQLAlterTableAddPrimaryKey(); - item.setPrimaryKey(primaryKey); + SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(primaryKey); stmt.getItems().add(item); } else if (lexer.token() == Token.IDENTIFIER) { SQLAlterTableAddColumn item = parseAlterTableAddColumn(); @@ -613,6 +613,16 @@ public class SQLStatementParser extends SQLParser { } else { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); } + } else if (lexer.token() == Token.WITH) { + lexer.nextToken(); + acceptIdentifier("NOCHECK"); + acceptIdentifier("ADD"); + SQLConstaint check = this.exprParser.parseConstaint(); + + SQLAlterTableAddConstraint addCheck = new SQLAlterTableAddConstraint(); + addCheck.setWithNoCheck(true); + addCheck.setConstraint(check); + stmt.getItems().add(addCheck); } else { break; } 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 32ea7c8320..173db60297 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -65,9 +65,8 @@ 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.SQLAlterTableAddForeignKey; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddIndex; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; @@ -1392,13 +1391,6 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab return false; } - @Override - public boolean visit(SQLAlterTableAddPrimaryKey x) { - print("ADD "); - x.getPrimaryKey().accept(this); - return false; - } - @Override public boolean visit(SQLOver x) { print("OVER ("); @@ -1539,13 +1531,6 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab return false; } - @Override - public boolean visit(SQLAlterTableAddForeignKey x) { - print("ADD "); - x.getForeignKey().accept(this); - return false; - } - public boolean visit(SQLAlterTableDisableConstraint x) { print("DISABLE CONSTRAINT "); x.getConstraintName().accept(this); @@ -1790,7 +1775,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab @Override public boolean visit(SQLDropDatabaseStatement x) { print("DROP DATABASE "); - + if (x.isIfExists()) { print("IF EXISTS "); } @@ -1799,7 +1784,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab return false; } - + @Override public boolean visit(SQLAlterTableAddIndex x) { print("ADD "); @@ -1807,7 +1792,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab print(x.getType()); print(" "); } - + if (x.isUnique()) { print("UNIQUE "); } @@ -1828,4 +1813,16 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab } return false; } + + @Override + public boolean visit(SQLAlterTableAddConstraint x) { + if (x.isWithNoCheck()) { + print("WITH NOCHECK "); + } + + print("ADD "); + + x.getConstraint().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 0c5b26c07c..0d7bbc72cd 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -50,9 +50,8 @@ 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.SQLAlterTableAddForeignKey; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddIndex; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; @@ -364,10 +363,6 @@ public interface SQLASTVisitor { void endVisit(SQLAlterTableDropIndex x); - boolean visit(SQLAlterTableAddPrimaryKey x); - - void endVisit(SQLAlterTableAddPrimaryKey x); - boolean visit(SQLDropIndexStatement x); void endVisit(SQLDropIndexStatement x); @@ -444,10 +439,6 @@ public interface SQLASTVisitor { void endVisit(SQLAlterTableStatement x); - boolean visit(SQLAlterTableAddForeignKey x); - - void endVisit(SQLAlterTableAddForeignKey x); - boolean visit(SQLAlterTableDisableConstraint x); void endVisit(SQLAlterTableDisableConstraint x); @@ -495,28 +486,32 @@ public interface SQLASTVisitor { boolean visit(SQLDropSequenceStatement x); void endVisit(SQLDropSequenceStatement x); - + boolean visit(SQLDropTriggerStatement x); - + void endVisit(SQLDropTriggerStatement x); - + void endVisit(SQLDropUserStatement x); boolean visit(SQLDropUserStatement x); - + void endVisit(SQLExplainStatement x); - + boolean visit(SQLExplainStatement x); - + void endVisit(SQLGrantStatement x); - + boolean visit(SQLGrantStatement x); - + void endVisit(SQLDropDatabaseStatement x); - + boolean visit(SQLDropDatabaseStatement x); - + void endVisit(SQLAlterTableAddIndex x); - + boolean visit(SQLAlterTableAddIndex x); + + void endVisit(SQLAlterTableAddConstraint x); + + boolean visit(SQLAlterTableAddConstraint 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 9deee49ca6..d6dd6a2474 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -51,9 +51,8 @@ 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.SQLAlterTableAddForeignKey; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddIndex; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; @@ -679,16 +678,6 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { } - @Override - public boolean visit(SQLAlterTableAddPrimaryKey x) { - return true; - } - - @Override - public void endVisit(SQLAlterTableAddPrimaryKey x) { - - } - @Override public void endVisit(SQLOver x) { } @@ -816,16 +805,6 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { } - @Override - public boolean visit(SQLAlterTableAddForeignKey x) { - return true; - } - - @Override - public void endVisit(SQLAlterTableAddForeignKey x) { - - } - @Override public boolean visit(SQLAlterTableDisableConstraint x) { return true; @@ -968,44 +947,54 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public boolean visit(SQLDropUserStatement x) { return true; } - + @Override public void endVisit(SQLExplainStatement x) { - + } - + @Override public boolean visit(SQLExplainStatement x) { return true; } - + @Override public void endVisit(SQLGrantStatement x) { - + } - + @Override public boolean visit(SQLGrantStatement x) { return true; } - + @Override public void endVisit(SQLDropDatabaseStatement x) { - + } - + @Override public boolean visit(SQLDropDatabaseStatement x) { return true; } - + @Override public void endVisit(SQLAlterTableAddIndex x) { - + } - + @Override public boolean visit(SQLAlterTableAddIndex x) { return true; } + + @Override + public void endVisit(SQLAlterTableAddConstraint x) { + + } + + @Override + public boolean visit(SQLAlterTableAddConstraint x) { + return true; + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/SQLASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/SQLASTVisitorAdapterTest.java index 234a7e442e..13f1db5b00 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/SQLASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/SQLASTVisitorAdapterTest.java @@ -12,7 +12,6 @@ import com.alibaba.druid.sql.ast.expr.SQLInListExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLSomeExpr; import com.alibaba.druid.sql.ast.statement.NotNullConstraint; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; @@ -62,7 +61,6 @@ public class SQLASTVisitorAdapterTest extends TestCase { new SQLReleaseSavePointStatement ().accept(adapter); new SQLCreateDatabaseStatement ().accept(adapter); new SQLAlterTableDropIndex ().accept(adapter); - new SQLAlterTableAddPrimaryKey ().accept(adapter); new SQLOver ().accept(adapter); new SQLWithSubqueryClause().accept(adapter); new SQLAlterTableAlterColumn ().accept(adapter); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_10.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_10.java new file mode 100644 index 0000000000..9d10470658 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_10.java @@ -0,0 +1,54 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.sqlserver; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; +import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerSchemaStatVisitor; +import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; + +public class SQLServerAlterTableTest_10 extends TestCase { + + public void test_alter_first() throws Exception { + String sql = "ALTER TABLE dbo.doc_exc ADD column_b VARCHAR(20) NULL "// + + " CONSTRAINT exb_unique UNIQUE ;"; + SQLServerStatementParser parser = new SQLServerStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + SQLServerSchemaStatVisitor visitor = new SQLServerSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + String output = SQLUtils.toSQLString(stmt, JdbcConstants.SQL_SERVER); + Assert.assertEquals("ALTER TABLE dbo.doc_exc" + + "\n\tADD (column_b VARCHAR(20) DEFAULT NULL CONSTRAINT exb_unique UNIQUE)", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_11.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_11.java new file mode 100644 index 0000000000..57827e5fdd --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_11.java @@ -0,0 +1,54 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.sqlserver; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; +import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerSchemaStatVisitor; +import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; + +public class SQLServerAlterTableTest_11 extends TestCase { + + public void test_alter_first() throws Exception { + String sql = "ALTER TABLE dbo.doc_exd WITH NOCHECK " // + + "ADD CONSTRAINT exd_check CHECK (column_a > 1) ;"; + SQLServerStatementParser parser = new SQLServerStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + SQLServerSchemaStatVisitor visitor = new SQLServerSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + String output = SQLUtils.toSQLString(stmt, JdbcConstants.SQL_SERVER); + Assert.assertEquals("ALTER TABLE dbo.doc_exd" // + + "\n\tWITH NOCHECK ADD CONSTRAINT exd_check CHECK (column_a > 1)", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_6.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_6.java new file mode 100644 index 0000000000..c8d7fe62a8 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_6.java @@ -0,0 +1,53 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.sqlserver; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; +import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerSchemaStatVisitor; +import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; + +public class SQLServerAlterTableTest_6 extends TestCase { + + public void test_alter_first() throws Exception { + String sql = "ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL"; + SQLServerStatementParser parser = new SQLServerStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + SQLServerSchemaStatVisitor visitor = new SQLServerSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + String output = SQLUtils.toSQLString(stmt, JdbcConstants.SQL_SERVER); + Assert.assertEquals("ALTER TABLE MyTable"// + + "\n\tALTER COLUMN NullCOl NVARCHAR(20) NOT NULL", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_7.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_7.java new file mode 100644 index 0000000000..482d203235 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_7.java @@ -0,0 +1,53 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.sqlserver; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; +import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerSchemaStatVisitor; +import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; + +public class SQLServerAlterTableTest_7 extends TestCase { + + public void test_alter_first() throws Exception { + String sql = "ALTER TABLE dbo.doc_exa ADD column_b VARCHAR(20) NULL ;"; + SQLServerStatementParser parser = new SQLServerStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + SQLServerSchemaStatVisitor visitor = new SQLServerSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + String output = SQLUtils.toSQLString(stmt, JdbcConstants.SQL_SERVER); + Assert.assertEquals("ALTER TABLE dbo.doc_exa"// + + "\n\tADD (column_b VARCHAR(20) DEFAULT NULL)", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_8.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_8.java new file mode 100644 index 0000000000..018388238b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_8.java @@ -0,0 +1,53 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.sqlserver; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; +import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerSchemaStatVisitor; +import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; + +public class SQLServerAlterTableTest_8 extends TestCase { + + public void test_alter_first() throws Exception { + String sql = "ALTER TABLE dbo.doc_exb DROP COLUMN column_b ;"; + SQLServerStatementParser parser = new SQLServerStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + SQLServerSchemaStatVisitor visitor = new SQLServerSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + String output = SQLUtils.toSQLString(stmt, JdbcConstants.SQL_SERVER); + Assert.assertEquals("ALTER TABLE dbo.doc_exb"// + + "\n\tDROP COLUMN column_b", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_9.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_9.java new file mode 100644 index 0000000000..ec3ab60ec6 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_9.java @@ -0,0 +1,53 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.sqlserver; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; +import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerSchemaStatVisitor; +import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; + +public class SQLServerAlterTableTest_9 extends TestCase { + + public void test_alter_first() throws Exception { + String sql = "ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2) ;"; + SQLServerStatementParser parser = new SQLServerStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + SQLServerSchemaStatVisitor visitor = new SQLServerSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + String output = SQLUtils.toSQLString(stmt, JdbcConstants.SQL_SERVER); + Assert.assertEquals("ALTER TABLE dbo.doc_exy"// + + "\n\tALTER COLUMN column_a DECIMAL(5, 2)", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getColumns().size()); + } + +}