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 dbfe047714f support odbc escape syntax (#28321)
dbfe047714f is described below
commit dbfe047714fc9f58b02d0b203db0be4d3787c7fb
Author: Yunbo Ni <[email protected]>
AuthorDate: Fri Sep 1 14:10:38 2023 +0800
support odbc escape syntax (#28321)
* feat: odbc esacpe -> datatime ({ts param})
* feat: odbc escape
* feat: test cases
---
.../sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java | 3 +++
test/it/optimizer/src/test/resources/converter/select-expression.xml | 2 ++
test/it/parser/src/main/resources/case/dml/select-expression.xml | 3 ++-
3 files changed, 7 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 796e02f53e6..fcde225efc5 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
@@ -1171,6 +1171,9 @@ public abstract class MySQLStatementVisitor extends
MySQLStatementBaseVisitor<AS
if (null != ctx.variable()) {
return visit(ctx.variable());
}
+ if (null != ctx.LBE_()) {
+ return visit(ctx.expr(0));
+ }
for (ExprContext each : ctx.expr()) {
visit(each);
}
diff --git
a/test/it/optimizer/src/test/resources/converter/select-expression.xml
b/test/it/optimizer/src/test/resources/converter/select-expression.xml
index 61c1b190c6c..49de1f6ad52 100644
--- a/test/it/optimizer/src/test/resources/converter/select-expression.xml
+++ b/test/it/optimizer/src/test/resources/converter/select-expression.xml
@@ -49,4 +49,6 @@
<test-cases sql-case-id="select_where_with_predicate_with_in_subquery"
expected-sql="SELECT * FROM "t_order" WHERE
"t_order"."order_id" NOT IN (SELECT "order_id"
FROM "t_order_item" WHERE "status" > 1)"
db-types="PostgreSQL, openGauss" sql-case-types="LITERAL" />
<test-cases sql-case-id="select_where_with_predicate_with_in_subquery"
expected-sql="SELECT * FROM "t_order" WHERE
"t_order"."order_id" NOT IN (SELECT "order_id"
FROM "t_order_item" WHERE "status" > ?)"
db-types="PostgreSQL, openGauss" sql-case-types="PLACEHOLDER" />
<test-cases sql-case-id="select_where_with_simple_expr_with_collate"
expected-sql="SELECT * FROM `t_order` WHERE `order_id` COLLATE
'utf8mb4_0900_ai_ci'" db-types="MySQL" sql-case-types="LITERAL" />
+ <test-cases
sql-case-id="select_where_with_simple_expr_with_odbc_escape_syntax"
expected-sql="SELECT * FROM `t_order` WHERE ?" db-types="MySQL"
sql-case-types="PLACEHOLDER" />
+ <test-cases
sql-case-id="select_where_with_simple_expr_with_odbc_escape_syntax"
expected-sql="SELECT * FROM `t_order` WHERE '1994-02-04 12:23:00'"
db-types="MySQL" sql-case-types="LITERAL" />
</sql-node-converter-test-cases>
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 df35a1534b0..fe252ad7926 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
@@ -1983,7 +1983,8 @@
</projections>
<where start-index="22" stop-index="33" literal-stop-index="53">
<expr>
- <common-expression text="{ts ?}" literal-text="{ts '1994-02-04
12:23:00'}" start-index="28" stop-index="33" literal-stop-index="53" />
+ <parameter-marker-expression start-index="32" stop-index="32"
parameter-index="0" />
+ <literal-expression start-index="32" stop-index="52"
value="1994-02-04 12:23:00" />
</expr>
</where>
</select>