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()) {

Reply via email to