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" />

Reply via email to