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
=> 'Hello');" db-types="PostgreSQL" />
<sql-case id="call_with_named_notation_with_apos" value="CALL p(b =>
'Hello', a => 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>