strongduanmu commented on code in PR #29491:
URL: https://github.com/apache/shardingsphere/pull/29491#discussion_r1434722363


##########
test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml:
##########
@@ -419,26 +419,26 @@
 
     <rewrite-assertion 
id="select_top_with_multiple_route_with_memory_group_by_for_parameters_for_sqlserver"
 db-types="SQLServer">
         <input sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 100" />
-        <output sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account_0 o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 0" />
-        <output sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account_1 o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 0" />
+        <output sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account_0 o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 100" />
+        <output sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account_1 o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 100" />
     </rewrite-assertion>
     
     <rewrite-assertion 
id="select_top_with_multiple_route_with_memory_group_by_for_literals_for_sqlserver"
 db-types="SQLServer">
         <input sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 100" />
-        <output sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER 
BY o.account_id) AS rownum_, o.account_id FROM t_account_0 o WHERE o.account_id 
IN (100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 0" />
-        <output sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER 
BY o.account_id) AS rownum_, o.account_id FROM t_account_1 o WHERE o.account_id 
IN (100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 0" />
+        <output sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER 
BY o.account_id) AS rownum_, o.account_id FROM t_account_0 o WHERE o.account_id 
IN (100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 100" />
+        <output sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER 
BY o.account_id) AS rownum_, o.account_id FROM t_account_1 o WHERE o.account_id 
IN (100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 100" />
     </rewrite-assertion>
 
     <rewrite-assertion 
id="select_top_percent_with_ties_with_multiple_route_with_memory_group_by_for_parameters_for_sqlserver"
 db-types="SQLServer">
         <input sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 100" />
-        <output sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_0 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 0" />
-        <output sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_1 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 0" />
+        <output sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_0 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 100" />
+        <output sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_1 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 100" />
     </rewrite-assertion>
 
     <rewrite-assertion 
id="select_top_percent_with_ties_with_multiple_route_with_memory_group_by_for_literals_for_sqlserver"
 db-types="SQLServer">
         <input sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 100" />
-        <output sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_0 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 0" />
-        <output sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_1 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 0" />
+        <output sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_0 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 100" />
+        <output sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_1 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 100" />

Review Comment:
   You can debug this method - 
https://github.com/apache/shardingsphere/blob/ea3118d628c7c7f3d2d93bc9188aab7efe74fd9b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/PaginationContextEngine.java#L69



##########
test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml:
##########
@@ -419,26 +419,26 @@
 
     <rewrite-assertion 
id="select_top_with_multiple_route_with_memory_group_by_for_parameters_for_sqlserver"
 db-types="SQLServer">
         <input sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 100" />
-        <output sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account_0 o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 0" />
-        <output sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account_1 o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 0" />
+        <output sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account_0 o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 100" />
+        <output sql="SELECT * FROM (SELECT TOP(?) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account_1 o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; ?" parameters="110, 100" />
     </rewrite-assertion>
     
     <rewrite-assertion 
id="select_top_with_multiple_route_with_memory_group_by_for_literals_for_sqlserver"
 db-types="SQLServer">
         <input sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER BY 
o.account_id) AS rownum_, o.account_id FROM t_account o WHERE o.account_id IN 
(100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 100" />
-        <output sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER 
BY o.account_id) AS rownum_, o.account_id FROM t_account_0 o WHERE o.account_id 
IN (100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 0" />
-        <output sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER 
BY o.account_id) AS rownum_, o.account_id FROM t_account_1 o WHERE o.account_id 
IN (100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 0" />
+        <output sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER 
BY o.account_id) AS rownum_, o.account_id FROM t_account_0 o WHERE o.account_id 
IN (100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 100" />
+        <output sql="SELECT * FROM (SELECT TOP(110) row_number() OVER (ORDER 
BY o.account_id) AS rownum_, o.account_id FROM t_account_1 o WHERE o.account_id 
IN (100, 101) GROUP BY account_id ORDER BY account_id DESC) AS row_ WHERE 
row_.rownum_ &gt; 100" />
     </rewrite-assertion>
 
     <rewrite-assertion 
id="select_top_percent_with_ties_with_multiple_route_with_memory_group_by_for_parameters_for_sqlserver"
 db-types="SQLServer">
         <input sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 100" />
-        <output sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_0 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 0" />
-        <output sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_1 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 0" />
+        <output sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_0 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 100" />
+        <output sql="SELECT * FROM (SELECT TOP(?) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_1 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; ?" parameters="110, 100" />
     </rewrite-assertion>
 
     <rewrite-assertion 
id="select_top_percent_with_ties_with_multiple_route_with_memory_group_by_for_literals_for_sqlserver"
 db-types="SQLServer">
         <input sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 100" />
-        <output sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_0 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 0" />
-        <output sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_1 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 0" />
+        <output sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_0 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 100" />
+        <output sql="SELECT * FROM (SELECT TOP(110) PERCENT WITH TIES 
row_number() OVER (ORDER BY o.account_id) AS rownum_, o.account_id FROM 
t_account_1 o WHERE o.account_id IN (100, 101) GROUP BY account_id ORDER BY 
account_id DESC) AS row_ WHERE row_.rownum_ &gt; 100" />

Review Comment:
   Can you take a look for sql server limit rewrite? May new parse result cause 
wrong limit rewrite.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to