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" />