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

strongduanmu 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 b2436d86756 Optimize route engine temporary collections (#38788)
b2436d86756 is described below

commit b2436d8675675ebc5a0c2cfd2e8aa73384479e9b
Author: ZhangCheng <[email protected]>
AuthorDate: Wed Jun 3 18:03:02 2026 +0800

    Optimize route engine temporary collections (#38788)
---
 .../engine/type/complex/ShardingCartesianRouteEngine.java | 15 ++++++++++-----
 .../engine/type/standard/ShardingStandardRouteEngine.java |  8 +++-----
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/complex/ShardingCartesianRouteEngine.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/complex/ShardingCartesianRouteEngine.java
index ffeb8065d8c..f36f70d3fe7 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/complex/ShardingCartesianRouteEngine.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/complex/ShardingCartesianRouteEngine.java
@@ -37,7 +37,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * Sharding cartesian route engine.
@@ -76,10 +75,11 @@ public final class ShardingCartesianRouteEngine implements 
ShardingRouteEngine {
     private Collection<String> getIntersectionDataSources() {
         Collection<String> result = new HashSet<>();
         for (RouteContext each : routeContexts) {
+            Collection<String> actualDataSourceNames = 
each.getActualDataSourceNames();
             if (result.isEmpty()) {
-                result.addAll(each.getActualDataSourceNames());
+                result.addAll(actualDataSourceNames);
             }
-            result.retainAll(each.getActualDataSourceNames());
+            result.retainAll(actualDataSourceNames);
         }
         return result;
     }
@@ -95,7 +95,11 @@ public final class ShardingCartesianRouteEngine implements 
ShardingRouteEngine {
     private List<Set<RouteMapper>> toRoutingTableGroups(final String 
dataSource, final List<Set<String>> actualTableGroups) {
         List<Set<RouteMapper>> result = new 
ArrayList<>(actualTableGroups.size());
         for (Set<String> each : actualTableGroups) {
-            result.add(new LinkedHashSet<>(new 
ArrayList<>(each).stream().map(input -> findRoutingTable(dataSource, 
input)).collect(Collectors.toList())));
+            Set<RouteMapper> routingTableGroup = new 
LinkedHashSet<>(each.size(), 1F);
+            for (String actualTable : each) {
+                routingTableGroup.add(findRoutingTable(dataSource, 
actualTable));
+            }
+            result.add(routingTableGroup);
         }
         return result;
     }
@@ -112,8 +116,9 @@ public final class ShardingCartesianRouteEngine implements 
ShardingRouteEngine {
     
     private Collection<RouteUnit> getRouteUnits(final String dataSource, final 
Set<List<RouteMapper>> cartesianRoutingTableGroups) {
         Collection<RouteUnit> result = new 
LinkedHashSet<>(cartesianRoutingTableGroups.size(), 1F);
+        RouteMapper dataSourceMapper = new RouteMapper(dataSource, dataSource);
         for (List<RouteMapper> each : cartesianRoutingTableGroups) {
-            result.add(new RouteUnit(new RouteMapper(dataSource, dataSource), 
new LinkedList<>(each)));
+            result.add(new RouteUnit(dataSourceMapper, new 
LinkedList<>(each)));
         }
         return result;
     }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRouteEngine.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRouteEngine.java
index 3b7d0c2e059..3ecfcaa3929 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRouteEngine.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRouteEngine.java
@@ -242,7 +242,7 @@ public final class ShardingStandardRouteEngine implements 
ShardingRouteEngine {
         Collection<String> routedDataSources = routeDataSources(shardingTable, 
databaseShardingStrategy, databaseShardingValues);
         Collection<DataNode> result = new LinkedList<>();
         for (String each : routedDataSources) {
-            result.addAll(routeTables(shardingTable, each, 
tableShardingStrategy, tableShardingValues));
+            routeTables(shardingTable, each, tableShardingStrategy, 
tableShardingValues, result);
         }
         return result;
     }
@@ -258,17 +258,15 @@ public final class ShardingStandardRouteEngine implements 
ShardingRouteEngine {
         return result;
     }
     
-    private Collection<DataNode> routeTables(final ShardingTable 
shardingTable, final String routedDataSource,
-                                             final ShardingStrategy 
tableShardingStrategy, final List<ShardingConditionValue> tableShardingValues) {
+    private void routeTables(final ShardingTable shardingTable, final String 
routedDataSource,
+                             final ShardingStrategy tableShardingStrategy, 
final List<ShardingConditionValue> tableShardingValues, final 
Collection<DataNode> result) {
         Collection<String> availableTargetTables = 
shardingTable.getActualTableNames(routedDataSource);
         Collection<String> routedTables = tableShardingValues.isEmpty()
                 ? availableTargetTables
                 : tableShardingStrategy.doSharding(availableTargetTables, 
tableShardingValues, shardingTable.getTableDataNode(), props);
-        Collection<DataNode> result = new LinkedList<>();
         for (String each : routedTables) {
             result.add(new DataNode(routedDataSource, (String) null, each));
         }
-        return result;
     }
     
     private ShardingStrategy createShardingStrategy(final 
ShardingStrategyConfiguration shardingStrategyConfig, final Map<String, 
ShardingAlgorithm> shardingAlgorithms,

Reply via email to