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 '{"buckets":
[[20170216162223, 0.125], ["2017-02-10 08:15:18.000000", 0.375],
["2018-02-12 07:04:18.000000", 0.5], ["2018-03-21
21:12:42.000000", 0.75]], "data-type": "datetime",
"null-values": 0.25, "collation-id": 8,
"sampling-rate": 1.0, "histogram-type": &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>