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