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 14c38a0568d parser: support SQLServer session SET QUOTED_IDENTIFIER
and TEXTSIZE (#38005)
14c38a0568d is described below
commit 14c38a0568d7978caacea1a1af6927befaa25775
Author: jonasHanhan <[email protected]>
AuthorDate: Wed Feb 11 23:52:18 2026 +0800
parser: support SQLServer session SET QUOTED_IDENTIFIER and TEXTSIZE
(#38005)
---
.../main/antlr4/imports/sqlserver/DALStatement.g4 | 9 ++++++++
.../antlr4/imports/sqlserver/SQLServerKeyword.g4 | 4 ++++
.../sql/parser/autogen/SQLServerStatement.g4 | 1 +
.../type/SQLServerDALStatementVisitor.java | 24 ++++++++++++++++++++++
test/it/parser/src/main/resources/case/dal/set.xml | 10 +++++++++
.../src/main/resources/sql/supported/dal/set.xml | 2 ++
6 files changed, 50 insertions(+)
diff --git
a/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DALStatement.g4
b/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DALStatement.g4
index 80b6fdbea3e..0918c033cf0 100644
---
a/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DALStatement.g4
+++
b/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DALStatement.g4
@@ -23,6 +23,15 @@ explain
: EXPLAIN WITH_RECOMMENDATIONS? explainableStatement
;
+set
+ : SET setParameter
+ ;
+
+setParameter
+ : QUOTED_IDENTIFIER (ON | OFF)
+ | TEXTSIZE numberLiterals
+ ;
+
explainableStatement
: select | insert | update | delete | createTableAsSelectClause
;
diff --git
a/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
b/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
index b3c1c55e5d8..8a930f6eba3 100644
---
a/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
+++
b/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
@@ -1415,6 +1415,10 @@ QUOTED_IDENTIFIER
: Q U O T E D UL_ I D E N T I F I E R
;
+TEXTSIZE
+ : T E X T S I Z E
+ ;
+
NUMERIC_ROUNDABORT
: N U M E R I C UL_ R O U N D A B O R T
;
diff --git
a/parser/sql/engine/dialect/sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
b/parser/sql/engine/dialect/sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
index bfc99d3b197..c67787e4a7c 100644
---
a/parser/sql/engine/dialect/sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
+++
b/parser/sql/engine/dialect/sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
@@ -76,6 +76,7 @@ execute
| alterLogin
| call
| explain
+ | set
| setUser
| revert
| updateStatistics
diff --git
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDALStatementVisitor.java
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDALStatementVisitor.java
index 677c476b258..a76d66b91f6 100644
---
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDALStatementVisitor.java
+++
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDALStatementVisitor.java
@@ -22,9 +22,16 @@ import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DALStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ExplainContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ExplainableStatementContext;
+import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SetContext;
+import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SetParameterContext;
import
org.apache.shardingsphere.sql.parser.engine.sqlserver.visitor.statement.SQLServerStatementVisitor;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.VariableAssignSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.VariableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.ExplainStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.SetStatement;
+
+import java.util.Collections;
/**
* DAL statement visitor for SQLServer.
@@ -40,6 +47,23 @@ public final class SQLServerDALStatementVisitor extends
SQLServerStatementVisito
return new ExplainStatement(getDatabaseType(), (SQLStatement)
visit(ctx.explainableStatement()));
}
+ @Override
+ public ASTNode visitSet(final SetContext ctx) {
+ return new SetStatement(getDatabaseType(),
Collections.singletonList((VariableAssignSegment) visit(ctx.setParameter())));
+ }
+
+ @Override
+ public ASTNode visitSetParameter(final SetParameterContext ctx) {
+ int startIndex = ctx.start.getStartIndex();
+ int stopIndex = ctx.stop.getStopIndex();
+ if (null != ctx.QUOTED_IDENTIFIER()) {
+ VariableSegment variable = new
VariableSegment(ctx.QUOTED_IDENTIFIER().getSymbol().getStartIndex(),
ctx.QUOTED_IDENTIFIER().getSymbol().getStopIndex(), "QUOTED_IDENTIFIER");
+ return new VariableAssignSegment(startIndex, stopIndex, variable,
null == ctx.ON() ? "OFF" : "ON");
+ }
+ VariableSegment variable = new
VariableSegment(ctx.TEXTSIZE().getSymbol().getStartIndex(),
ctx.TEXTSIZE().getSymbol().getStopIndex(), "TEXTSIZE");
+ return new VariableAssignSegment(startIndex, stopIndex, variable,
ctx.numberLiterals().getText());
+ }
+
@Override
public ASTNode visitExplainableStatement(final ExplainableStatementContext
ctx) {
if (null != ctx.select()) {
diff --git a/test/it/parser/src/main/resources/case/dal/set.xml
b/test/it/parser/src/main/resources/case/dal/set.xml
index 7819861a2b9..3b74d3ce3e4 100644
--- a/test/it/parser/src/main/resources/case/dal/set.xml
+++ b/test/it/parser/src/main/resources/case/dal/set.xml
@@ -123,6 +123,16 @@
<parameter name="CLIENT_ENCODING" />
</parameter-assign>
</set-parameter>
+ <set-parameter sql-case-id="set_quoted_identifier_sqlserver">
+ <parameter-assign value="ON">
+ <parameter name="QUOTED_IDENTIFIER" />
+ </parameter-assign>
+ </set-parameter>
+ <set-parameter sql-case-id="set_textsize_sqlserver">
+ <parameter-assign value="2048">
+ <parameter name="TEXTSIZE" />
+ </parameter-assign>
+ </set-parameter>
<set-parameter sql-case-id="set_session_authorization" />
<set-parameter sql-case-id="set_persist_system_variable_doris">
<parameter-assign value="200">
diff --git a/test/it/parser/src/main/resources/sql/supported/dal/set.xml
b/test/it/parser/src/main/resources/sql/supported/dal/set.xml
index 29ed177dcd5..28b3b750048 100644
--- a/test/it/parser/src/main/resources/sql/supported/dal/set.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dal/set.xml
@@ -45,6 +45,8 @@
<sql-case id="set_charset_mysql" value="SET NAMES 'utf8'" db-types="MySQL"
/>
<sql-case id="set_charset_postgresql" value="SET NAMES 'UTF8'"
db-types="PostgreSQL" />
<sql-case id="set_client_encoding" value="SET CLIENT_ENCODING TO 'UTF8'"
db-types="PostgreSQL" />
+ <sql-case id="set_quoted_identifier_sqlserver" value="SET
QUOTED_IDENTIFIER ON" db-types="SQLServer" />
+ <sql-case id="set_textsize_sqlserver" value="SET TEXTSIZE 2048"
db-types="SQLServer" />
<sql-case id="set_session_authorization" value="SET SESSION AUTHORIZATION
user1 PASSWORD 'password'" db-types="openGauss" />
<sql-case id="set_persist_system_variable_doris" value="SET PERSIST
max_connections = 200" db-types="Doris" />
<sql-case id="set_persist_only_system_variable_doris" value="SET
PERSIST_ONLY time_zone = '+08:00'" db-types="Doris" />