From c8173f2a5bdd097548c88e1cc472fdf89cddd5d7 Mon Sep 17 00:00:00 2001 From: "shaojin.wensj" Date: Sat, 22 Oct 2022 22:50:11 +0800 Subject: [PATCH] sql wall support REFRESH MATERIALIZED VIEW --- .../sql/dialect/oracle/parser/OracleStatementParser.java | 7 +++++++ .../java/com/alibaba/druid/wall/spi/WallVisitorUtils.java | 4 +++- .../bvt/filter/wall/oracle/OracleWallResourceTest.java | 4 ++++ core/src/test/resources/bvt/wall/oracle/oracle-02.sql | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 core/src/test/resources/bvt/wall/oracle/oracle-02.sql diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/core/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index 0b703e5f54..d9be07520a 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -223,6 +223,13 @@ public class OracleStatementParser extends SQLStatementParser { continue; } + if (lexer.identifierEquals("REFRESH")) { + SQLStatement stmt = parseRefresh(); + stmt.setParent(parent); + statementList.add(stmt); + continue; + } + if (lexer.token() == Token.CONTINUE) { lexer.nextToken(); OracleContinueStatement stmt = new OracleContinueStatement(); diff --git a/core/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/core/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index e409a4d5c8..9b288d412d 100644 --- a/core/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/core/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -2643,7 +2643,9 @@ public class WallVisitorUtils { denyMessage = "block statement not allow"; errorCode = ErrorCode.BLOCK_NOT_ALLOW; } else if (x instanceof SQLExplainStatement - || x instanceof MySqlOptimizeStatement) { + || x instanceof MySqlOptimizeStatement + || x instanceof SQLRefreshMaterializedViewStatement + ) { allow = true; errorCode = 0; denyMessage = null; diff --git a/core/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallResourceTest.java b/core/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallResourceTest.java index 7fa0cd4a1a..adce6e5132 100644 --- a/core/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallResourceTest.java +++ b/core/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallResourceTest.java @@ -28,6 +28,10 @@ public class OracleWallResourceTest extends PGTest { exec_test("bvt/wall/oracle/oracle-01.sql"); } + public void test_2() throws Exception { + exec_test("bvt/wall/oracle/oracle-02.sql"); + } + public void exec_test(String resource) throws Exception { String sql = TestUtil.getResource(resource); OracleWallProvider provider = new OracleWallProvider(); diff --git a/core/src/test/resources/bvt/wall/oracle/oracle-02.sql b/core/src/test/resources/bvt/wall/oracle/oracle-02.sql new file mode 100644 index 0000000000..cb9792d7a4 --- /dev/null +++ b/core/src/test/resources/bvt/wall/oracle/oracle-02.sql @@ -0,0 +1 @@ +REFRESH MATERIALIZED VIEW V1 \ No newline at end of file