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 bba752137e4 Fix Sharding column not tracked through aliases (#31687)
bba752137e4 is described below

commit bba752137e4f5c9723babccad7e0e890bfb85e9b
Author: LotusMoon <[email protected]>
AuthorDate: Sat Jun 15 19:36:33 2024 +0800

    Fix Sharding column not tracked through aliases (#31687)
---
 .../engine/WhereClauseShardingConditionEngine.java |  2 +-
 .../scenario/sharding/case/dml/select.xml          | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
index ce479bf669e..53ae941233e 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
@@ -120,7 +120,7 @@ public final class WhereClauseShardingConditionEngine {
         for (ExpressionSegment each : predicates) {
             for (ColumnSegment columnSegment : ColumnExtractor.extract(each)) {
                 Optional<String> tableName = 
Optional.ofNullable(columnTableNames.get(columnSegment.getExpression()));
-                Optional<String> shardingColumn = tableName.flatMap(optional 
-> shardingRule.findShardingColumn(columnSegment.getIdentifier().getValue(), 
optional));
+                Optional<String> shardingColumn = tableName.flatMap(optional 
-> 
shardingRule.findShardingColumn(columnSegment.getColumnBoundedInfo().getOriginalColumn().getValue(),
 optional));
                 if (!tableName.isPresent() || !shardingColumn.isPresent()) {
                     continue;
                 }
diff --git 
a/test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml 
b/test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml
index 1ec3880f2e9..b941901c93a 100644
--- a/test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml
+++ b/test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml
@@ -17,6 +17,28 @@
   -->
 
 <rewrite-assertions yaml-rule="scenario/sharding/config/sharding-rule.yaml">
+    <rewrite-assertion id="select_over_aliased_shard_column" 
db-types="MySQL,SQLServer,SQL92,PostgreSQL">
+        <input sql="SELECT * FROM (SELECT account_id aliased_account_id FROM 
t_account) t1 WHERE aliased_account_id  = ?" parameters="100" />
+        <output sql="SELECT * FROM (SELECT account_id aliased_account_id FROM 
t_account_0) t1 WHERE aliased_account_id  = ?" parameters="100" />
+    </rewrite-assertion>
+
+    <rewrite-assertion id="select_over_aliased_shard_column_oracle" 
db-types="Oracle">
+        <input sql="SELECT * FROM (SELECT account_id aliased_account_id FROM 
t_account) WHERE aliased_account_id  = ?" parameters="100" />
+        <output sql="SELECT * FROM (SELECT account_id aliased_account_id FROM 
t_account_0) WHERE aliased_account_id  = ?" parameters="100" />
+    </rewrite-assertion>
+
+    <rewrite-assertion id="select_over_alias_as_shard_column" 
db-types="MySQL,SQLServer,SQL92,PostgreSQL">
+        <input sql="SELECT * FROM (SELECT amount account_id FROM t_account) t1 
WHERE account_id  = ?" parameters="100" />
+        <output sql="SELECT * FROM (SELECT amount account_id FROM t_account_0) 
t1 WHERE account_id  = ?" parameters="100" />
+        <output sql="SELECT * FROM (SELECT amount account_id FROM t_account_1) 
t1 WHERE account_id  = ?" parameters="100" />
+    </rewrite-assertion>
+
+    <rewrite-assertion id="select_over_alias_as_shard_column_oracle" 
db-types="Oracle">
+        <input sql="SELECT * FROM (SELECT amount account_id FROM t_account) 
WHERE account_id  = ?" parameters="100" />
+        <output sql="SELECT * FROM (SELECT amount account_id FROM t_account_0) 
WHERE account_id  = ?" parameters="100" />
+        <output sql="SELECT * FROM (SELECT amount account_id FROM t_account_1) 
WHERE account_id  = ?" parameters="100" />
+    </rewrite-assertion>
+
     <rewrite-assertion id="select_with_sharding_value_for_parameters">
         <input sql="SELECT * FROM t_account WHERE account_id = ?" 
parameters="100" />
         <output sql="SELECT * FROM t_account_0 WHERE account_id = ?" 
parameters="100" />

Reply via email to