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')";