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 547e91e7b93 Enhance MySQL do syntax rules (#26711)
547e91e7b93 is described below

commit 547e91e7b9329a4a456b5c1f56bacb6921e869e2
Author: niu niu <[email protected]>
AuthorDate: Sat Jul 1 11:14:33 2023 +0800

    Enhance MySQL do syntax rules (#26711)
    
    * Enhance MySQL do syntax rules
    
    * Fix test case
---
 .../src/main/antlr4/imports/mysql/DMLStatement.g4  |  2 +-
 .../statement/dml/impl/DoStatementAssert.java      |  3 +
 .../impl/dostatement/ExpectedDoParameter.java      |  4 ++
 test/it/parser/src/main/resources/case/dml/do.xml  | 76 ++++++++++++++++++++--
 .../src/main/resources/sql/supported/dml/do.xml    |  2 +
 5 files changed, 80 insertions(+), 7 deletions(-)

diff --git 
a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4 
b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
index 65013369dfa..d985983618e 100644
--- a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
+++ b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
@@ -166,7 +166,7 @@ call
     ;
 
 doStatement
-    : DO expr (COMMA_ expr)*
+    : DO expr (AS? alias)? (COMMA_ expr (AS? alias)?)*
     ;
 
 handlerStatement
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DoStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DoStatementAssert.java
index 915ce22fb68..ddd8e5d9b78 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DoStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DoStatementAssert.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
@@ -67,6 +68,8 @@ public final class DoStatementAssert {
             ExpressionAssert.assertLiteralExpression(assertContext, 
(LiteralExpressionSegment) actual, expected.getLiteralExpression());
         } else if (actual instanceof CommonExpressionSegment) {
             ExpressionAssert.assertCommonExpression(assertContext, 
(CommonExpressionSegment) actual, expected.getCommonExpression());
+        } else if (actual instanceof FunctionSegment) {
+            ExpressionAssert.assertFunction(assertContext, (FunctionSegment) 
actual, expected.getFunction());
         }
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/dostatement/ExpectedDoParameter.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/dostatement/ExpectedDoParameter.java
index d69e9965de0..fce484782ef 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/dostatement/ExpectedDoParameter.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/dostatement/ExpectedDoParameter.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.complex.ExpectedCommonExpression;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.simple.ExpectedLiteralExpression;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.simple.ExpectedParameterMarkerExpression;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.function.ExpectedFunction;
 
 import javax.xml.bind.annotation.XmlElement;
 
@@ -41,4 +42,7 @@ public final class ExpectedDoParameter extends 
AbstractExpectedSQLSegment {
     
     @XmlElement(name = "common-expression")
     private ExpectedCommonExpression commonExpression;
+    
+    @XmlElement
+    private ExpectedFunction function;
 }
diff --git a/test/it/parser/src/main/resources/case/dml/do.xml 
b/test/it/parser/src/main/resources/case/dml/do.xml
index 674e93246bf..3dfcb3a7a00 100644
--- a/test/it/parser/src/main/resources/case/dml/do.xml
+++ b/test/it/parser/src/main/resources/case/dml/do.xml
@@ -25,28 +25,57 @@
     
     <do sql-case-id="do_sleep">
         <parameter>
-            <literal-expression value="SLEEP(1)" start-index="3" 
stop-index="10" />
+            <function function-name="SLEEP" start-index="3" stop-index="10" 
text="SLEEP(1)">
+                <parameter>
+                    <literal-expression value="1" start-index="9" 
stop-index="9" />
+                </parameter>
+            </function>
         </parameter>
     </do>
     
     <do sql-case-id="do_multiple_sleep">
         <parameter>
-            <literal-expression value="SLEEP(1)" start-index="3" 
stop-index="10" />
+            <function function-name="SLEEP" start-index="3" stop-index="10" 
text="SLEEP(1)">
+                <parameter>
+                    <literal-expression value="1" start-index="9" 
stop-index="9" />
+                </parameter>
+            </function>
         </parameter>
         <parameter>
-            <literal-expression value="SLEEP(2)" start-index="13" 
stop-index="20" />
+            <function function-name="SLEEP" start-index="13" stop-index="20" 
text="SLEEP(2)">
+                <parameter>
+                    <literal-expression value="2" start-index="19" 
stop-index="19" />
+                </parameter>
+            </function>
         </parameter>
     </do>
     
     <do sql-case-id="do_with_function_1">
         <parameter>
+            <function function-name="FROM_BASE64" start-index="3" 
stop-index="54" text="FROM_BASE64(CAST((MID(UUID(),20,64)) AS BINARY(55)))">
+                <parameter>
+                    <function function-name="CAST" start-index="15" 
stop-index="53" text="CAST((MID(UUID(),20,64)) AS BINARY(55))">
+                        <parameter>
+                            <data-type start-index="43" stop-index="52" 
value="BINARY"  />
+                        </parameter>
+                    </function>
+                </parameter>
+            </function>
             <literal-expression value="FROM_BASE64(CAST((MID(UUID(),20,64)) AS 
BINARY(55)))" start-index="3" stop-index="54" />
         </parameter>
     </do>
     
     <do sql-case-id="do_with_function_2">
         <parameter>
