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

tuichenchuxin 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 ecb1e649851 Fix mysql extract from column parse error (#27327)
ecb1e649851 is described below

commit ecb1e64985142fe8f96d2edd8e148ca98f56ded7
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Jul 20 15:59:32 2023 +0800

    Fix mysql extract from column parse error (#27327)
---
 .../visitor/statement/MySQLStatementVisitor.java    |  2 +-
 .../resources/case/dml/select-special-function.xml  | 21 +++++++++++++++++++++
 .../sql/supported/dml/select-special-function.xml   |  1 +
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
index ec689174684..29eb2969dfd 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -1075,7 +1075,7 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
         calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.EXTRACT().getText(), getOriginalText(ctx));
         result.getParameters().add(new 
LiteralExpressionSegment(ctx.identifier().getStart().getStartIndex(), 
ctx.identifier().getStop().getStopIndex(), ctx.identifier().getText()));
-        result.getParameters().add((LiteralExpressionSegment) 
visit(ctx.expr()));
+        result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
         return result;
     }
     
diff --git 
a/test/it/parser/src/main/resources/case/dml/select-special-function.xml 
b/test/it/parser/src/main/resources/case/dml/select-special-function.xml
index a4a76db14c0..6c92baf4930 100644
--- a/test/it/parser/src/main/resources/case/dml/select-special-function.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-special-function.xml
@@ -138,6 +138,27 @@
             </expression-projection>
         </projections>
     </select>
+    <select sql-case-id="select_extract_from_column">
+        <projections start-index="7" stop-index="40">
+            <expression-projection text="EXTRACT(YEAR FROM o.creation_date)" 
start-index="7" stop-index="40">
+                <expr>
+                    <function function-name="EXTRACT" start-index="7" 
stop-index="40" text="EXTRACT(YEAR FROM o.creation_date)" >
+                        <parameter>
+                            <literal-expression value="YEAR" start-index="15" 
stop-index="18" />
+                        </parameter>
+                        <parameter>
+                            <column name="creation_date" start-index="25" 
stop-index="39">
+                                <owner name="o" start-index="25" 
stop-index="25" />
+                            </column>
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <from>
+            <simple-table name="t_order" start-index="47" stop-index="55" 
alias="o" />
+        </from>
+    </select>
     <select sql-case-id="select_char">
         <projections start-index="7" stop-index="29">
             <expression-projection text="CHAR(77,121,83,81,'76')" 
start-index="7" stop-index="29">
diff --git 
a/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
 
b/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
index b22565e5bed..f8556bf1a17 100644
--- 
a/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
+++ 
b/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
@@ -25,6 +25,7 @@
     <sql-case id="select_position" value="SELECT POSITION('bar' IN 
'foobarbar')" db-types="MySQL" />
     <sql-case id="select_substring" value="SELECT SUBSTRING('foobarbar' from 
4)" db-types="MySQL" />
     <sql-case id="select_extract" value="SELECT EXTRACT(YEAR FROM 
'2019-07-02')" db-types="MySQL" />
+    <sql-case id="select_extract_from_column" value="SELECT EXTRACT(YEAR FROM 
o.creation_date) FROM t_order o" db-types="MySQL" />
     <sql-case id="select_char" value="SELECT CHAR(77,121,83,81,'76')" 
db-types="MySQL" />
     <sql-case id="select_trim" value="SELECT TRIM('  bar   ')" 
db-types="MySQL" />
     <sql-case id="select_trim_with_both" value="SELECT TRIM(BOTH ' ' from ' 
bar ')" db-types="MySQL" />

Reply via email to