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 7453a41bb2e Fix MySQL metadata constraint query to filter by 
TABLE_SCHEMA (#38223)
7453a41bb2e is described below

commit 7453a41bb2e24a9e83e57ab56f8a901d55911b33
Author: ym0506 <[email protected]>
AuthorDate: Fri Feb 27 14:39:02 2026 +0900

    Fix MySQL metadata constraint query to filter by TABLE_SCHEMA (#38223)
    
    * Fix MySQL constraint metadata query scope in refresh
    
    * chore: retrigger CI for flaky dependency resolution
    
    * chore: retrigger CI for snapshot dependency flake
---
 .../mysql/metadata/data/loader/MySQLMetaDataLoader.java  | 16 +++++++++-------
 .../metadata/data/loader/MySQLMetaDataLoaderTest.java    |  2 +-
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git 
a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoader.java
 
b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoader.java
index e37cc21623a..61b042335cc 100644
--- 
a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoader.java
+++ 
b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoader.java
@@ -62,7 +62,7 @@ public final class MySQLMetaDataLoader implements 
DialectMetaDataLoader {
             + "WHERE TABLE_SCHEMA=? and TABLE_NAME IN (%s) ORDER BY 
NON_UNIQUE, INDEX_NAME, SEQ_IN_INDEX";
     
     private static final String CONSTRAINT_META_DATA_SQL = "SELECT 
CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME FROM 
information_schema.KEY_COLUMN_USAGE "
-            + "WHERE TABLE_NAME IN (%s) AND REFERENCED_TABLE_SCHEMA IS NOT 
NULL";
+            + "WHERE TABLE_SCHEMA=? AND TABLE_NAME IN (%s) AND 
REFERENCED_TABLE_SCHEMA IS NOT NULL";
     
     private static final String VIEW_META_DATA_SQL = "SELECT TABLE_NAME FROM 
information_schema.VIEWS WHERE TABLE_SCHEMA=? AND TABLE_NAME IN (%s)";
     
@@ -88,8 +88,7 @@ public final class MySQLMetaDataLoader implements 
DialectMetaDataLoader {
         try (
                 Connection connection = dataSource.getConnection();
                 PreparedStatement preparedStatement = 
connection.prepareStatement(getViewMetaDataSQL(tableNames))) {
-            String databaseName = "".equals(connection.getCatalog()) ? 
GlobalDataSourceRegistry.getInstance().getCachedDatabaseTables().get(tableNames.iterator().next())
 : connection.getCatalog();
-            preparedStatement.setString(1, databaseName);
+            preparedStatement.setString(1, getDatabaseName(connection, 
tableNames));
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {
                     result.add(resultSet.getString(1));
@@ -108,6 +107,7 @@ public final class MySQLMetaDataLoader implements 
DialectMetaDataLoader {
         try (
                 Connection connection = dataSource.getConnection();
                 PreparedStatement preparedStatement = 
connection.prepareStatement(getConstraintMetaDataSQL(tables))) {
+            preparedStatement.setString(1, getDatabaseName(connection, 
tables));
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {
                     String constraintName = 
resultSet.getString("CONSTRAINT_NAME");
@@ -132,8 +132,7 @@ public final class MySQLMetaDataLoader implements 
DialectMetaDataLoader {
         try (
                 Connection connection = dataSource.getConnection();
                 PreparedStatement preparedStatement = 
connection.prepareStatement(getTableMetaDataSQL(tables))) {
-            String databaseName = "".equals(connection.getCatalog()) ? 
GlobalDataSourceRegistry.getInstance().getCachedDatabaseTables().get(tables.iterator().next())
 : connection.getCatalog();
-            preparedStatement.setString(1, databaseName);
+            preparedStatement.setString(1, getDatabaseName(connection, 
tables));
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {
                     String tableName = resultSet.getString("TABLE_NAME");
@@ -171,8 +170,7 @@ public final class MySQLMetaDataLoader implements 
DialectMetaDataLoader {
         try (
                 Connection connection = dataSource.getConnection();
                 PreparedStatement preparedStatement = 
connection.prepareStatement(getIndexMetaDataSQL(tableNames))) {
-            String databaseName = "".equals(connection.getCatalog()) ? 
GlobalDataSourceRegistry.getInstance().getCachedDatabaseTables().get(tableNames.iterator().next())
 : connection.getCatalog();
-            preparedStatement.setString(1, databaseName);
+            preparedStatement.setString(1, getDatabaseName(connection, 
tableNames));
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {
                     String indexName = resultSet.getString("INDEX_NAME");
@@ -206,6 +204,10 @@ public final class MySQLMetaDataLoader implements 
DialectMetaDataLoader {
         return String.format(INDEX_META_DATA_SQL, tableNames.stream().map(each 
-> String.format("'%s'", each)).collect(Collectors.joining(",")));
     }
     
+    private String getDatabaseName(final Connection connection, final 
Collection<String> tableNames) throws SQLException {
+        return "".equals(connection.getCatalog()) ? 
GlobalDataSourceRegistry.getInstance().getCachedDatabaseTables().get(tableNames.iterator().next())
 : connection.getCatalog();
+    }
+    
     @Override
     public String getDatabaseType() {
         return "MySQL";
diff --git 
a/database/connector/dialect/mysql/src/test/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoaderTest.java
 
b/database/connector/dialect/mysql/src/test/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoaderTest.java
index f31f74dbe60..a1e9d6f54b1 100644
--- 
a/database/connector/dialect/mysql/src/test/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoaderTest.java
+++ 
b/database/connector/dialect/mysql/src/test/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoaderTest.java
@@ -64,7 +64,7 @@ class MySQLMetaDataLoaderTest {
             + "WHERE TABLE_SCHEMA=? and TABLE_NAME IN ('tbl') ORDER BY 
NON_UNIQUE, INDEX_NAME, SEQ_IN_INDEX";
     
     private static final String CONSTRAINT_METADATA_SQL = "SELECT 
CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME FROM 
information_schema.KEY_COLUMN_USAGE "
-            + "WHERE TABLE_NAME IN ('tbl') AND REFERENCED_TABLE_SCHEMA IS NOT 
NULL";
+            + "WHERE TABLE_SCHEMA=? AND TABLE_NAME IN ('tbl') AND 
REFERENCED_TABLE_SCHEMA IS NOT NULL";
     
     private static final String VIEW_METADATA_SQL = "SELECT TABLE_NAME FROM 
information_schema.VIEWS WHERE TABLE_SCHEMA=? AND TABLE_NAME IN ('tbl')";
     

Reply via email to