-            <literal-expression value="FROM_BASE64(CAST(RIGHT(11,1)AS 
BINARY(24)))" start-index="3" stop-index="45" />
+            <function function-name="FROM_BASE64" start-index="3" 
stop-index="45" text="FROM_BASE64(CAST(RIGHT(11,1)AS BINARY(24)))">
+                <parameter>
+                    <function function-name="CAST" start-index="15" 
stop-index="44" text="CAST(RIGHT(11,1)AS BINARY(24))">
+                        <parameter>
+                            <data-type start-index="34" stop-index="43" 
value="BINARY"  />
+                        </parameter>
+                    </function>
+                </parameter>
+            </function>
         </parameter>
     </do>
     
@@ -55,10 +84,45 @@
             <literal-expression value="COUNT(DISTINCT ROUND(CAST(SLEEP(0) AS 
DECIMAL), NULL))" start-index="3" stop-index="56" />
         </parameter>
     </do>
-    
+
+    <do sql-case-id="do_with_function_4">
+        <parameter>
+            <function function-name="ST_AsText" start-index="3" 
stop-index="28" text="ST_AsText(@centroid_point)">
+                <parameter>
+                    <variable-segment start-index="13" stop-index="27" 
variable="centroid_point" />
+                </parameter>
+            </function>
+        </parameter>
+    </do>
+
+    <do sql-case-id="do_with_function_5">
+        <parameter>
+            <function function-name="SLEEP" start-index="3" stop-index="10" 
text="SLEEP(5)">
+                <parameter>
+                    <literal-expression value="5" start-index="9" 
stop-index="9" />
+                </parameter>
+            </function>
+        </parameter>
+        <parameter>
+            <function function-name="SLEEP" start-index="18" stop-index="25" 
text="SLEEP(5)">
+                <parameter>
+                    <literal-expression value="5" start-index="24" 
stop-index="24" />
+                </parameter>
+            </function>
+        </parameter>
+    </do>
+
     <do sql-case-id="do_with_crc32_function">
         <parameter>
-            <literal-expression value="CRC32(CHAR(1.134475E+308))" 
start-index="3" stop-index="28" />
+            <function function-name="CRC32" start-index="3" stop-index="28" 
text="CRC32(CHAR(1.134475E+308))">
+                <parameter>
+                    <function function-name="CHAR" start-index="9" 
stop-index="27" text="CHAR(1.134475E+308)">
+                        <parameter>
+                            <literal-expression value="1.134475E+308" 
start-index="14" stop-index="26" />
+                        </parameter>
+                    </function>
+                </parameter>
+            </function>
         </parameter>
     </do>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/do.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/do.xml
index a1148208e00..2e839dca9cf 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/do.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/do.xml
@@ -23,5 +23,7 @@
     <sql-case id="do_with_function_1" value="DO 
FROM_BASE64(CAST((MID(UUID(),20,64)) AS BINARY(55)))" db-types="MySQL" />
     <sql-case id="do_with_function_2" value="DO FROM_BASE64(CAST(RIGHT(11,1)AS 
BINARY(24)))" db-types="MySQL" />
     <sql-case id="do_with_function_3" value="DO COUNT(DISTINCT 
ROUND(CAST(SLEEP(0) AS DECIMAL), NULL))" db-types="MySQL" />
+    <sql-case id="do_with_function_4" value="DO ST_AsText(@centroid_point) as 
centroid" db-types="MySQL" />
+    <sql-case id="do_with_function_5" value="DO SLEEP(5) as t, SLEEP(5) as t1" 
db-types="MySQL" />
     <sql-case id="do_with_crc32_function" value="DO 
CRC32(CHAR(1.134475E+308))" db-types="MySQL" />
 </sql-cases>

Reply via email to