This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 e1dff9dba43 Improve Oracle alter index syntax (#27539)
e1dff9dba43 is described below
commit e1dff9dba4399c9086d78f7c23361fcf8e062e9c
Author: niu niu <[email protected]>
AuthorDate: Fri Jul 28 21:49:56 2023 +0800
Improve Oracle alter index syntax (#27539)
* Improve Oracle alter index syntax
* Supplementary SQL testing
---
.../src/main/antlr4/imports/oracle/BaseRule.g4 | 4 ++
.../src/main/antlr4/imports/oracle/DDLStatement.g4 | 68 +++++++++++++++++++++-
.../main/antlr4/imports/oracle/OracleKeyword.g4 | 4 ++
.../resources/case/ddl/alter-flashback-archive.xml | 1 +
.../src/main/resources/case/ddl/alter-index.xml | 8 +++
.../sql/supported/ddl/alter-flashback-archive.xml | 1 +
.../resources/sql/supported/ddl/alter-index.xml | 2 +
7 files changed, 86 insertions(+), 2 deletions(-)
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index 4dfbf983324..fdfd5f850f8 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -527,6 +527,10 @@ containerName
: identifier
;
+newName
+ : identifier
+ ;
+
partitionName
: identifier
;
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 397a577b717..59b8c16965f 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
@@ -475,7 +475,13 @@ objectProperties
;
alterIndexInformationClause
- : rebuildClause ((DEFERRED | IMMEDIATE) | INVALIDATION)?
+ : (deallocateUnusedClause
+ | allocateExtentClause
+ | shrinkClause
+ | parallelClause
+ | loggingClause
+ | partialIndexClause)+
+ | rebuildClause ((DEFERRED | IMMEDIATE) | INVALIDATION)?
| parallelClause
| PARAMETERS LP_ odciParameters RP_
| COMPILE
@@ -486,12 +492,66 @@ alterIndexInformationClause
| COALESCE CLEANUP? ONLY? parallelClause?
| ((MONITORING | NOMONITORING) USAGE)
| UPDATE BLOCK REFERENCES
+ | alterIndexPartitioning
;
renameIndexClause
: (RENAME TO indexName)?
;
-
+
+alterIndexPartitioning
+ : modifyIndexDefaultAttrs
+ | addHashIndexPartition
+ | modifyIndexPartition
+ | renameIndexPartition
+ | dropIndexPartition
+ | splitIndexPartition
+ | coalesceIndexPartition
+ | modifyIndexsubPartition
+ ;
+
+modifyIndexDefaultAttrs
+ : MODIFY DEFAULT ATTRIBUTES (FOR PARTITION partitionName)?
(physicalAttributesClause | TABLESPACE (tablespaceName | DEFAULT) |
loggingClause)+
+ ;
+
+addHashIndexPartition
+ : ADD PARTITION partitionName? (TABLESPACE tablespaceName)?
indexCompression? parallelClause?
+ ;
+
+modifyIndexPartition
+ : MODIFY PARTITION partitionName
+ ( (deallocateUnusedClause | allocateExtentClause |
physicalAttributesClause | loggingClause | indexCompression)+
+ | PARAMETERS LP_ odciParameters RP_
+ | COALESCE (CLEANUP | ONLY | parallelClause)?
+ | UPDATE BLOCK REFERENCES
+ | UNUSABLE
+ )
+ ;
+
+renameIndexPartition
+ : RENAME (PARTITION partitionName | SUBPARTITION subpartitionName) TO
newName
+ ;
+
+dropIndexPartition
+ : DROP PARTITION partitionName
+ ;
+
+splitIndexPartition
+ : SPLIT PARTITION partitionName AT LP_ literals (COMMA_ literals)* RP_
(INTO LP_ indexPartitionDescription COMMA_ indexPartitionDescription RP_)?
(parallelClause)?
+ ;
+
+indexPartitionDescription
+ : PARTITION (partitionName ((segmentAttributesClause | indexCompression)+
| PARAMETERS LP_ odciParameters RP_)? (USABLE | UNUSABLE)?)?
+ ;
+
+coalesceIndexPartition
+ : COALESCE PARTITION parallelClause?
+ ;
+
+modifyIndexsubPartition
+ : MODIFY SUBPARTITION subpartitionName (UNUSABLE | allocateExtentClause |
deallocateUnusedClause)
+ ;
+
objectTableSubstitution
: NOT? SUBSTITUTABLE AT ALL LEVELS
;
@@ -580,6 +640,10 @@ loggingClause
: LOGGING | NOLOGGING | FILESYSTEM_LIKE_LOGGING
;
+partialIndexClause
+ : INDEXING (PARTIAL | FULL)
+ ;
+
storageClause
: STORAGE LP_
(INITIAL sizeClause
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
index 8ad75b72a80..9f4cd40d5b4 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
@@ -5360,6 +5360,10 @@ PARITY
:P A R I T Y
;
+PARTIAL
+ : P A R T I A L
+ ;
+
PARTIALLY
:P A R T I A L L Y
;
diff --git
a/test/it/parser/src/main/resources/case/ddl/alter-flashback-archive.xml
b/test/it/parser/src/main/resources/case/ddl/alter-flashback-archive.xml
index f7a32eaaef1..00066f50c81 100644
--- a/test/it/parser/src/main/resources/case/ddl/alter-flashback-archive.xml
+++ b/test/it/parser/src/main/resources/case/ddl/alter-flashback-archive.xml
@@ -25,4 +25,5 @@
<alter-flashback-archive
sql-case-id="alter_flashback_archive_no_optimize_data" />
<alter-flashback-archive
sql-case-id="alter_flashback_archive_modify_retention_month" />
<alter-flashback-archive
sql-case-id="alter_flashback_archive_modify_retention_year" />
+ <alter-flashback-archive
sql-case-id="alter_flashback_archive_purge_before_timestamp_systimestamp_interval"
/>
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/ddl/alter-index.xml
b/test/it/parser/src/main/resources/case/ddl/alter-index.xml
index 3f385b4b9cc..ab6edc65118 100644
--- a/test/it/parser/src/main/resources/case/ddl/alter-index.xml
+++ b/test/it/parser/src/main/resources/case/ddl/alter-index.xml
@@ -81,6 +81,14 @@
<alter-index sql-case-id="alter_index_parameters_odci">
<index name="ResumeTextIndex" start-index="12" stop-index="26" />
</alter-index>
+
+ <alter-index sql-case-id="alter_index_modify_partition_unusable">
+ <index name="cost_ix" start-index="12" stop-index="18" />
+ </alter-index>
+
+ <alter-index sql-case-id="alter_index_drop_partition">
+ <index name="cost_ix" start-index="12" stop-index="18" />
+ </alter-index>
<alter-index sql-case-id="alter_index_alter_column" />
<alter-index sql-case-id="alter_index_with_schema" />
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/alter-flashback-archive.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/alter-flashback-archive.xml
index b7a33f3b0f5..886df2da417 100644
---
a/test/it/parser/src/main/resources/sql/supported/ddl/alter-flashback-archive.xml
+++
b/test/it/parser/src/main/resources/sql/supported/ddl/alter-flashback-archive.xml
@@ -25,4 +25,5 @@
<sql-case id="alter_flashback_archive_no_optimize_data" value="ALTER
FLASHBACK ARCHIVE test_archive NO OPTIMIZE DATA;" db-types="Oracle" />
<sql-case id="alter_flashback_archive_modify_retention_month" value="ALTER
FLASHBACK ARCHIVE test_archive1 MODIFY RETENTION 1 MONTH" db-types="Oracle" />
<sql-case id="alter_flashback_archive_modify_retention_year" value="ALTER
FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR" db-types="Oracle" />
+ <sql-case
id="alter_flashback_archive_purge_before_timestamp_systimestamp_interval"
value="ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP -
INTERVAL '1' DAY)" db-types="Oracle" />
</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/alter-index.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/alter-index.xml
index 4219bebc61b..6a69e529721 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/alter-index.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/alter-index.xml
@@ -35,6 +35,8 @@
<sql-case id="alter_index_with_quota_bracket" value="ALTER INDEX
[order_index] ON [t_order] REBUILD" db-types="SQLServer" />
<sql-case id="alter_index_with_reorganize" value="ALTER INDEX order_index
ON t_order REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON)" db-types="SQLServer"
/>
<sql-case id="alter_index_parameters_odci" value="ALTER INDEX
ResumeTextIndex PARAMETERS (':Ignore on')" db-types="Oracle" />
+ <sql-case id="alter_index_modify_partition_unusable" value="ALTER INDEX
cost_ix MODIFY PARTITION p2 UNUSABLE" db-types="Oracle" />
+ <sql-case id="alter_index_drop_partition" value="ALTER INDEX cost_ix DROP
PARTITION p1" db-types="Oracle" />
<sql-case id="alter_index_set_tablespace" value="ALTER INDEX distributors
SET TABLESPACE fasttablespace" db-types="PostgreSQL,openGauss" />
<sql-case id="alter_index_alter_column" value="ALTER INDEX t_order_idx
ALTER COLUMN 3 SET STATISTICS 1000" db-types="PostgreSQL,openGauss" />
<sql-case id="alter_index_with_schema" value="ALTER INDEX
public.t_order_idx ALTER COLUMN 3 SET STATISTICS 1000"
db-types="PostgreSQL,openGauss" />