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 e3527b31a9a support for SELECT special functions (#24888)
e3527b31a9a is described below
commit e3527b31a9a43ae1e031e70926b00f89e3e9e253
Author: kanha gupta <[email protected]>
AuthorDate: Fri Apr 7 06:01:06 2023 +0530
support for SELECT special functions (#24888)
* support for Char function
* support for Weight string SQL
* Support for Char & weight string Function
---
.../statement/impl/MySQLStatementSQLVisitor.java | 11 ++++++++--
.../test/it/optimize/SQLNodeConverterEngineIT.java | 2 ++
.../resources/case/dml/select-special-function.xml | 24 ++++++++++++++++++++--
3 files changed, 33 insertions(+), 4 deletions(-)
diff --git
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
index 3703568a693..656ed7f831f 100644
---
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
+++
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
@@ -954,7 +954,12 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public final ASTNode visitCharFunction(final CharFunctionContext ctx) {
calculateParameterCount(ctx.expr());
- return new FunctionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), ctx.CHAR().getText(), getOriginalText(ctx));
+ FunctionSegment result = new
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(),
ctx.CHAR().getText(), getOriginalText(ctx));
+ for (ExprContext each : ctx.expr()) {
+ ASTNode expr = visit(each);
+ result.getParameters().add((ExpressionSegment) expr);
+ }
+ return result;
}
@Override
@@ -966,7 +971,9 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public final ASTNode visitWeightStringFunction(final
WeightStringFunctionContext ctx) {
calculateParameterCount(Collections.singleton(ctx.expr()));
- return new FunctionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), ctx.WEIGHT_STRING().getText(),
getOriginalText(ctx));
+ FunctionSegment result = new
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(),
ctx.WEIGHT_STRING().getText(), getOriginalText(ctx));
+ result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
+ return result;
}
@Override
diff --git
a/test/it/optimizer/src/test/java/org/apache/shardingsphere/test/it/optimize/SQLNodeConverterEngineIT.java
b/test/it/optimizer/src/test/java/org/apache/shardingsphere/test/it/optimize/SQLNodeConverterEngineIT.java
index 954d930de75..e3ec5422aa5 100644
---
a/test/it/optimizer/src/test/java/org/apache/shardingsphere/test/it/optimize/SQLNodeConverterEngineIT.java
+++
b/test/it/optimizer/src/test/java/org/apache/shardingsphere/test/it/optimize/SQLNodeConverterEngineIT.java
@@ -191,6 +191,8 @@ class SQLNodeConverterEngineIT {
result.add("select_natural_full_join");
result.add("select_order_by_for_nulls_first");
result.add("select_order_by_for_nulls_last");
+ result.add("select_char");
+ result.add("select_weight_string");
return result;
}
// CHECKSTYLE:ON
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 994ec106c10..172d31f4e62 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
@@ -128,7 +128,23 @@
<projections start-index="7" stop-index="29">
<expression-projection text="CHAR(77,121,83,81,'76')"
start-index="7" stop-index="29">
<expr>
- <function function-name="CHAR" start-index="7"
stop-index="29" text="CHAR(77,121,83,81,'76')" />
+ <function function-name="CHAR" start-index="7"
stop-index="29" text="CHAR(77,121,83,81,'76')" >
+ <parameter>
+ <literal-expression value="77" start-index="12"
stop-index="13" />
+ </parameter>
+ <parameter>
+ <literal-expression value="121" start-index="15"
stop-index="17" />
+ </parameter>
+ <parameter>
+ <literal-expression value="83" start-index="19"
stop-index="20" />
+ </parameter>
+ <parameter>
+ <literal-expression value="81" start-index="22"
stop-index="23" />
+ </parameter>
+ <parameter>
+ <literal-expression value="76" start-index="25"
stop-index="28" />
+ </parameter>
+ </function>
</expr>
</expression-projection>
</projections>
@@ -170,7 +186,11 @@
<projections start-index="7" stop-index="26">
<expression-projection text="WEIGHT_STRING('bar')" start-index="7"
stop-index="26">
<expr>
- <function function-name="WEIGHT_STRING" start-index="7"
stop-index="26" text="WEIGHT_STRING('bar')" />
+ <function function-name="WEIGHT_STRING" start-index="7"
stop-index="26" text="WEIGHT_STRING('bar')" >
+ <parameter>
+ <literal-expression value="bar" start-index="21"
stop-index="25" />
+ </parameter>
+ </function>
</expr>
</expression-projection>
</projections>