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 <[email protected]>
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);