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 b548b49c6f6 Support BetweenExpression in Projection (#25294) (#25375)
b548b49c6f6 is described below

commit b548b49c6f63faae9e8440ae79e4c5b291b7e806
Author: Cong Hu <[email protected]>
AuthorDate: Tue May 2 13:42:10 2023 +0800

    Support BetweenExpression in Projection (#25294) (#25375)
    
    * Support BetweenExpression in Projection (#25294)
    
    * Complete test (#25294)
    
    * retrigger checks
---
 .../visitor/statement/MySQLStatementVisitor.java   |  5 +++++
 .../main/resources/case/dml/select-expression.xml  | 24 ++++++++++++++++++++++
 .../sql/supported/dml/select-expression.xml        |  1 +
 3 files changed, 30 insertions(+)

diff --git 
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
 
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
index b009812c9f3..fd721e2e0bb 100644
--- 
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
+++ 
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -1611,6 +1611,11 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
             result.setAlias(alias);
             return result;
         }
+        if (projection instanceof BetweenExpression) {
+            ExpressionProjectionSegment result = new 
ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), 
getOriginalText(ctx.expr()), (BetweenExpression) projection);
+            result.setAlias(alias);
+            return result;
+        }
         LiteralExpressionSegment column = (LiteralExpressionSegment) 
projection;
         ExpressionProjectionSegment result = null == alias
                 ? new ExpressionProjectionSegment(column.getStartIndex(), 
column.getStopIndex(), String.valueOf(column.getLiterals()), column)
diff --git a/test/it/parser/src/main/resources/case/dml/select-expression.xml 
b/test/it/parser/src/main/resources/case/dml/select-expression.xml
index 03f3f773121..cb3dfbde134 100644
--- a/test/it/parser/src/main/resources/case/dml/select-expression.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-expression.xml
@@ -2288,4 +2288,28 @@
             <simple-table name="DUAL" start-index="44" stop-index="47" />
         </from>
     </select>
+
+    <select sql-case-id="select_between_expression">
+        <projections start-index="7" stop-index="44">
+            <expression-projection text="item_id BETWEEN 1 AND order_id" 
start-index="7" stop-index="36">
+                <expr>
+                    <between-expression start-index="7" stop-index="36">
+                        <left>
+                            <column start-index="7" stop-index="13" 
name="item_id" />
+                        </left>
+                        <between-expr>
+                            <literal-expression start-index="23" 
stop-index="23" value="1" />
+                        </between-expr>
+                        <and-expr>
+                            <column start-index="29" stop-index="36" 
name="order_id" />
+                        </and-expr>
+                    </between-expression>
+                </expr>
+            </expression-projection>
+            <column-projection start-index="39" stop-index="44" name="status" 
/>
+        </projections>
+        <from>
+            <simple-table name="t_order_item" start-index="51" stop-index="62" 
/>
+        </from>
+    </select>
 </sql-parser-test-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/dml/select-expression.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/select-expression.xml
index 6766e984771..fa450ef0870 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-expression.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-expression.xml
@@ -96,4 +96,5 @@
     <sql-case id="select_with_collate_with_marker" value="SELECT * FROM 
t_order WHERE order_id COLLATE ?" db-types="MySQL" />
     <sql-case id="select_age_for_postgres" value="SELECT * FROM 
cypher('sharding_test_1', $$ CREATE (n) $$) as (a agtype)" 
db-types="PostgreSQL" />
     <sql-case id="select_datetime_expression" value="SELECT SYSTIMESTAMP AT 
TIME ZONE 'UTC' FROM DUAL;" db-types="Oracle" />
+    <sql-case id="select_between_expression" value="SELECT item_id BETWEEN 1 
AND order_id, status FROM t_order_item;" db-types="MySQL" />
 </sql-cases>

Reply via email to