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

zhangliang 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 688d24cca04 Refactor ExplainStatementContext (#35719)
688d24cca04 is described below

commit 688d24cca04e3bdc130ee88d0655464b02228ea2
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jun 15 22:01:46 2025 +0800

    Refactor ExplainStatementContext (#35719)
    
    * Rename ExplainStatementContext.explainableSQLStatementContext
    
    * Refactor ExplainStatementContext
    
    * Refactor ExplainStatementContext
    
    * Refactor ExplainStatementContext
    
    * Refactor ExplainStatementContext
---
 .../type/dal/ExplainStatementContext.java          | 31 ++++++-------------
 .../type/dal/ExplainStatementContextTest.java      | 36 ++++++++++++++++++----
 .../core/statement/dal/ExplainStatement.java       | 15 ++++++++-
 3 files changed, 54 insertions(+), 28 deletions(-)

diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContext.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContext.java
index fd08d542c9e..cf4674f870d 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContext.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContext.java
@@ -19,44 +19,33 @@ package 
org.apache.shardingsphere.infra.binder.context.statement.type.dal;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContextFactory;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import 
org.apache.shardingsphere.sql.parser.statement.core.extractor.TableExtractor;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ExplainStatement;
 
-import java.util.Collection;
 import java.util.List;
 
 /**
  * Explain statement context.
  */
 @Getter
-public final class ExplainStatementContext extends CommonSQLStatementContext {
+public final class ExplainStatementContext implements SQLStatementContext {
+    
+    private final DatabaseType databaseType;
+    
+    private final ExplainStatement sqlStatement;
     
     private final TablesContext tablesContext;
     
     private final SQLStatementContext explainableSQLStatementContext;
     
-    public ExplainStatementContext(final ShardingSphereMetaData metaData, 
final DatabaseType databaseType, final ExplainStatement sqlStatement, final 
List<Object> params,
-                                   final String currentDatabaseName) {
-        super(databaseType, sqlStatement);
-        tablesContext = new 
TablesContext(extractTablesFromExplain(sqlStatement));
+    public ExplainStatementContext(final ShardingSphereMetaData metaData,
+                                   final DatabaseType databaseType, final 
ExplainStatement sqlStatement, final List<Object> params, final String 
currentDatabaseName) {
+        this.databaseType = databaseType;
+        this.sqlStatement = sqlStatement;
+        tablesContext = new TablesContext(sqlStatement.getTables());
         explainableSQLStatementContext = 
SQLStatementContextFactory.newInstance(metaData, databaseType, 
sqlStatement.getExplainableSQLStatement(), params, currentDatabaseName);
     }
-    
-    private Collection<SimpleTableSegment> extractTablesFromExplain(final 
ExplainStatement sqlStatement) {
-        TableExtractor extractor = new TableExtractor();
-        // TODO extract table from declare, execute, createMaterializedView, 
refreshMaterializedView
-        
extractor.extractTablesFromSQLStatement(sqlStatement.getExplainableSQLStatement());
-        return extractor.getRewriteTables();
-    }
-    
-    @Override
-    public ExplainStatement getSqlStatement() {
-        return (ExplainStatement) super.getSqlStatement();
-    }
 }
diff --git 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContextTest.java
 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContextTest.java
index 0453e7f9a0f..c8d2fee9866 100644
--- 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContextTest.java
+++ 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContextTest.java
@@ -17,28 +17,52 @@
 
 package org.apache.shardingsphere.infra.binder.context.statement.type.dal;
 
+import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContextFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ExplainStatement;
+import org.apache.shardingsphere.test.mock.AutoMockExtension;
+import org.apache.shardingsphere.test.mock.StaticMockSettings;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
 
 import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@ExtendWith(AutoMockExtension.class)
+@StaticMockSettings(SQLStatementContextFactory.class)
 class ExplainStatementContextTest {
     
+    private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
+    
+    @Mock
+    private ShardingSphereMetaData metaData;
+    
+    @Mock
+    private SQLStatement explainableSQLStatement;
+    
+    @Mock
+    private SQLStatementContext explainableSQLStatementContext;
+    
+    @BeforeEach
+    void setUp() {
+        when(SQLStatementContextFactory.newInstance(metaData, databaseType, 
explainableSQLStatement, Collections.emptyList(), 
"foo_db")).thenReturn(explainableSQLStatementContext);
+    }
+    
     @Test
     void assertNewInstance() {
-        ExplainStatement explainStatement = mock(ExplainStatement.class);
-        SQLStatement sqlStatement = mock(SQLStatement.class);
-        
when(explainStatement.getExplainableSQLStatement()).thenReturn(sqlStatement);
-        ExplainStatementContext actual = new 
ExplainStatementContext(mock(ShardingSphereMetaData.class), mock(), 
explainStatement, Collections.emptyList(), "foo_db");
+        ExplainStatement explainStatement = new 
ExplainStatement(explainableSQLStatement);
+        ExplainStatementContext actual = new ExplainStatementContext(metaData, 
databaseType, explainStatement, Collections.emptyList(), "foo_db");
         assertThat(actual.getSqlStatement(), is(explainStatement));
-        assertThat(actual.getSqlStatement().getExplainableSQLStatement(), 
is(sqlStatement));
         assertThat(actual.getTablesContext().getSimpleTables(), 
is(Collections.emptyList()));
+        assertThat(actual.getExplainableSQLStatementContext(), 
is(explainableSQLStatementContext));
     }
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ExplainStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ExplainStatement.java
index 09743104ccc..f70db5d56e3 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ExplainStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ExplainStatement.java
@@ -19,15 +19,28 @@ package 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.extractor.TableExtractor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.TableAvailable;
+
+import java.util.Collection;
 
 /**
  * Explain statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class ExplainStatement extends AbstractSQLStatement implements 
DALStatement {
+public final class ExplainStatement extends AbstractSQLStatement implements 
DALStatement, TableAvailable {
     
     private final SQLStatement explainableSQLStatement;
+    
+    @Override
+    public Collection<SimpleTableSegment> getTables() {
+        TableExtractor extractor = new TableExtractor();
+        // TODO extract table from declare, execute, createMaterializedView, 
refreshMaterializedView
+        extractor.extractTablesFromSQLStatement(explainableSQLStatement);
+        return extractor.getRewriteTables();
+    }
 }

Reply via email to