You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by to...@apache.org on 2022/12/27 07:37:36 UTC

[shardingsphere] branch master updated: Fixes #23115 (#23116)

This is an automated email from the ASF dual-hosted git repository.

totalo 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 e7098c40bfb Fixes #23115 (#23116)
e7098c40bfb is described below

commit e7098c40bfb3c0c346437bdad2b8d76c021d0af2
Author: Raigor <ra...@gmail.com>
AuthorDate: Tue Dec 27 15:37:29 2022 +0800

    Fixes #23115 (#23116)
---
 .../CreateShardingTableReferenceRuleStatementUpdater.java   |  2 +-
 .../admin/executor/AbstractDatabaseMetaDataExecutor.java    | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingTableReferenceRuleStatementUpdater.java b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingTableReferenceRuleStatementUpdater.java
index 13297a31556..bf513f92ec5 100644
--- a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingTableReferenceRuleStatementUpdater.java
+++ b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingTableReferenceRuleStatementUpdater.java
@@ -63,7 +63,7 @@ public final class CreateShardingTableReferenceRuleStatementUpdater implements R
     }
     
     private void checkDuplicatedRuleNames(final String databaseName, final CreateShardingTableReferenceRuleStatement sqlStatement,
-                                         final ShardingRuleConfiguration currentRuleConfig) throws DuplicateRuleException {
+                                          final ShardingRuleConfiguration currentRuleConfig) throws DuplicateRuleException {
         if (null != currentRuleConfig) {
             Collection<String> currentRuleNames = currentRuleConfig.getBindingTableGroups().stream().map(ShardingTableReferenceRuleConfiguration::getName).collect(Collectors.toSet());
             Collection<String> duplicatedRuleNames = sqlStatement.getRules().stream().map(TableReferenceRuleSegment::getName).filter(currentRuleNames::contains).collect(Collectors.toList());
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
index bfe8cecb4b9..78f9e05e9da 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
@@ -66,6 +66,8 @@ public abstract class AbstractDatabaseMetaDataExecutor implements DatabaseAdminQ
     
     private final LinkedList<Map<String, Object>> rows = new LinkedList<>();
     
+    private final Collection<String> labels = new LinkedList<>();
+    
     @Override
     public final void execute(final ConnectionSession connectionSession) throws SQLException {
         List<String> databaseNames = getDatabaseNames(connectionSession);
@@ -79,10 +81,10 @@ public abstract class AbstractDatabaseMetaDataExecutor implements DatabaseAdminQ
     }
     
     private void handleResultSet(final String databaseName, final ResultSet resultSet) throws SQLException {
+        ResultSetMetaData metaData = resultSet.getMetaData();
         while (resultSet.next()) {
             Map<String, Object> rowMap = new LinkedHashMap<>();
             Map<String, String> aliasMap = new LinkedHashMap<>();
-            ResultSetMetaData metaData = resultSet.getMetaData();
             for (int i = 1; i < metaData.getColumnCount() + 1; i++) {
                 aliasMap.put(metaData.getColumnName(i), metaData.getColumnLabel(i));
                 rowMap.put(metaData.getColumnLabel(i), resultSet.getString(i));
@@ -92,6 +94,11 @@ public abstract class AbstractDatabaseMetaDataExecutor implements DatabaseAdminQ
                 rows.addFirst(rowMap);
             }
         }
+        if (rows.isEmpty()) {
+            for (int i = 1; i < metaData.getColumnCount() + 1; i++) {
+                labels.add(metaData.getColumnLabel(i));
+            }
+        }
     }
     
     /**
@@ -139,6 +146,10 @@ public abstract class AbstractDatabaseMetaDataExecutor implements DatabaseAdminQ
     }
     
     private RawQueryResultMetaData createQueryResultMetaData() {
+        if (rows.isEmpty() && !labels.isEmpty()) {
+            List<RawQueryResultColumnMetaData> columns = labels.stream().map(each -> new RawQueryResultColumnMetaData("", each, each, Types.VARCHAR, "VARCHAR", 20, 0)).collect(Collectors.toList());
+            return new RawQueryResultMetaData(columns);
+        }
         List<RawQueryResultColumnMetaData> columns = rows.stream().flatMap(each -> each.keySet().stream()).collect(Collectors.toCollection(LinkedHashSet::new))
                 .stream().map(each -> new RawQueryResultColumnMetaData("", each, each, Types.VARCHAR, "VARCHAR", 20, 0)).collect(Collectors.toList());
         return new RawQueryResultMetaData(columns);