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 bd01cf382fc Support Mysql CALL sql with mysql prefix (#31133)
bd01cf382fc is described below

commit bd01cf382fc0943f1f4c05f6a1c35b2cfe08ec47
Author: LotusMoon <[email protected]>
AuthorDate: Mon May 6 18:51:35 2024 +0800

    Support Mysql CALL sql with mysql prefix (#31133)
---
 .../mysql/src/main/antlr4/imports/mysql/DMLStatement.g4        |  2 +-
 .../mysql/visitor/statement/type/MySQLDMLStatementVisitor.java |  6 +++++-
 test/it/parser/src/main/resources/case/dml/call.xml            | 10 ++++++++++
 test/it/parser/src/main/resources/sql/supported/dml/call.xml   |  1 +
 4 files changed, 17 insertions(+), 2 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 bfd1de1e7b5..c85b7aba130 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
@@ -163,7 +163,7 @@ querySpecification
     ;
 
 call
-    : CALL identifier (LP_ (expr (COMMA_ expr)*)? RP_)?
+    : CALL (owner DOT_)? identifier (LP_ (expr (COMMA_ expr)*)? RP_)?
     ;
 
 doStatement
diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
index b32aac425a7..b6ca42d8630 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
@@ -63,7 +63,11 @@ public final class MySQLDMLStatementVisitor extends 
MySQLStatementVisitor implem
     public ASTNode visitCall(final CallContext ctx) {
         List<ExpressionSegment> params = new ArrayList<>();
         ctx.expr().forEach(each -> params.add((ExpressionSegment) 
visit(each)));
-        return new MySQLCallStatement(ctx.identifier().getText(), params);
+        String procedureName = ctx.identifier().getText();
+        if (null != ctx.owner()) {
+            procedureName = 
ctx.owner().getText().concat(".").concat(procedureName);
+        }
+        return new MySQLCallStatement(procedureName, params);
     }
     
     @Override
diff --git a/test/it/parser/src/main/resources/case/dml/call.xml 
b/test/it/parser/src/main/resources/case/dml/call.xml
index cec4e3986ad..0b7a46a1bbb 100644
--- a/test/it/parser/src/main/resources/case/dml/call.xml
+++ b/test/it/parser/src/main/resources/case/dml/call.xml
@@ -143,4 +143,14 @@
             <common-expression literal-text="1.0/0.1" start-index="7" 
stop-index="13" />
         </procedure-parameter>
     </call>
+
+    <call sql-case-id="call_with_mysql_firewall_group_enlist">
+        <procedure-name name="mysql.sp_firewall_group_enlist"/>
+        <procedure-parameter>
+            <literal-expression value="fwgrp" start-index="36" 
stop-index="42"/>
+        </procedure-parameter>
+        <procedure-parameter>
+            <literal-expression value="member2@localhost" start-index="45" 
stop-index="63"/>
+        </procedure-parameter>
+    </call>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/call.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/call.xml
index 58f882d6968..5e285a74748 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/call.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/call.xml
@@ -29,4 +29,5 @@
     <sql-case id="call_with_mixed_notation_with_apos" value="CALL p(10, b 
=&gt; &apos;Hello&apos;);" db-types="PostgreSQL" />
     <sql-case id="call_with_named_notation_with_apos" value="CALL p(b =&gt; 
&apos;Hello&apos;, a =&gt; 10);" db-types="PostgreSQL" />
     <sql-case id="call_with_positional_notation_with_expression" value="CALL 
p(1.0/0.1);" db-types="PostgreSQL" />
+    <sql-case id="call_with_mysql_firewall_group_enlist" value="CALL 
mysql.sp_firewall_group_enlist('fwgrp', 'member2@localhost')" db-types="MySQL"/>
 </sql-cases>

Reply via email to