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>

Reply via email to