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");
+ }
}