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

zhaojinchao 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 8adaa700a04 Fixes #31279, make the results of show tables in order 
(#31284)
8adaa700a04 is described below

commit 8adaa700a04e0e50772253deb1053cee25db5e9e
Author: Raigor <[email protected]>
AuthorDate: Sun May 19 10:17:26 2024 +0800

    Fixes #31279, make the results of show tables in order (#31284)
---
 .../mysql/handler/admin/executor/ShowTablesExecutor.java  | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git 
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
 
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
index 3a0374cd8f4..65ab2189309 100644
--- 
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
+++ 
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
@@ -39,6 +39,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQ
 import java.sql.Types;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Optional;
@@ -83,7 +84,8 @@ public final class ShowTablesExecutor implements 
DatabaseAdminQueryExecutor {
         if (!systemDatabase.getSystemSchemas().contains(databaseName) && 
!ProxyContext.getInstance().getContextManager().getDatabase(databaseName).isComplete())
 {
             return new RawMemoryQueryResult(queryResultMetaData, 
Collections.emptyList());
         }
-        List<MemoryQueryResultDataRow> rows = 
getAllTableNames(databaseName).stream().map(each -> {
+        Collection<ShardingSphereTable> sortedTables = 
getTables(databaseName).stream().sorted(Comparator.comparing(ShardingSphereTable::getName)).collect(Collectors.toList());
+        List<MemoryQueryResultDataRow> rows = sortedTables.stream().map(each 
-> {
             List<Object> rowValues = new LinkedList<>();
             rowValues.add(each.getName());
             if (showTablesStatement.isContainsFull()) {
@@ -94,12 +96,17 @@ public final class ShowTablesExecutor implements 
DatabaseAdminQueryExecutor {
         return new RawMemoryQueryResult(queryResultMetaData, rows);
     }
     
-    private Collection<ShardingSphereTable> getAllTableNames(final String 
databaseName) {
+    private Collection<ShardingSphereTable> getTables(final String 
databaseName) {
         Collection<ShardingSphereTable> result = 
ProxyContext.getInstance().getContextManager().getDatabase(databaseName).getSchema(databaseName).getTables().values();
+        Optional<Pattern> likePattern = getLikePattern();
+        return likePattern.isPresent() ? result.stream().filter(each -> 
likePattern.get().matcher(each.getName()).matches()).collect(Collectors.toList())
 : result;
+    }
+    
+    private Optional<Pattern> getLikePattern() {
         if (!showTablesStatement.getFilter().isPresent()) {
-            return result;
+            return Optional.empty();
         }
         Optional<String> pattern = 
showTablesStatement.getFilter().get().getLike().map(optional -> 
RegexUtils.convertLikePatternToRegex(optional.getPattern()));
-        return pattern.isPresent() ? result.stream().filter(each -> 
Pattern.compile(pattern.get(), 
Pattern.CASE_INSENSITIVE).matcher(each.getName()).matches()).collect(Collectors.toList())
 : result;
+        return pattern.map(optional -> 
Pattern.compile(RegexUtils.convertLikePatternToRegex(optional), 
Pattern.CASE_INSENSITIVE));
     }
 }

Reply via email to