This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 c9a264af61e Fix select information_schema.schemata error when storage
unit is MariaDB (#38211)
c9a264af61e is described below
commit c9a264af61e3805db6bd9c02bf8af9e25db4c9d0
Author: jiangML <[email protected]>
AuthorDate: Thu Feb 26 17:06:23 2026 +0800
Fix select information_schema.schemata error when storage unit is MariaDB
(#38211)
---
.../select/SelectInformationSchemataExecutor.java | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/select/SelectInformationSchemataExecutor.java
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/select/SelectInformationSchemataExecutor.java
index 4141253ec85..4abd8c74c81 100644
---
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/select/SelectInformationSchemataExecutor.java
+++
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/select/SelectInformationSchemataExecutor.java
@@ -67,6 +67,8 @@ public final class SelectInformationSchemataExecutor extends
DatabaseMetaDataExe
private boolean queryDatabase;
+ private boolean rowsUpdated;
+
public SelectInformationSchemataExecutor(final SelectStatement
sqlStatement, final String sql, final List<Object> parameters) {
super(sql, parameters);
this.sqlStatement = sqlStatement;
@@ -76,6 +78,7 @@ public final class SelectInformationSchemataExecutor extends
DatabaseMetaDataExe
protected Collection<ShardingSphereDatabase> getDatabases(final
ConnectionSession connectionSession, final ShardingSphereMetaData metaData) {
AuthorityChecker authorityChecker = new
AuthorityChecker(metaData.getGlobalRuleMetaData().getSingleRule(AuthorityRule.class),
connectionSession.getConnectionContext().getGrantee());
Collection<ShardingSphereDatabase> databases =
metaData.getAllDatabases().stream().filter(each ->
authorityChecker.isAuthorized(each.getName())).collect(Collectors.toList());
+ EMPTY_DATABASES.clear();
EMPTY_DATABASES.addAll(databases.stream().filter(each ->
!each.containsDataSource()).map(ShardingSphereDatabase::getName).collect(Collectors.toSet()));
Collection<ShardingSphereDatabase> result =
databases.stream().filter(ShardingSphereDatabase::containsDataSource).collect(Collectors.toList());
if (!EMPTY_DATABASES.isEmpty()) {
@@ -90,7 +93,6 @@ public final class SelectInformationSchemataExecutor extends
DatabaseMetaDataExe
row.replace(schemaNameAlias, each);
getRows().add(row);
}
- EMPTY_DATABASES.clear();
}
private Map<String, String> getDefaultRowData() {
@@ -127,6 +129,10 @@ public final class SelectInformationSchemataExecutor
extends DatabaseMetaDataExe
@Override
protected void preProcess(final ShardingSphereDatabase database, final
Map<String, Object> rows, final Map<String, String> alias) throws SQLException {
+ if (!rowsUpdated) {
+ updateRows(rows);
+ rowsUpdated = true;
+ }
Optional<String> catalog = findCatalog(database.getResourceMetaData());
schemaNameAlias = alias.getOrDefault(SCHEMA_NAME,
alias.getOrDefault(schemaNameAlias, schemaNameAlias));
String rowValue = rows.getOrDefault(schemaNameAlias, "").toString();
@@ -138,6 +144,19 @@ public final class SelectInformationSchemataExecutor
extends DatabaseMetaDataExe
}
}
+ private void updateRows(final Map<String, Object> rows) {
+ Map<String, String> newRow =
rows.keySet().stream().collect(Collectors.toMap(each -> each, each -> "",
(oldValue, currentValue) -> oldValue, LinkedHashMap::new));
+ List<Map<String, Object>> newRows = new LinkedList<>();
+ for (String each : EMPTY_DATABASES) {
+ Map<String, Object> row = new LinkedHashMap<>(newRow);
+ row.replace(CATALOG_NAME, "def");
+ row.replace(schemaNameAlias, each);
+ newRows.add(row);
+ }
+ getRows().clear();
+ getRows().addAll(newRows);
+ }
+
private Optional<String> findCatalog(final ResourceMetaData
resourceMetaData) throws SQLException {
Optional<StorageUnit> storageUnit =
resourceMetaData.getStorageUnits().values().stream().findFirst();
if (!storageUnit.isPresent()) {