This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 23d1314ac68 Improve Oracle analyze syntax (#28048)
23d1314ac68 is described below

commit 23d1314ac68f09fbf7ab8a0fba115e626597b7e3
Author: niu niu <[email protected]>
AuthorDate: Sat Aug 12 14:41:01 2023 +0800

    Improve Oracle analyze syntax (#28048)
---
 .../oracle/src/main/antlr4/imports/oracle/DDLStatement.g4    |  2 +-
 .../asserts/statement/ddl/impl/AnalyzeStatementAssert.java   |  9 +++++++++
 test/it/parser/src/main/resources/case/ddl/analyze.xml       | 12 ++++++++++++
 .../parser/src/main/resources/sql/supported/ddl/analyze.xml  |  3 +++
 4 files changed, 25 insertions(+), 1 deletion(-)

diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index afe1c3f27b4..42146a3ca46 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -2118,7 +2118,7 @@ partitionExtensionClause
 
 validationClauses
     : VALIDATE REF UPDATE (SET DANGLING TO NULL)?
-    | VALIDATE STRUCTURE (CASCADE (FAST | COMPLETE (OFFLINE | ONLINE) 
intoClause?))?
+    | VALIDATE STRUCTURE (CASCADE (FAST | COMPLETE? (OFFLINE | ONLINE) 
intoClause?)?)?
     ;
 
 intoClause
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/impl/AnalyzeStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/impl/AnalyzeStatementAssert.java
index 2fb1743dc71..fa625788696 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/impl/AnalyzeStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/impl/AnalyzeStatementAssert.java
@@ -25,6 +25,9 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.ind
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.AnalyzeStatementTestCase;
 
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
 /**
  * Analyze statement assert.
  */
@@ -45,13 +48,19 @@ public final class AnalyzeStatementAssert {
     
     private static void assertTables(final SQLCaseAssertContext assertContext, 
final OracleAnalyzeStatement actual, final AnalyzeStatementTestCase expected) {
         if (null != expected.getTable()) {
+            assertNotNull(actual.getTable(), assertContext.getText("Table 
should exist."));
             TableAssert.assertIs(assertContext, actual.getTable(), 
expected.getTable());
+        } else {
+            assertNull(actual.getTable(), assertContext.getText("Table should 
not exist."));
         }
     }
     
     private static void assertIndex(final SQLCaseAssertContext assertContext, 
final OracleAnalyzeStatement actual, final AnalyzeStatementTestCase expected) {
         if (null != expected.getIndex()) {
+            assertNotNull(actual.getIndex(), assertContext.getText("Index 
should exist."));
             IndexAssert.assertIs(assertContext, actual.getIndex(), 
expected.getIndex());
+        } else {
+            assertNull(actual.getIndex(), assertContext.getText("Index should 
not exist."));
         }
     }
 }
diff --git a/test/it/parser/src/main/resources/case/ddl/analyze.xml 
b/test/it/parser/src/main/resources/case/ddl/analyze.xml
index 4638eb6b88b..985b7877003 100644
--- a/test/it/parser/src/main/resources/case/ddl/analyze.xml
+++ b/test/it/parser/src/main/resources/case/ddl/analyze.xml
@@ -58,4 +58,16 @@
     <analyze sql-case-id="analyze_table_update_histogram_using_data" >
         <table name="tbl_datetime" start-index="14" stop-index="24" />
     </analyze>
+    
+    <analyze sql-case-id="analyze_table_validate_structure_cascade1">
+        <table name="emp" start-index="14" stop-index="16" />
+    </analyze>
+    
+    <analyze sql-case-id="analyze_table_validate_structure_cascade2">
+        <table name="emp" start-index="14" stop-index="16" />
+    </analyze>
+    
+    <analyze sql-case-id="analyze_table_validate_structure_cascade3">
+        <table name="employees" start-index="14" stop-index="22" />
+    </analyze>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/ddl/analyze.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/analyze.xml
index d57d4c281ef..405cecb392f 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/analyze.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/analyze.xml
@@ -28,4 +28,7 @@
     <sql-case id="analyze_index" value="ANALYZE INDEX order_index VALIDATE 
STRUCTURE; " db-types="Oracle" />
     <sql-case id="analyze_cluster" value="ANALYZE CLUSTER personnel VALIDATE 
STRUCTURE" db-types="Oracle" />
     <sql-case id="analyze_table_update_histogram_using_data" value="ANALYZE 
TABLE tbl_datetime UPDATE HISTOGRAM ON col1 USING DATA '{&quot;buckets&quot;: 
[[20170216162223, 0.125], [&quot;2017-02-10 08:15:18.000000&quot;, 0.375], 
[&quot;2018-02-12 07:04:18.000000&quot;, 0.5], [&quot;2018-03-21 
21:12:42.000000&quot;, 0.75]], &quot;data-type&quot;: &quot;datetime&quot;, 
&quot;null-values&quot;: 0.25, &quot;collation-id&quot;: 8, 
&quot;sampling-rate&quot;: 1.0, &quot;histogram-type&quot;: &q [...]
+    <sql-case id="analyze_table_validate_structure_cascade1" value="ANALYZE 
TABLE emp VALIDATE STRUCTURE CASCADE ONLINE" db-types="Oracle" />
+    <sql-case id="analyze_table_validate_structure_cascade2" value="ANALYZE 
TABLE emp VALIDATE STRUCTURE CASCADE" db-types="Oracle" />
+    <sql-case id="analyze_table_validate_structure_cascade3" value="ANALYZE 
TABLE employees VALIDATE STRUCTURE CASCADE" db-types="Oracle" />
 </sql-cases>

Reply via email to