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" />

Reply via email to