From a490be5b6ec643b17b9cf5b34e4c2c9a4d709378 Mon Sep 17 00:00:00 2001 From: bucketli Date: Wed, 22 Feb 2023 10:41:21 +0800 Subject: [PATCH] fix(parser):add CASCADE keywords and more testcase --- .../alibaba/druid/sql/parser/Keywords.java | 1 + .../oracle/alter/OracleAlterTableTest26.java | 89 ++++++++++++++++++- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/alibaba/druid/sql/parser/Keywords.java b/core/src/main/java/com/alibaba/druid/sql/parser/Keywords.java index 7a68455816..78e0dda3d3 100644 --- a/core/src/main/java/com/alibaba/druid/sql/parser/Keywords.java +++ b/core/src/main/java/com/alibaba/druid/sql/parser/Keywords.java @@ -160,6 +160,7 @@ public class Keywords { map.put("INOUT", Token.INOUT); map.put("LIMIT", Token.LIMIT); + map.put("CASCADE", Token.CASCADE); DEFAULT_KEYWORDS = new Keywords(map); diff --git a/core/src/test/java/com/alibaba/druid/bvt/sql/oracle/alter/OracleAlterTableTest26.java b/core/src/test/java/com/alibaba/druid/bvt/sql/oracle/alter/OracleAlterTableTest26.java index b8bbbb3ac0..9e010aeeab 100644 --- a/core/src/test/java/com/alibaba/druid/bvt/sql/oracle/alter/OracleAlterTableTest26.java +++ b/core/src/test/java/com/alibaba/druid/bvt/sql/oracle/alter/OracleAlterTableTest26.java @@ -28,10 +28,8 @@ import java.util.List; public class OracleAlterTableTest26 extends OracleTest { public void test_0() throws Exception { -// String sql = "alter table \"EIFINI_BCS\".\"SHEET_DA\" shrink space CHECK;"; String sql = "alter table mytable enable row movement"; - OracleStatementParser parser = new OracleStatementParser(sql); List statementList = parser.parseStatementList(); SQLStatement stmt = statementList.get(0); @@ -71,4 +69,91 @@ public class OracleAlterTableTest26 extends OracleTest { Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("EIFINI_BCS.SHEET_DA"))); } + + public void test_2() throws Exception { + String sql = "alter table \"EIFINI_BCS\".\"SHEET_DA\" shrink space compact"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("ALTER TABLE \"EIFINI_BCS\".\"SHEET_DA\"\n" + + "\t SHRINK SPACE COMPACT ", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("EIFINI_BCS.SHEET_DA"))); + } + + public void test_3() throws Exception { + String sql = "alter table \"EIFINI_BCS\".\"SHEET_DA\" shrink space CASCADE"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("ALTER TABLE \"EIFINI_BCS\".\"SHEET_DA\"\n" + + "\t SHRINK SPACE CASCADE ", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("EIFINI_BCS.SHEET_DA"))); + } + + public void test_4() throws Exception { + String sql = "alter table \"EIFINI_BCS\".\"SHEET_DA\" shrink space COMPACT CASCADE"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("ALTER TABLE \"EIFINI_BCS\".\"SHEET_DA\"\n" + + "\t SHRINK SPACE COMPACT CASCADE ", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("EIFINI_BCS.SHEET_DA"))); + } + + public void test_5() throws Exception { + String sql = "ALTER TABLE tester.t1 RENAME TO tester.\"BIN$9SBcFDaAYgDgUykdEKzT1Q==$0\""; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("RENAME tester.t1 TO tester.\"BIN$9SBcFDaAYgDgUykdEKzT1Q==$0\"", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("tester.t1"))); + } }