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

zhonghongsheng 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 9679819011a Extract tables from create index and drop index (#37809)
9679819011a is described below

commit 9679819011a915abc8651160316737563c3caa57
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Jan 22 19:22:06 2026 +0800

    Extract tables from create index and drop index (#37809)
---
 .../statement/core/extractor/TableExtractor.java   | 26 ++++++++++++++++++++++
 .../core/extractor/TableExtractorTest.java         | 22 ++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractor.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractor.java
index 37c6af42473..63127caef1c 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractor.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractor.java
@@ -59,6 +59,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.CreateIndexStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.DropIndexStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.CreateTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.CreateViewStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.DeleteStatement;
@@ -402,6 +404,10 @@ public final class TableExtractor {
             extractTablesFromDelete((DeleteStatement) sqlStatement);
         } else if (sqlStatement instanceof CreateViewStatement) {
             extractTablesFromCreateViewStatement((CreateViewStatement) 
sqlStatement);
+        } else if (sqlStatement instanceof CreateIndexStatement) {
+            extractTablesFromCreateIndexStatement((CreateIndexStatement) 
sqlStatement);
+        } else if (sqlStatement instanceof DropIndexStatement) {
+            extractTablesFromDropIndexStatement((DropIndexStatement) 
sqlStatement);
         }
     }
     
@@ -415,4 +421,24 @@ public final class TableExtractor {
         rewriteTables.add(createViewStatement.getView());
         extractTablesFromSelect(createViewStatement.getSelect());
     }
+    
+    /**
+     * Extract table that should be rewritten from create index statement.
+     *
+     * @param createIndexStatement create index statement
+     */
+    public void extractTablesFromCreateIndexStatement(final 
CreateIndexStatement createIndexStatement) {
+        if (null != createIndexStatement.getTable()) {
+            extractTablesFromTableSegment(createIndexStatement.getTable());
+        }
+    }
+    
+    /**
+     * Extract table that should be rewritten from drop index statement.
+     *
+     * @param dropIndexStatement drop index statement
+     */
+    public void extractTablesFromDropIndexStatement(final DropIndexStatement 
dropIndexStatement) {
+        
dropIndexStatement.getSimpleTable().ifPresent(this::extractTablesFromTableSegment);
+    }
 }
diff --git 
a/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractorTest.java
 
b/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractorTest.java
index 1ccb8f87edf..97bafbe9e25 100644
--- 
a/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractorTest.java
+++ 
b/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractorTest.java
@@ -43,6 +43,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.CreateIndexStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.DropIndexStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.CreateTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.InsertStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
@@ -235,4 +237,24 @@ class TableExtractorTest {
         assertThat(tableExtractor.getJoinTables().size(), is(1));
         assertThat(tableExtractor.getJoinTables().iterator().next(), 
is(joinTableSegment));
     }
+    
+    @Test
+    void assertExtractTablesFromCreateIndexStatement() {
+        CreateIndexStatement createIndexStatement = 
mock(CreateIndexStatement.class);
+        SimpleTableSegment tableSegment = new SimpleTableSegment(new 
TableNameSegment(30, 40, new IdentifierValue("t_order")));
+        when(createIndexStatement.getTable()).thenReturn(tableSegment);
+        
tableExtractor.extractTablesFromCreateIndexStatement(createIndexStatement);
+        assertThat(tableExtractor.getRewriteTables().size(), is(1));
+        
assertTableSegment(tableExtractor.getRewriteTables().iterator().next(), 30, 40, 
"t_order");
+    }
+    
+    @Test
+    void assertExtractTablesFromDropIndexStatement() {
+        DropIndexStatement dropIndexStatement = mock(DropIndexStatement.class);
+        SimpleTableSegment tableSegment = new SimpleTableSegment(new 
TableNameSegment(30, 40, new IdentifierValue("t_order")));
+        
when(dropIndexStatement.getSimpleTable()).thenReturn(Optional.of(tableSegment));
+        tableExtractor.extractTablesFromDropIndexStatement(dropIndexStatement);
+        assertThat(tableExtractor.getRewriteTables().size(), is(1));
+        
assertTableSegment(tableExtractor.getRewriteTables().iterator().next(), 30, 40, 
"t_order");
+    }
 }

Reply via email to