From 12221ee91d16364ccf74873d1ce15ef50bcab1ad Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 26 May 2013 21:52:28 +0800 Subject: [PATCH] sql parser support alter table drop constraint --- .../SQLAlterTableDropConstraint.java | 47 ++++++++++++++++ .../mysql/parser/MySqlStatementParser.java | 4 +- .../oracle/parser/OracleStatementParser.java | 13 +++-- .../druid/sql/parser/SQLStatementParser.java | 39 ++++++++++---- .../sql/visitor/SQLASTOutputVisitor.java | 8 +++ .../druid/sql/visitor/SQLASTVisitor.java | 5 ++ .../sql/visitor/SQLASTVisitorAdapter.java | 11 ++++ .../druid/sql/visitor/SchemaStatVisitor.java | 6 +++ .../bvt/sql/mysql/MySqlAlterTableTest1.java | 3 +- .../MySqlAlterTableTest_drop_constraint.java | 52 ++++++++++++++++++ .../OracleAlterTableTest_drop_constraint.java | 54 +++++++++++++++++++ ..._0.java => SQLServerAlterTableTest_0.java} | 5 +- ...LServerAlterTableTest_drop_constraint.java | 53 ++++++++++++++++++ 13 files changed, 282 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableDropConstraint.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest_drop_constraint.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest_drop_constraint.java rename src/test/java/com/alibaba/druid/bvt/sql/sqlserver/{SQLServerlAlterTableTest_0.java => SQLServerAlterTableTest_0.java} (91%) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_drop_constraint.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableDropConstraint.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableDropConstraint.java new file mode 100644 index 0000000000..e5d259627c --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableDropConstraint.java @@ -0,0 +1,47 @@ +/* + * 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.SQLName; +import com.alibaba.druid.sql.ast.SQLObjectImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class SQLAlterTableDropConstraint extends SQLObjectImpl implements SQLAlterTableItem { + + private static final long serialVersionUID = 1L; + + private SQLName constraintName; + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, this.constraintName); + } + visitor.endVisit(this); + } + + + public SQLName getConstraintName() { + return constraintName; + } + + + public void setConstraintName(SQLName constraintName) { + this.constraintName = constraintName; + } + + +} 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 bed337cb07..5f8940daa8 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 @@ -2177,7 +2177,9 @@ public class MySqlStatementParser extends SQLStatementParser { stmt.setName(this.exprParser.name()); for (;;) { - if (identifierEquals("ADD")) { + if (lexer.token() == Token.DROP) { + parseAlterDrop(stmt); + } else if (identifierEquals("ADD")) { lexer.nextToken(); if (identifierEquals("COLUMN")) { 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 27bd18de1b..6ea5685486 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 @@ -30,7 +30,9 @@ 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.SQLAlterTableDisableConstraint; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLConstaint; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; @@ -921,7 +923,7 @@ public class OracleStatementParser extends SQLStatementParser { } continue; } else if (lexer.token() == Token.DROP) { - parseAlterTableDrop(stmt); + parseAlterDrop(stmt); continue; } else if (identifierEquals("DISABLE")) { lexer.nextToken(); @@ -996,9 +998,14 @@ public class OracleStatementParser extends SQLStatementParser { return item; } - private void parseAlterTableDrop(OracleAlterTableStatement stmt) { + public void parseAlterDrop(SQLAlterTableStatement stmt) { lexer.nextToken(); - if (identifierEquals("PARTITION")) { + if (lexer.token() == Token.CONSTRAINT) { + lexer.nextToken(); + SQLAlterTableDropConstraint item = new SQLAlterTableDropConstraint(); + item.setConstraintName(this.exprParser.name()); + stmt.getItems().add(item); + } else if (identifierEquals("PARTITION")) { lexer.nextToken(); OracleAlterTableDropPartition item = new OracleAlterTableDropPartition(); item.setName(this.exprParser.name()); 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 d34d8ca1e1..7ec6b19d2b 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -25,6 +25,7 @@ import com.alibaba.druid.sql.ast.expr.SQLListExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; @@ -228,7 +229,8 @@ public class SQLStatementParser extends SQLParser { continue; } - throw new ParserException("syntax error, " + lexer.token() + " " + lexer.stringVal() + ", pos " + lexer.pos()); + throw new ParserException("syntax error, " + lexer.token() + " " + lexer.stringVal() + ", pos " + + lexer.pos()); } } @@ -285,17 +287,19 @@ public class SQLStatementParser extends SQLParser { public SQLStatement parseAlter() { accept(Token.ALTER); - + if (lexer.token() == Token.TABLE) { lexer.nextToken(); - + SQLAlterTableStatement stmt = new SQLAlterTableStatement(); stmt.setName(this.exprParser.name()); - + for (;;) { - if (identifierEquals("ADD")) { + if (lexer.token() == Token.DROP) { + parseAlterDrop(stmt); + } else if (identifierEquals("ADD")) { lexer.nextToken(); - + throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); } else if (identifierEquals("DISABLE")) { lexer.nextToken(); @@ -326,12 +330,25 @@ public class SQLStatementParser extends SQLParser { break; } } - + return stmt; } throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); } + public void parseAlterDrop(SQLAlterTableStatement stmt) { + lexer.nextToken(); + + if (lexer.token() == Token.CONSTRAINT) { + lexer.nextToken(); + SQLAlterTableDropConstraint item = new SQLAlterTableDropConstraint(); + item.setConstraintName(this.exprParser.name()); + stmt.getItems().add(item); + } else { + throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } + } + public SQLStatement parseRename() { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); } @@ -552,7 +569,7 @@ public class SQLStatementParser extends SQLParser { lexer.reset(markBp, markChar, Token.CREATE); return parseCreateDbLink(); } - + lexer.reset(markBp, markChar, Token.CREATE); return parseCreateDatabase(); } else if (identifierEquals("PUBLIC") || identifierEquals("SHARE")) { @@ -626,7 +643,7 @@ public class SQLStatementParser extends SQLParser { return udpateStatement; } - + protected void parseUpdateSet(SQLUpdateStatement update) { accept(Token.SET); @@ -666,7 +683,7 @@ public class SQLStatementParser extends SQLParser { if (lexer.token() == (Token.FROM)) { lexer.nextToken(); } - + if (lexer.token() == Token.COMMENT) { lexer.nextToken(); } @@ -697,7 +714,7 @@ public class SQLStatementParser extends SQLParser { if (lexer.token() == Token.CREATE) { lexer.nextToken(); } - + if (lexer.token() == Token.OR) { lexer.nextToken(); accept(Token.REPLACE); 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 bf1cd63ba2..3d344a6b5c 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -72,6 +72,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropColumnItem; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropForeinKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey; @@ -1449,6 +1450,13 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { return false; } + @Override + public boolean visit(SQLAlterTableDropConstraint x) { + print("DROP CONSTRAINT "); + x.getConstraintName().accept(this); + return false; + } + @Override public boolean visit(SQLAlterTableStatement x) { print("ALTER TABLE "); 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 a0998983f7..65df3707fc 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -60,6 +60,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropColumnItem; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropForeinKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey; @@ -479,4 +480,8 @@ public interface SQLASTVisitor { boolean visit(SQLExprHint x); void endVisit(SQLExprHint x); + + boolean visit(SQLAlterTableDropConstraint x); + + void endVisit(SQLAlterTableDropConstraint 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 be0420fcca..959e003459 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -60,6 +60,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropColumnItem; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropForeinKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey; @@ -896,4 +897,14 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public void endVisit(SQLExprHint x) { } + + @Override + public boolean visit(SQLAlterTableDropConstraint x) { + return true; + } + + @Override + public void endVisit(SQLAlterTableDropConstraint 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 2c53d6c0f0..5859df229a 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -40,6 +40,7 @@ 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.SQLAlterTableDisableConstraint; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropForeinKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; @@ -1150,4 +1151,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return false; } + + @Override + public boolean visit(SQLAlterTableDropConstraint x) { + return false; + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest1.java index ee7eeaa315..9eb8fa3d50 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest1.java @@ -15,9 +15,10 @@ */ package com.alibaba.druid.bvt.sql.mysql; -import junit.framework.Assert; 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.mysql.parser.MySqlStatementParser; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest_drop_constraint.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest_drop_constraint.java new file mode 100644 index 0000000000..67e9eed8fd --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest_drop_constraint.java @@ -0,0 +1,52 @@ +/* + * 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.mysql; + +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.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.sql.parser.Token; + +public class MySqlAlterTableTest_drop_constraint extends TestCase { + + public void test_alter_constraint() throws Exception { + String sql = "alter table TUSER drop constraint UK_084c17821a8f47e8b31fbb126b6"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + 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.toMySqlString(stmt); + Assert.assertEquals("ALTER TABLE TUSER" + // + "\n\tDROP CONSTRAINT UK_084c17821a8f47e8b31fbb126b6", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getColumns().size()); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest_drop_constraint.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest_drop_constraint.java new file mode 100644 index 0000000000..2c0d6b2944 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest_drop_constraint.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.oracle; + +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.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.JdbcConstants; + +public class OracleAlterTableTest_drop_constraint extends TestCase { + + public void test_alter_constraint() throws Exception { + String sql = "alter table TUSER drop constraint UK_084c17821a8f47e8b31fbb126b6"; + OracleStatementParser parser = new OracleStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + 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.ORACLE); + Assert.assertEquals("ALTER TABLE TUSER" + // + "\n\tDROP CONSTRAINT UK_084c17821a8f47e8b31fbb126b6", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getColumns().size()); + } + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerlAlterTableTest_0.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_0.java similarity index 91% rename from src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerlAlterTableTest_0.java rename to src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_0.java index 64e5b7c2de..26a82961ca 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerlAlterTableTest_0.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_0.java @@ -24,8 +24,9 @@ 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 SQLServerlAlterTableTest_0 extends TestCase { +public class SQLServerAlterTableTest_0 extends TestCase { public void test_alter_first() throws Exception { String sql = "alter table st_jklsxxb enable constraint FK_ST_xxx_REFERENCE_ST_xxx"; @@ -41,7 +42,7 @@ public class SQLServerlAlterTableTest_0 extends TestCase { System.out.println("coditions : " + visitor.getConditions()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - String output = SQLUtils.toMySqlString(stmt); + String output = SQLUtils.toSQLString(stmt, JdbcConstants.SQL_SERVER); Assert.assertEquals("ALTER TABLE st_jklsxxb" + // "\n\tENABLE CONSTRAINT FK_ST_xxx_REFERENCE_ST_xxx", output); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_drop_constraint.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_drop_constraint.java new file mode 100644 index 0000000000..caad7b324b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerAlterTableTest_drop_constraint.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_drop_constraint extends TestCase { + + public void test_alter_constraint() throws Exception { + String sql = "alter table SSHE.dbo.TUSER drop constraint UK_084c17821a8f47e8b31fbb126b6"; + 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 SSHE.dbo.TUSER" + // + "\n\tDROP CONSTRAINT UK_084c17821a8f47e8b31fbb126b6", output); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getColumns().size()); + } + +}