This is an automated email from the ASF dual-hosted git repository.
terrymanu 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 c973af5854a Remove unused referenced object names from MCP
classification result (#39318)
c973af5854a is described below
commit c973af5854a4f0f398a3c7bb6be1797882e3bd59
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Aug 3 09:58:24 2026 +0800
Remove unused referenced object names from MCP classification result
(#39318)
---
.../tool/handler/execute/ClassificationResult.java | 12 ----------
.../execute/ExplainSQLCandidateValidatorTest.java | 2 +-
.../handler/execute/MCPSQLExecutionFacadeTest.java | 2 +-
.../handler/execute/MCPStatementAnalyzerTest.java | 27 ++++++++++++----------
4 files changed, 17 insertions(+), 26 deletions(-)
diff --git
a/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/ClassificationResult.java
b/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/ClassificationResult.java
index a0d15bf389f..561db7dc5ee 100644
---
a/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/ClassificationResult.java
+++
b/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/ClassificationResult.java
@@ -22,7 +22,6 @@ import lombok.Getter;
import
org.apache.shardingsphere.mcp.support.database.capability.SupportedMCPStatement;
import java.util.Collection;
-import java.util.LinkedHashSet;
import java.util.Optional;
/**
@@ -39,8 +38,6 @@ public final class ClassificationResult {
private final String targetObjectName;
- private final Collection<String> referencedObjectNames;
-
@Getter(AccessLevel.NONE)
private final Collection<SQLStatementObjectName> referencedObjects;
@@ -54,20 +51,11 @@ public final class ClassificationResult {
this.statementType = statementType;
this.normalizedSql = normalizedSql;
targetObjectName = referencedObjects.isEmpty() ? "" :
referencedObjects.iterator().next().getObjectName();
- referencedObjectNames = createReferencedObjectNames(referencedObjects);
this.referencedObjects = referencedObjects;
this.savepointName = savepointName;
this.ruleDistSQL = ruleDistSQL;
}
- private Collection<String> createReferencedObjectNames(final
Collection<SQLStatementObjectName> referencedObjects) {
- Collection<String> result = new
LinkedHashSet<>(referencedObjects.size(), 1F);
- for (SQLStatementObjectName each : referencedObjects) {
- result.add(each.getObjectName());
- }
- return result;
- }
-
Collection<SQLStatementObjectName> getReferencedObjects() {
return referencedObjects;
}
diff --git
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/ExplainSQLCandidateValidatorTest.java
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/ExplainSQLCandidateValidatorTest.java
index 5023d9b3f2b..bb6c0cf875f 100644
---
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/ExplainSQLCandidateValidatorTest.java
+++
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/ExplainSQLCandidateValidatorTest.java
@@ -46,7 +46,7 @@ class ExplainSQLCandidateValidatorTest {
assertThat(actual.getStatementClass(),
is(SupportedMCPStatement.EXPLAIN));
assertThat(actual.getStatementType(), is("EXPLAIN"));
assertThat(actual.getNormalizedSql(), is("EXPLAIN FORMAT=JSON SELECT *
FROM logic_db.foo_orders"));
- assertThat(actual.getReferencedObjectNames(),
contains("logic_db.foo_orders"));
+
assertThat(actual.getReferencedObjects().stream().map(SQLStatementObjectName::getObjectName).toList(),
contains("logic_db.foo_orders"));
}
@Test
diff --git
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/MCPSQLExecutionFacadeTest.java
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/MCPSQLExecutionFacadeTest.java
index 4b45acd9837..5bfbef12945 100644
---
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/MCPSQLExecutionFacadeTest.java
+++
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/MCPSQLExecutionFacadeTest.java
@@ -388,7 +388,7 @@ class MCPSQLExecutionFacadeTest {
ArgumentCaptor<ClassificationResult> classificationCaptor =
ArgumentCaptor.forClass(ClassificationResult.class);
verify(statementExecutor).execute(eq(request),
classificationCaptor.capture(), eq(capability));
assertThat(classificationCaptor.getValue().getStatementClass(),
is(SupportedMCPStatement.EXPLAIN));
- assertThat(classificationCaptor.getValue().getReferencedObjectNames(),
contains("orders"));
+
assertThat(classificationCaptor.getValue().getReferencedObjects().stream().map(SQLStatementObjectName::getObjectName).toList(),
contains("orders"));
verifyNoInteractions(transactionExecutor);
}
diff --git
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/MCPStatementAnalyzerTest.java
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/MCPStatementAnalyzerTest.java
index 76842bb9220..cafec6749ed 100644
---
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/MCPStatementAnalyzerTest.java
+++
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/tool/handler/execute/MCPStatementAnalyzerTest.java
@@ -30,7 +30,6 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
-import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
@@ -87,75 +86,79 @@ class MCPStatementAnalyzerTest {
void assertAnalyzeReferencedObjects() {
ClassificationResult actual = analyzer.analyze(
"SELECT * FROM logic_db.orders JOIN other_db.order_items ON
orders.order_id = order_items.order_id", createCapability("MySQL"));
- assertThat(actual.getReferencedObjectNames(),
contains("logic_db.orders", "other_db.order_items"));
+ assertThat(getObjectNames(actual), contains("logic_db.orders",
"other_db.order_items"));
}
@ParameterizedTest(name = "{0}")
@MethodSource("referencedObjectCases")
void assertAnalyzeExactReferencedObjects(final String name, final String
databaseType, final String sql, final List<String> expected) {
- assertThat(new ArrayList<>(analyzer.analyze(sql,
createCapability(databaseType)).getReferencedObjectNames()), is(expected));
+ assertThat(getObjectNames(analyzer.analyze(sql,
createCapability(databaseType))), is(expected));
}
@Test
void assertAnalyzeCommonTableExpressionReferences() {
ClassificationResult actual = analyzer.analyze(
"WITH order_result AS (SELECT * FROM other_db.orders) SELECT *
FROM order_result", createCapability("PostgreSQL"));
- assertThat(actual.getReferencedObjectNames(),
contains("other_db.orders"));
+ assertThat(getObjectNames(actual), contains("other_db.orders"));
}
@Test
void assertAnalyzeDMLReferences() {
ClassificationResult actual = analyzer.analyze(
"UPDATE logic_db.orders SET status = 'DONE' FROM
other_db.order_items", createCapability("PostgreSQL"));
- assertThat(actual.getReferencedObjectNames(),
contains("logic_db.orders", "other_db.order_items"));
+ assertThat(getObjectNames(actual), contains("logic_db.orders",
"other_db.order_items"));
}
@Test
void assertAnalyzeAlterViewReferences() {
ClassificationResult actual = analyzer.analyze(
"ALTER VIEW logic_db.active_orders AS SELECT * FROM
other_db.orders", createCapability("MySQL"));
- assertThat(actual.getReferencedObjectNames(),
contains("logic_db.active_orders", "other_db.orders"));
+ assertThat(getObjectNames(actual), contains("logic_db.active_orders",
"other_db.orders"));
}
@Test
void assertAnalyzeSameNamedDMLReferences() {
ClassificationResult actual = analyzer.analyze(
"UPDATE orders SET status = source.status FROM other_db.orders
source", createCapability("PostgreSQL"));
- assertThat(actual.getReferencedObjectNames(), contains("orders",
"other_db.orders"));
+ assertThat(getObjectNames(actual), contains("orders",
"other_db.orders"));
assertThat(actual.getTargetObjectName().orElse(""), is("orders"));
}
@Test
void assertAnalyzeQuotedTableQueryIdentifier() {
ClassificationResult actual = analyzer.analyze("CREATE TABLE
order_archive AS TABLE `other.db.orders`", createCapability("MySQL"));
- assertThat(actual.getReferencedObjectNames(),
contains("order_archive", "other.db.orders"));
+ assertThat(getObjectNames(actual), contains("order_archive",
"other.db.orders"));
assertFalse(actual.getReferencedObjects().stream().filter(each ->
"other.db.orders".equals(each.getObjectName())).findFirst().orElseThrow().isQualified());
}
@Test
void assertAnalyzeDCLReference() {
ClassificationResult actual = analyzer.analyze("GRANT SELECT ON
other_db.orders TO PUBLIC", createCapability("MySQL"));
- assertThat(actual.getReferencedObjectNames(),
contains("other_db.orders"));
+ assertThat(getObjectNames(actual), contains("other_db.orders"));
}
@Test
void assertAnalyzeGlobalDCLReference() {
ClassificationResult actual = analyzer.analyze("GRANT SELECT ON *.* TO
PUBLIC", createCapability("MySQL"));
- assertThat(actual.getReferencedObjectNames(), contains("*.*"));
+ assertThat(getObjectNames(actual), contains("*.*"));
}
@ParameterizedTest(name = "{0}")
@MethodSource("dclNamespaceCases")
void assertAnalyzeDCLNamespaceReference(final String name, final String
sql) {
ClassificationResult actual = analyzer.analyze(sql,
createCapability("PostgreSQL"));
- assertThat(actual.getReferencedObjectNames(), contains("other_db"));
+ assertThat(getObjectNames(actual), contains("other_db"));
assertTrue(actual.getReferencedObjects().iterator().next().isNamespaceTarget());
}
@Test
void assertAnalyzeQualifiedFunctionReference() {
ClassificationResult actual = analyzer.analyze("SELECT
other_db.foo_refresh_orders()", createCapability("MySQL"));
- assertThat(actual.getReferencedObjectNames(),
contains("other_db.foo_refresh_orders"));
+ assertThat(getObjectNames(actual),
contains("other_db.foo_refresh_orders"));
+ }
+
+ private List<String> getObjectNames(final ClassificationResult
classificationResult) {
+ return
classificationResult.getReferencedObjects().stream().map(SQLStatementObjectName::getObjectName).toList();
}
@Test