diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableRenameColumn.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableRenameColumn.java new file mode 100644 index 0000000000..b73361dfb0 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableRenameColumn.java @@ -0,0 +1,57 @@ +/* + * 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 SQLAlterTableRenameColumn extends SQLObjectImpl implements SQLAlterTableItem { + + private static final long serialVersionUID = 1L; + private SQLName column; + private SQLName to; + + public SQLAlterTableRenameColumn(){ + + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, column); + acceptChild(visitor, to); + } + visitor.endVisit(this); + } + + public SQLName getColumn() { + return column; + } + + public void setColumn(SQLName column) { + this.column = column; + } + + public SQLName getTo() { + return to; + } + + public void setTo(SQLName to) { + this.to = to; + } + +} 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 0fa18044fc..18a40396c9 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,8 +30,11 @@ 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.SQLAlterTableDropColumnItem; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLConstaint; @@ -54,7 +57,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableRenameTo; @@ -449,6 +451,12 @@ public class OracleStatementParser extends SQLStatementParser { continue; } } + + if (lexer.token() == Token.INDEX) { + SQLStatement stmt = parseDropIndex(); + statementList.add(stmt); + continue; + } if (identifierEquals("SEQUENCE")) { lexer.nextToken(); @@ -856,6 +864,9 @@ public class OracleStatementParser extends SQLStatementParser { accept(Token.RPAREN); } else if (lexer.token() == Token.CONSTRAINT) { stmt.getItems().add(parseConstaint()); + } else if (lexer.token() == Token.IDENTIFIER) { + SQLAlterTableAddColumn item = parseAlterTableAddColumn(); + stmt.getItems().add(item); } else { throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); } @@ -879,9 +890,9 @@ public class OracleStatementParser extends SQLStatementParser { } else if (identifierEquals("MODIFY")) { lexer.nextToken(); + OracleAlterTableModify item = new OracleAlterTableModify(); if (lexer.token() == Token.LPAREN) { lexer.nextToken(); - OracleAlterTableModify item = new OracleAlterTableModify(); for (;;) { SQLColumnDefinition columnDef = this.exprParser.parseColumn(); @@ -893,11 +904,13 @@ public class OracleStatementParser extends SQLStatementParser { break; } accept(Token.RPAREN); - stmt.getItems().add(item); + } else { - throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + SQLColumnDefinition columnDef = this.exprParser.parseColumn(); + item.getColumns().add(columnDef); } + stmt.getItems().add(item); continue; } else if (identifierEquals("SPLIT")) { parseAlterTableSplit(stmt); @@ -956,9 +969,18 @@ public class OracleStatementParser extends SQLStatementParser { return stmt; } - private OracleAlterTableItem parseAlterTableRename() { + private SQLAlterTableItem parseAlterTableRename() { acceptIdentifier("RENAME"); + if (lexer.token() == Token.COLUMN) { + lexer.nextToken(); + SQLAlterTableRenameColumn renameColumn = new SQLAlterTableRenameColumn(); + renameColumn.setColumn(this.exprParser.name()); + accept(Token.TO); + renameColumn.setTo(this.exprParser.name()); + return renameColumn; + } + if (lexer.token() == Token.TO) { lexer.nextToken(); OracleAlterTableRenameTo item = new OracleAlterTableRenameTo(); @@ -996,6 +1018,17 @@ public class OracleStatementParser extends SQLStatementParser { SQLAlterTableDropConstraint item = new SQLAlterTableDropConstraint(); item.setConstraintName(this.exprParser.name()); stmt.getItems().add(item); + } else if (lexer.token() == Token.LPAREN) { + lexer.nextToken(); + SQLAlterTableDropColumnItem item = new SQLAlterTableDropColumnItem(); + this.exprParser.names(item.getColumns()); + stmt.getItems().add(item); + accept(Token.RPAREN); + } else if (lexer.token() == Token.COLUMN) { + lexer.nextToken(); + SQLAlterTableDropColumnItem item = new SQLAlterTableDropColumnItem(); + this.exprParser.names(item.getColumns()); + stmt.getItems().add(item); } else if (identifierEquals("PARTITION")) { lexer.nextToken(); OracleAlterTableDropPartition item = new OracleAlterTableDropPartition(); 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 867bf49033..bc85216bef 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -78,6 +78,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; @@ -1533,4 +1534,13 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab print(")"); return false; } + + @Override + public boolean visit(SQLAlterTableRenameColumn x) { + print("RENAME COLUMN "); + x.getColumn().accept(this); + print(" TO "); + x.getTo().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 1a8448c86e..ff1eb12527 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -62,6 +62,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; @@ -464,5 +465,9 @@ public interface SQLASTVisitor { boolean visit(SQLCreateIndexStatement x); void endVisit(SQLCreateIndexStatement x); + + boolean visit(SQLAlterTableRenameColumn x); + + void endVisit(SQLAlterTableRenameColumn 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 3cf29bc15c..80fad286cf 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -62,6 +62,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; @@ -883,4 +884,14 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public void endVisit(SQLPrimaryKeyImpl x) { } + + @Override + public boolean visit(SQLAlterTableRenameColumn x) { + return true; + } + + @Override + public void endVisit(SQLAlterTableRenameColumn x) { + + } } diff --git a/src/main/java/com/alibaba/druid/wall/spi/OracleWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/OracleWallVisitor.java index a091ee4afe..6897b64b60 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/OracleWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/OracleWallVisitor.java @@ -200,6 +200,7 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi this.toSQL(x))); return false; } + WallVisitorUtils.initWallTopStatementContext(); return true; } @@ -211,6 +212,7 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi @Override public boolean visit(SQLInsertStatement x) { + WallVisitorUtils.initWallTopStatementContext(); WallVisitorUtils.checkInsert(this, x); return true; @@ -230,6 +232,7 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi this.toSQL(x))); return false; } + WallVisitorUtils.initWallTopStatementContext(); return true; } @@ -252,6 +255,7 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi @Override public boolean visit(SQLUpdateStatement x) { + WallVisitorUtils.initWallTopStatementContext(); WallVisitorUtils.checkUpdate(this, x); return true; diff --git a/src/main/java/com/alibaba/druid/wall/spi/PGWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/PGWallVisitor.java index 4742291790..478b87a51f 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/PGWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/PGWallVisitor.java @@ -60,7 +60,7 @@ public class PGWallVisitor extends PGASTVisitorAdapter implements WallVisitor { this.config = provider.getConfig(); this.provider = provider; } - + @Override public boolean isSqlModified() { return sqlModified; @@ -189,11 +189,14 @@ public class PGWallVisitor extends PGASTVisitorAdapter implements WallVisitor { return false; } + WallVisitorUtils.initWallTopStatementContext(); + return true; } @Override public boolean visit(SQLInsertStatement x) { + WallVisitorUtils.initWallTopStatementContext(); WallVisitorUtils.checkInsert(this, x); return true; @@ -207,6 +210,7 @@ public class PGWallVisitor extends PGASTVisitorAdapter implements WallVisitor { @Override public boolean visit(SQLUpdateStatement x) { + WallVisitorUtils.initWallTopStatementContext(); WallVisitorUtils.checkUpdate(this, x); return true; diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index e7718da7a0..b7132976fb 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -85,6 +85,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSetNamesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement; @@ -1698,7 +1699,9 @@ public class WallVisitorUtils { errorCode = ErrorCode.TRUNCATE_NOT_ALLOW; } else if (x instanceof SQLCreateTableStatement // || x instanceof SQLCreateIndexStatement // - || x instanceof SQLCreateViewStatement) { + || x instanceof SQLCreateViewStatement // + || x instanceof OracleCreateSequenceStatement // + ) { allow = config.isCreateTableAllow(); denyMessage = "create table not allow"; errorCode = ErrorCode.CREATE_TABLE_NOT_ALLOW; diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest2.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest2.java new file mode 100644 index 0000000000..21270f02d4 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest2.java @@ -0,0 +1,29 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +public class OracleWallTest2 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateOracle("CREATE SEQUENCE projects_seq START WITH 10000")); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest3.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest3.java new file mode 100644 index 0000000000..a4c79e6fbf --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest3.java @@ -0,0 +1,35 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +public class OracleWallTest3 extends TestCase { + + public void test_true() throws Exception { + String sql = // + "select sequence_name from all_sequences " // + + "union select synonym_name" // + + " from all_synonyms us, all_sequences asq" // + + " where asq.sequence_name = us.table_name" // + + " and asq.sequence_owner = us.table_owner"; // + Assert.assertTrue(WallUtils.isValidateOracle(sql)); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest14.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest14.java new file mode 100644 index 0000000000..d91616acfd --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest14.java @@ -0,0 +1,60 @@ +/* + * 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.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; + +public class OracleAlterTableTest14 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "ALTER TABLE measure_data MODIFY measure_id NUMBER(38)"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.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(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("measure_data"))); + + Assert.assertEquals(1, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("PRODUCT_IDS_ZZJ_TBD0209", "discount_amount"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_affiliate_tran_product", "commission_amount"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest15.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest15.java new file mode 100644 index 0000000000..0351d34583 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest15.java @@ -0,0 +1,60 @@ +/* + * 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.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; + +public class OracleAlterTableTest15 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "ALTER TABLE extensions ADD core NUMBER(1)"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.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(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("extensions"))); + + Assert.assertEquals(1, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("PRODUCT_IDS_ZZJ_TBD0209", "discount_amount"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_affiliate_tran_product", "commission_amount"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest16.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest16.java new file mode 100644 index 0000000000..216723975a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest16.java @@ -0,0 +1,60 @@ +/* + * 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.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; + +public class OracleAlterTableTest16 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "ALTER TABLE extensions DROP COLUMN category"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.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(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("extensions"))); + + Assert.assertEquals(1, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("PRODUCT_IDS_ZZJ_TBD0209", "discount_amount"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_affiliate_tran_product", "commission_amount"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest17.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest17.java new file mode 100644 index 0000000000..f6a8d81e3e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest17.java @@ -0,0 +1,60 @@ +/* + * 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.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; + +public class OracleAlterTableTest17 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "ALTER TABLE rules RENAME COLUMN temp_plugin_config_key to plugin_config_key"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.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(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("rules"))); + + Assert.assertEquals(2, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("PRODUCT_IDS_ZZJ_TBD0209", "discount_amount"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_affiliate_tran_product", "commission_amount"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest18.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest18.java new file mode 100644 index 0000000000..90e44d7571 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest18.java @@ -0,0 +1,60 @@ +/* + * 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.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; + +public class OracleAlterTableTest18 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "ALTER TABLE project_measures DROP (diff_value_1, diff_value_2, diff_value_3)"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.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(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("project_measures"))); + + Assert.assertEquals(3, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("PRODUCT_IDS_ZZJ_TBD0209", "discount_amount"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_affiliate_tran_product", "commission_amount"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateSequenceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateSequenceTest.java index 4eb42e4ebf..dfed3eb8e3 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateSequenceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateSequenceTest.java @@ -17,7 +17,7 @@ package com.alibaba.druid.bvt.sql.oracle; import java.util.List; -import junit.framework.Assert; +import org.junit.Assert; import com.alibaba.druid.sql.OracleTest; import com.alibaba.druid.sql.ast.SQLStatement; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateSequenceTest_1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateSequenceTest_1.java new file mode 100644 index 0000000000..c24854d3f7 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateSequenceTest_1.java @@ -0,0 +1,59 @@ +/* + * 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.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; + +public class OracleCreateSequenceTest_1 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "CREATE SEQUENCE projects_seq START WITH 10000"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.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(0, visitor.getTables().size()); + + // Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropIndexTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropIndexTest.java new file mode 100644 index 0000000000..8d53b28587 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropIndexTest.java @@ -0,0 +1,50 @@ +/* + * 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.util.JdbcConstants; + +public class OracleDropIndexTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "DROP INDEX async_m_s_snapshot_id"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statement = statementList.get(0); + print(statementList); + + Assert.assertEquals("DROP INDEX async_m_s_snapshot_id", + SQLUtils.toSQLString(statement, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statement.accept(visitor); + + Assert.assertEquals(0, visitor.getTables().size()); + } + + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest48.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest48.java new file mode 100644 index 0000000000..757777bc63 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest48.java @@ -0,0 +1,73 @@ +/* + * 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.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.sql.test.TestUtils; + +public class OracleSelectTest48 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "select sequence_name from all_sequences " // + + "union select synonym_name" // + + " from all_synonyms us, all_sequences asq" // + + " where asq.sequence_name = us.table_name" // + + " and asq.sequence_owner = us.table_owner"; // + + 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(2, visitor.getTables().size()); + + Assert.assertEquals(5, visitor.getColumns().size()); + + String text = TestUtils.outputOracle(stmt); + + Assert.assertEquals("SELECT sequence_name" // + + "\nFROM all_sequences" // + + "\nUNION" // + + "\nSELECT synonym_name" // + + "\nFROM all_synonyms us, all_sequences asq" // + + "\nWHERE asq.sequence_name = us.table_name" // + + "\n\tAND asq.sequence_owner = us.table_owner;" // + + "\n", text); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("acduser.vw_acd_info", "xzqh"))); + + // Assert.assertTrue(visitor.getOrderByColumns().contains(new TableStat.Column("employees", "last_name"))); + } +} diff --git a/src/test/java/com/alibaba/druid/pool/oracle/DruidDataSourceTest_oracle3.java b/src/test/java/com/alibaba/druid/pool/oracle/DruidDataSourceTest_oracle3.java index 4c2ac8d3d8..fd6cd15a75 100644 --- a/src/test/java/com/alibaba/druid/pool/oracle/DruidDataSourceTest_oracle3.java +++ b/src/test/java/com/alibaba/druid/pool/oracle/DruidDataSourceTest_oracle3.java @@ -22,8 +22,8 @@ public class DruidDataSourceTest_oracle3 extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:sonar"); - dataSource.setUsername("system"); + dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:sonardb"); + dataSource.setUsername("sonar"); dataSource.setPassword("sonar"); dataSource.setInitialSize(1); dataSource.setMaxActive(14);