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 a0a90226635 Remove unused MCP information schema column lookup (#39057)
a0a90226635 is described below
commit a0a90226635f49cd0ba09c382c1ff1fc3a4dd5b2
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jul 8 19:57:35 2026 +0800
Remove unused MCP information schema column lookup (#39057)
---
.../core/workflow/WorkflowProxyQueryService.java | 53 ----------------------
.../workflow/WorkflowProxyQueryServiceTest.java | 47 -------------------
.../capability/MCPDatabaseCapabilityOption.java | 9 ----
.../database/capability/MCPDatabaseDialect.java | 9 ----
.../MariaDBMCPDatabaseCapabilityOption.java | 4 --
.../dialect/MySQLMCPDatabaseCapabilityOption.java | 5 --
.../OpenGaussMCPDatabaseCapabilityOption.java | 5 --
.../PostgreSQLMCPDatabaseCapabilityOption.java | 5 --
.../database/spi/MCPFeatureQueryFacade.java | 12 -----
.../capability/MCPDatabaseDialectTest.java | 14 ------
10 files changed, 163 deletions(-)
diff --git
a/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/workflow/WorkflowProxyQueryService.java
b/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/workflow/WorkflowProxyQueryService.java
index 47ca1992957..192680e7cab 100644
---
a/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/workflow/WorkflowProxyQueryService.java
+++
b/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/workflow/WorkflowProxyQueryService.java
@@ -23,7 +23,6 @@ import
org.apache.shardingsphere.mcp.api.protocol.exception.MCPUnavailableExcept
import org.apache.shardingsphere.mcp.core.session.MCPSessionManager;
import
org.apache.shardingsphere.mcp.support.database.capability.MCPDatabaseCapability;
import
org.apache.shardingsphere.mcp.support.database.capability.MCPDatabaseCapabilityProvider;
-import
org.apache.shardingsphere.mcp.support.database.capability.MCPDatabaseDialect;
import
org.apache.shardingsphere.mcp.support.database.metadata.jdbc.RuntimeDatabaseConfiguration;
import
org.apache.shardingsphere.mcp.support.database.spi.MCPFeatureQueryFacade;
import org.apache.shardingsphere.mcp.support.workflow.service.WorkflowSQLUtils;
@@ -34,14 +33,10 @@ import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
-import java.util.Collection;
import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
/**
* Direct query service for Proxy-backed workflow reads.
@@ -103,54 +98,6 @@ public final class WorkflowProxyQueryService implements
MCPFeatureQueryFacade {
}
}
- @Override
- public Set<String> queryInformationSchemaColumnNames(final String
databaseName, final String schemaName, final String tableName, final
Collection<String> columnNames) {
- WorkflowSQLUtils.checkSupportedIdentifier("database", databaseName);
- WorkflowSQLUtils.checkSupportedIdentifier("schema", schemaName);
- WorkflowSQLUtils.checkSupportedIdentifier("table", tableName);
- String actualDatabaseName =
WorkflowSQLUtils.normalizeIdentifier(databaseName);
- String actualSchemaName =
WorkflowSQLUtils.normalizeIdentifier(schemaName);
- if (columnNames.isEmpty()) {
- return Set.of();
- }
- StringBuilder result = new StringBuilder(columnNames.size() * 8);
- for (String each : columnNames) {
- WorkflowSQLUtils.checkSupportedIdentifier("column", each);
- if (!result.isEmpty()) {
- result.append(", ");
- }
-
result.append('\'').append(WorkflowSQLUtils.escapeLiteral(WorkflowSQLUtils.normalizeIdentifier(each))).append('\'');
- }
- String sql = createInformationSchemaColumnQuery(actualDatabaseName,
actualSchemaName, WorkflowSQLUtils.normalizeIdentifier(tableName),
result.toString());
- Set<String> actualResult = new LinkedHashSet<>(columnNames.size(), 1F);
- for (Map<String, Object> each : query(actualDatabaseName, "", sql)) {
- String actualColumnName =
Objects.toString(each.get("column_name"), "").trim();
- if (!actualColumnName.isEmpty()) {
- actualResult.add(actualColumnName);
- }
- }
- return actualResult;
- }
-
- private String createInformationSchemaColumnQuery(final String
databaseName, final String schemaName, final String tableName, final String
columnList) {
- if (!shouldFilterBySchema(databaseName, schemaName)) {
- return String.format("SELECT DISTINCT column_name FROM
information_schema.columns WHERE table_name = '%s' AND column_name IN (%s)",
- WorkflowSQLUtils.escapeLiteral(tableName), columnList);
- }
- String actualSchemaName = normalize(schemaName);
- return String.format("SELECT DISTINCT column_name FROM
information_schema.columns WHERE table_schema = '%s' AND table_name = '%s' AND
column_name IN (%s)",
- WorkflowSQLUtils.escapeLiteral(actualSchemaName),
WorkflowSQLUtils.escapeLiteral(tableName), columnList);
- }
-
- private boolean shouldFilterBySchema(final String databaseName, final
String schemaName) {
- String actualSchemaName = normalize(schemaName);
- if (actualSchemaName.isEmpty()) {
- return false;
- }
- String databaseType =
databaseCapabilityProvider.provide(databaseName).map(MCPDatabaseCapability::getDatabaseType).orElse("");
- return
MCPDatabaseDialect.of(databaseType).isInformationSchemaColumnSchemaFilterRequired();
- }
-
private Connection openConnection(final String databaseName) throws
SQLException {
RuntimeDatabaseConfiguration runtimeDatabaseConfig =
sessionManager.getTransactionResourceManager().getRuntimeDatabases().get(databaseName);
if (null == runtimeDatabaseConfig) {
diff --git
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/workflow/WorkflowProxyQueryServiceTest.java
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/workflow/WorkflowProxyQueryServiceTest.java
index 6febca0d3b6..bf9b58f6b2e 100644
---
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/workflow/WorkflowProxyQueryServiceTest.java
+++
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/workflow/WorkflowProxyQueryServiceTest.java
@@ -22,8 +22,6 @@ import
org.apache.shardingsphere.mcp.support.database.metadata.jdbc.RuntimeDatab
import
org.apache.shardingsphere.mcp.api.protocol.exception.MCPUnavailableException;
import org.apache.shardingsphere.mcp.core.session.MCPSessionManager;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.ValueSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
@@ -35,7 +33,6 @@ import java.sql.Types;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@@ -180,50 +177,6 @@ class WorkflowProxyQueryServiceTest {
verify(connection).setSchema("public");
}
- @Test
- void
assertQueryInformationSchemaColumnNamesSkipsSchemaFilterWhenSchemaIsEmpty()
throws SQLException {
- RuntimeDatabaseConfiguration runtimeDatabaseConfig =
mock(RuntimeDatabaseConfiguration.class);
- Connection connection = mock(Connection.class);
- Statement statement = mock(Statement.class);
- ResultSet resultSet = mock(ResultSet.class);
- ResultSetMetaData resultSetMetaData = mock(ResultSetMetaData.class);
-
when(runtimeDatabaseConfig.openConnection("logic_db")).thenReturn(connection);
- when(connection.createStatement()).thenReturn(statement);
- when(statement.executeQuery("SELECT DISTINCT column_name FROM
information_schema.columns WHERE table_name = 'orders' "
- + "AND column_name IN ('status_cipher',
'status_assisted_query')"))
- .thenReturn(resultSet);
- when(resultSet.getMetaData()).thenReturn(resultSetMetaData);
- when(resultSetMetaData.getColumnCount()).thenReturn(1);
- when(resultSetMetaData.getColumnLabel(1)).thenReturn("COLUMN_NAME");
- when(resultSet.next()).thenReturn(true, true, false);
- when(resultSet.getObject(1)).thenReturn("status_cipher",
"status_assisted_query");
- WorkflowProxyQueryService service = createService(Map.of("logic_db",
runtimeDatabaseConfig));
- Set<String> actual =
service.queryInformationSchemaColumnNames("logic_db", "", "orders",
List.of("status_cipher", "status_assisted_query"));
- assertThat(actual, is(Set.of("status_cipher",
"status_assisted_query")));
- }
-
- @ParameterizedTest(name = "{0}")
- @ValueSource(strings = {"MySQL", "MariaDB", "PostgreSQL", "openGauss"})
- void assertQueryInformationSchemaColumnNamesUsesSchemaFilter(final String
databaseType) throws SQLException {
- RuntimeDatabaseConfiguration runtimeDatabaseConfig =
mock(RuntimeDatabaseConfiguration.class);
- Connection connection = mock(Connection.class);
- Statement statement = mock(Statement.class);
- ResultSet resultSet = mock(ResultSet.class);
- ResultSetMetaData resultSetMetaData = mock(ResultSetMetaData.class);
-
when(runtimeDatabaseConfig.openConnection("logic_db")).thenReturn(connection);
- when(connection.createStatement()).thenReturn(statement);
- when(statement.executeQuery("SELECT DISTINCT column_name FROM
information_schema.columns WHERE table_schema = 'public' AND table_name =
'orders' "
- + "AND column_name IN
('status_cipher')")).thenReturn(resultSet);
- when(resultSet.getMetaData()).thenReturn(resultSetMetaData);
- when(resultSetMetaData.getColumnCount()).thenReturn(1);
- when(resultSetMetaData.getColumnLabel(1)).thenReturn("COLUMN_NAME");
- when(resultSet.next()).thenReturn(true, false);
- when(resultSet.getObject(1)).thenReturn("status_cipher");
- WorkflowProxyQueryService service = createService(Map.of("logic_db",
runtimeDatabaseConfig), databaseType);
- Set<String> actual =
service.queryInformationSchemaColumnNames("logic_db", "public", "orders",
List.of("status_cipher"));
- assertThat(actual, is(Set.of("status_cipher")));
- }
-
private WorkflowProxyQueryService createService(final Map<String,
RuntimeDatabaseConfiguration> runtimeDatabases) {
return createService(runtimeDatabases, "MySQL");
}
diff --git
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseCapabilityOption.java
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseCapabilityOption.java
index df833532134..b265a58a5fe 100644
---
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseCapabilityOption.java
+++
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseCapabilityOption.java
@@ -128,15 +128,6 @@ public interface MCPDatabaseCapabilityOption extends
TypedSPI {
return Optional.empty();
}
- /**
- * Judge whether information_schema column lookup should filter
table_schema.
- *
- * @return whether information_schema column lookup should filter
table_schema
- */
- default boolean isInformationSchemaColumnSchemaFilterRequired() {
- return false;
- }
-
@Override
String getType();
}
diff --git
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseDialect.java
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseDialect.java
index 01d33f9c59a..ba92688fcc1 100644
---
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseDialect.java
+++
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseDialect.java
@@ -146,15 +146,6 @@ public final class MCPDatabaseDialect {
return option.flatMap(MCPDatabaseCapabilityOption::getSequenceQuery);
}
- /**
- * Judge whether information_schema column lookup should filter
table_schema.
- *
- * @return whether information_schema column lookup should filter
table_schema
- */
- public boolean isInformationSchemaColumnSchemaFilterRequired() {
- return
option.map(MCPDatabaseCapabilityOption::isInformationSchemaColumnSchemaFilterRequired).orElse(false);
- }
-
/**
* Judge whether schema is a system schema.
*
diff --git
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/MariaDBMCPDatabaseCapabilityOption.java
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/MariaDBMCPDatabaseCapabilityOption.java
index f7c73d5b3e3..2e2b51fa381 100644
---
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/MariaDBMCPDatabaseCapabilityOption.java
+++
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/MariaDBMCPDatabaseCapabilityOption.java
@@ -61,8 +61,4 @@ public final class MariaDBMCPDatabaseCapabilityOption extends
AbstractMCPDatabas
return Optional.of(SEQUENCE_QUERY);
}
- @Override
- public boolean isInformationSchemaColumnSchemaFilterRequired() {
- return true;
- }
}
diff --git
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/MySQLMCPDatabaseCapabilityOption.java
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/MySQLMCPDatabaseCapabilityOption.java
index e49bcbc7b2c..8b2aaf9fee7 100644
---
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/MySQLMCPDatabaseCapabilityOption.java
+++
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/MySQLMCPDatabaseCapabilityOption.java
@@ -53,11 +53,6 @@ public final class MySQLMCPDatabaseCapabilityOption extends
AbstractMCPDatabaseC
return List.of("information_schema", "mysql", "performance_schema",
"shardingsphere", "sys");
}
- @Override
- public boolean isInformationSchemaColumnSchemaFilterRequired() {
- return true;
- }
-
@Override
public boolean isExplainAnalyzeSupported(final String databaseVersion) {
return DatabaseVersionUtil.isVersionAtLeast(databaseVersion, 8, 0, 18);
diff --git
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/OpenGaussMCPDatabaseCapabilityOption.java
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/OpenGaussMCPDatabaseCapabilityOption.java
index 51acb294d60..e5ad5f9e994 100644
---
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/OpenGaussMCPDatabaseCapabilityOption.java
+++
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/OpenGaussMCPDatabaseCapabilityOption.java
@@ -60,11 +60,6 @@ public final class OpenGaussMCPDatabaseCapabilityOption
extends AbstractMCPDatab
return Optional.of(SEQUENCE_QUERY);
}
- @Override
- public boolean isInformationSchemaColumnSchemaFilterRequired() {
- return true;
- }
-
@Override
public boolean isExplainAnalyzeSupported(final String databaseVersion) {
return true;
diff --git
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/PostgreSQLMCPDatabaseCapabilityOption.java
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/PostgreSQLMCPDatabaseCapabilityOption.java
index f4944824123..bb22625634a 100644
---
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/PostgreSQLMCPDatabaseCapabilityOption.java
+++
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/capability/dialect/PostgreSQLMCPDatabaseCapabilityOption.java
@@ -60,11 +60,6 @@ public final class PostgreSQLMCPDatabaseCapabilityOption
extends AbstractMCPData
return Optional.of(SEQUENCE_QUERY);
}
- @Override
- public boolean isInformationSchemaColumnSchemaFilterRequired() {
- return true;
- }
-
@Override
public boolean isExplainAnalyzeSupported(final String databaseVersion) {
return true;
diff --git
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/spi/MCPFeatureQueryFacade.java
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/spi/MCPFeatureQueryFacade.java
index 916b22522d2..5b688c5f64e 100644
---
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/spi/MCPFeatureQueryFacade.java
+++
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/spi/MCPFeatureQueryFacade.java
@@ -17,10 +17,8 @@
package org.apache.shardingsphere.mcp.support.database.spi;
-import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Set;
/**
* MCP feature direct query facade.
@@ -66,14 +64,4 @@ public interface MCPFeatureQueryFacade {
*/
String queryColumnDefinition(String databaseName, String schemaName,
String tableName, String columnName);
- /**
- * Query information schema columns.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param tableName table name
- * @param columnNames column names
- * @return actual column names
- */
- Set<String> queryInformationSchemaColumnNames(String databaseName, String
schemaName, String tableName, Collection<String> columnNames);
}
diff --git
a/mcp/support/src/test/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseDialectTest.java
b/mcp/support/src/test/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseDialectTest.java
index 165d56c04cf..06c2d28acb9 100644
---
a/mcp/support/src/test/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseDialectTest.java
+++
b/mcp/support/src/test/java/org/apache/shardingsphere/mcp/support/database/capability/MCPDatabaseDialectTest.java
@@ -130,13 +130,6 @@ class MCPDatabaseDialectTest {
assertThat(actual, is(expected));
}
- @ParameterizedTest(name = "{0}")
- @MethodSource("isInformationSchemaColumnSchemaFilterRequiredArguments")
- void assertIsInformationSchemaColumnSchemaFilterRequired(final String
name, final String databaseType, final boolean expected) {
- boolean actual =
MCPDatabaseDialect.of(databaseType).isInformationSchemaColumnSchemaFilterRequired();
- assertThat(actual, is(expected));
- }
-
@Test
void assertIsSystemSchema() {
boolean actual =
MCPDatabaseDialect.of("PostgreSQL").isSystemSchema("PG_CATALOG");
@@ -274,11 +267,4 @@ class MCPDatabaseDialectTest {
Arguments.of("mysql", "MySQL", ""));
}
- private static Stream<Arguments>
isInformationSchemaColumnSchemaFilterRequiredArguments() {
- return Stream.of(
- Arguments.of("mysql", "MySQL", true),
- Arguments.of("postgresql", "PostgreSQL", true),
- Arguments.of("sql server", "SQLServer", false),
- Arguments.of("unknown", "FixtureDB", false));
- }
}