You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/07/02 05:01:01 UTC
[shardingsphere] branch master updated: Parsing scope of variable prefixed with @@ in MySQL SET statement (#18771)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 01da2ae44a4 Parsing scope of variable prefixed with @@ in MySQL SET statement (#18771)
01da2ae44a4 is described below
commit 01da2ae44a409200010d93e141a035c6040f8d0e
Author: 吴伟杰 <wu...@apache.org>
AuthorDate: Sat Jul 2 13:00:55 2022 +0800
Parsing scope of variable prefixed with @@ in MySQL SET statement (#18771)
* Parsing scope of variable prefixed with @@ in MySQL SET statement
* Add test cases for MySQL SET statement
* Make default scope to upper case
---
.../statement/impl/MySQLDALStatementSQLVisitor.java | 7 +++++--
.../src/main/resources/case/dal/set.xml | 15 +++++++++++++++
.../src/main/resources/sql/supported/dal/set.xml | 3 +++
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
index 861064bf608..63185b4cc38 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
@@ -21,7 +21,6 @@ import lombok.NoArgsConstructor;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
import org.apache.shardingsphere.sql.parser.api.visitor.operation.SQLStatementVisitor;
import org.apache.shardingsphere.sql.parser.api.visitor.type.DALSQLVisitor;
-import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowProfilesContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AlterResourceGroupContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.AnalyzeTableContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.BinaryLogFileIndexNumberContext;
@@ -52,6 +51,7 @@ import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.KillCon
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.LoadIndexInfoContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.LoadTableIndexListContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.OptimizeTableContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.OptionTypeContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.OptionValueContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.OptionValueListContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.OptionValueNoOptionTypeContext;
@@ -98,6 +98,7 @@ import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowPro
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowProcedureStatusContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowProcesslistContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowProfileContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowProfilesContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowRelaylogEventContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowReplicaStatusContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowReplicasContext;
@@ -955,9 +956,11 @@ public final class MySQLDALStatementSQLVisitor extends MySQLStatementSQLVisitor
result.setVariable(variable);
result.setAssignValue(ctx.expr().getText());
} else if (null != ctx.setSystemVariable()) {
- variable.setVariable(ctx.setSystemVariable().getText());
+ variable.setVariable(ctx.setSystemVariable().internalVariableName().getText());
result.setVariable(variable);
result.setAssignValue(ctx.setExprOrDefault().getText());
+ OptionTypeContext optionType = ctx.setSystemVariable().optionType();
+ variable.setScope(null != optionType ? optionType.getText() : "SESSION");
}
return result;
}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/set.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/set.xml
index 98ce443a24f..bb8b242dd5f 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/set.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/set.xml
@@ -32,6 +32,21 @@
<parameter name="configuration_parameter" scope="SESSION" />
</parameter-assign>
</set-parameter>
+ <set-parameter sql-case-id="set_parameter_equal_at_at_session_mysql">
+ <parameter-assign value="'value'">
+ <parameter name="configuration_parameter" scope="SESSION" />
+ </parameter-assign>
+ </set-parameter>
+ <set-parameter sql-case-id="set_parameter_equal_at_at_without_scope_mysql">
+ <parameter-assign value="'value'">
+ <parameter name="configuration_parameter" scope="SESSION" />
+ </parameter-assign>
+ </set-parameter>
+ <set-parameter sql-case-id="set_parameter_equal_at_at_global_mysql">
+ <parameter-assign value="'value'">
+ <parameter name="configuration_parameter" scope="GLOBAL" />
+ </parameter-assign>
+ </set-parameter>
<set-parameter sql-case-id="set_parameter_to">
<parameter-assign value="'value'">
<parameter name="configuration_parameter" />
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/set.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/set.xml
index ff2007ba856..c3ac53b3aba 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/set.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/set.xml
@@ -20,6 +20,9 @@
<sql-case id="set_parameter_equal" value="SET configuration_parameter = 'value'" db-types="PostgreSQL,openGauss, MySQL" />
<sql-case id="set_parameter_equal_number" value="SET extra_float_digits = 3" db-types="PostgreSQL,openGauss, MySQL" />
<sql-case id="set_parameter_equal_session_mysql" value="SET SESSION configuration_parameter = 'value'" db-types="MySQL" />
+ <sql-case id="set_parameter_equal_at_at_session_mysql" value="SET @@SESSION.configuration_parameter = 'value'" db-types="MySQL" />
+ <sql-case id="set_parameter_equal_at_at_without_scope_mysql" value="SET @@configuration_parameter = 'value'" db-types="MySQL" />
+ <sql-case id="set_parameter_equal_at_at_global_mysql" value="SET @@GLOBAL.configuration_parameter = 'value'" db-types="MySQL" />
<sql-case id="set_parameter_to" value="SET configuration_parameter TO 'value'" db-types="PostgreSQL,openGauss" />
<sql-case id="set_parameter_for_session_scope" value="SET SESSION configuration_parameter TO 'value'" db-types="PostgreSQL,openGauss" />
<sql-case id="set_parameter_for_local_scope" value="SET LOCAL configuration_parameter TO 'value'" db-types="PostgreSQL,openGauss" />