diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java index 5f3075b517..4001665385 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java @@ -23,7 +23,7 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLAlterTableAddColumn extends SQLObjectImpl implements SQLAlterTableItem { - private List columns = new ArrayList(); + private final List columns = new ArrayList(); @Override protected void accept0(SQLASTVisitor visitor) { @@ -37,8 +37,4 @@ public class SQLAlterTableAddColumn extends SQLObjectImpl implements SQLAlterTab return columns; } - public void setColumns(List columns) { - this.columns = columns; - } - } 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 c415c7793f..4a0fc68b6c 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -47,6 +47,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; +import com.alibaba.druid.sql.ast.statement.SQLCheck; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCommentStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; @@ -1281,4 +1282,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } return false; } + + public boolean visit(SQLCheck x) { + x.getExpr().accept(this); + return false; + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest22.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest22.java new file mode 100644 index 0000000000..52b454863f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest22.java @@ -0,0 +1,67 @@ +/* + * 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 java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import com.alibaba.druid.util.JdbcConstants; + +public class OracleAlterTableTest22 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "ALTER TABLE employees ADD CONSTRAINT check_comp " // + + " CHECK (salary + (commission_pct*salary) <= 5000)" // + + " DISABLE;"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals("ALTER TABLE employees" // + + "\n\tADD CONSTRAINT check_comp CHECK (salary + commission_pct * salary <= 5000) DIABLE", // + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); + + Assert.assertEquals(2, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest29.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest29.java index 9030c7813b..baee72f740 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest29.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest29.java @@ -71,7 +71,7 @@ public class OracleCreateTableTest29 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertEquals(8, visitor.getColumns().size()); + Assert.assertEquals(7, visitor.getColumns().size()); Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("dept_20", "employee_id"))); }