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

Reply via email to