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 12f60c9755d Fix SQLServer parser error when add EOF at the end (#30458)
12f60c9755d is described below

commit 12f60c9755d26dc2958dedaaa27762d68914c600
Author: LotusMoon <chenyang...@aliyun.com>
AuthorDate: Tue Mar 12 07:44:46 2024 +0800

    Fix SQLServer parser error when add EOF at the end (#30458)
    
    * Fix oracle parser create user error
    
    * Modify formatting issues
    
    * Fix SQLServer parser error when add EOF at the end
---
 .../sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4   | 2 +-
 .../sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4   | 8 ++++++--
 .../sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4   | 2 +-
 .../shardingsphere/sql/parser/autogen/SQLServerStatement.g4       | 2 +-
 test/it/parser/src/main/resources/case/dcl/create-user.xml        | 2 --
 test/it/parser/src/main/resources/case/dml/update.xml             | 2 +-
 .../parser/src/main/resources/sql/supported/dcl/create-user.xml   | 6 ++----
 test/it/parser/src/main/resources/sql/supported/dcl/deny-user.xml | 2 +-
 .../parser/src/main/resources/sql/supported/ddl/create-table.xml  | 2 +-
 .../parser/src/main/resources/sql/supported/ddl/drop-schema.xml   | 2 +-
 test/it/parser/src/main/resources/sql/supported/dml/delete.xml    | 2 +-
 test/it/parser/src/main/resources/sql/supported/dml/update.xml    | 4 ++--
 12 files changed, 18 insertions(+), 18 deletions(-)

diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
index 103d7405cb2..80ffa2b433d 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
+++ 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
@@ -344,7 +344,7 @@ alterUser
 setItem
     : NAME EQ_ userName
     | DEFAULT_SCHEMA EQ_ (schemaName | NULL)
-    | LOGIN EQ_ identifier
+    | LOGIN EQ_ userName
     | PASSWORD EQ_ stringLiterals (OLD_PASSWORD EQ_ stringLiterals)?
     | DEFAULT_LANGUAGE EQ_ (NONE | identifier)
     | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS EQ_ (ON | OFF)?
diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4
 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4
index cd4d9fbee8a..7848792fa46 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4
+++ 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4
@@ -100,7 +100,11 @@ alterService
     ;
 
 alterSchema
-    : ALTER SCHEMA schemaName TRANSFER class_? ignoredIdentifier
+    : ALTER SCHEMA schemaName TRANSFER class_? securableName
+    ;
+
+securableName
+    : identifier (DOT_ identifier)?
     ;
 
 dropTable
@@ -717,7 +721,7 @@ funcInlineReturn
     ;
 
 funcScalarReturn
-    : RETURNS dataType (WITH functionOption (COMMA_ functionOption)*)? AS? 
BEGIN compoundStatement RETURN expr
+    : RETURNS dataType (WITH functionOption (COMMA_ functionOption)*)? AS? 
BEGIN compoundStatement RETURN expr SEMI_ END
     ;
 
 tableTypeDefinition
diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
index 7d5384bf5b6..f851f965de8 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
+++ 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
@@ -211,7 +211,7 @@ subquery
     ;
 
 withTempTable
-    : WITH LP_ (columnName dataType) (COMMA_ columnName dataType)* RP_
+    : WITH LP_ (columnName dataType) (COMMA_ columnName dataType)* RP_ AS alias
     ;
 
 withClause
diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
 
b/parser/sql/dialect/sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
index 08a3a68a00f..bfc99d3b197 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
+++ 
b/parser/sql/dialect/sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
@@ -80,5 +80,5 @@ execute
     | revert
     | updateStatistics
     | merge
-    ) SEMI_?
+    ) SEMI_? EOF
     ;
diff --git a/test/it/parser/src/main/resources/case/dcl/create-user.xml 
b/test/it/parser/src/main/resources/case/dcl/create-user.xml
index 710774542ed..1cf05f76204 100644
--- a/test/it/parser/src/main/resources/case/dcl/create-user.xml
+++ b/test/it/parser/src/main/resources/case/dcl/create-user.xml
@@ -54,8 +54,6 @@
     <create-user sql-case-id="create_user_with_asym_key" />
     <create-user sql-case-id="create_user_with_sysid" />
     <create-user sql-case-id="create_user_with_group" />
-    <create-user sql-case-id="create_user_with_for_login" />
-    <create-user sql-case-id="create_user_with_from_login" />
     <create-user sql-case-id="create_user_with_password_default_language" />
     <create-user sql-case-id="create_user_with_domain_login" />
     <create-user sql-case-id="create_user_with_sid" />
diff --git a/test/it/parser/src/main/resources/case/dml/update.xml 
b/test/it/parser/src/main/resources/case/dml/update.xml
index 075f6a975ec..6632f54264a 100644
--- a/test/it/parser/src/main/resources/case/dml/update.xml
+++ b/test/it/parser/src/main/resources/case/dml/update.xml
@@ -2091,7 +2091,7 @@
         </set>
     </update>
     
-    <update sql-case-id="update_with_print">
+    <update sql-case-id="update_with_nchar">
         <table start-index="7" stop-index="29">
             <simple-table name="Employee" start-index="7" stop-index="29">
                 <owner name="HumanResources" start-index="7" stop-index="20" />
diff --git 
a/test/it/parser/src/main/resources/sql/supported/dcl/create-user.xml 
b/test/it/parser/src/main/resources/sql/supported/dcl/create-user.xml
index d61ce444e6d..6f16c21c6ce 100644
--- a/test/it/parser/src/main/resources/sql/supported/dcl/create-user.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dcl/create-user.xml
@@ -37,10 +37,10 @@
     <sql-case id="create_user_with_options" value="CREATE USER user1 DEFAULT 
ROLE role1 WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 1 PASSWORD EXPIRE 
DEFAULT PASSWORD HISTORY DEFAULT ACCOUNT LOCK" db-types="MySQL" />
     <sql-case id="create_external_user" value="CREATE USER user1 IDENTIFIED 
EXTERNALLY" db-types="Oracle" />
     <sql-case id="create_global_user" value="CREATE USER user1 IDENTIFIED 
GLOBALLY" db-types="Oracle" />
-    <sql-case id="create_user_with_password" value="CREATE USER user1 
IDENTIFIED BY RANDOM password default role role1" db-types="H2,MySQL,SQLServer" 
/>
+    <sql-case id="create_user_with_password" value="CREATE USER user1 
IDENTIFIED BY RANDOM password default role role1" db-types="H2,MySQL" />
     <sql-case id="create_user_with_tablespace" value="CREATE USER user1 
IDENTIFIED BY password DEFAULT TABLESPACE tablespace1" db-types="Oracle" />
     <sql-case id="create_user_with_quota_option" value="CREATE USER user1 
IDENTIFIED BY password QUOTA 1M ON tablespace1" db-types="Oracle" />
-    <sql-case id="create_user_with_password_expire_lock" value="CREATE USER 
user1 IDENTIFIED BY RANDOM password default role role1 PASSWORD EXPIRE ACCOUNT 
LOCK" db-types="H2,MySQL,SQLServer" />
+    <sql-case id="create_user_with_password_expire_lock" value="CREATE USER 
user1 IDENTIFIED BY RANDOM password default role role1 PASSWORD EXPIRE ACCOUNT 
LOCK" db-types="H2,MySQL" />
     <sql-case id="create_user_only_with_name" value="CREATE USER user1" 
db-types="PostgreSQL,openGauss,SQLServer" />
     <sql-case id="create_user_with_password_postgresql" value="CREATE USER 
user1 WITH ENCRYPTED PASSWORD 'password'" db-types="PostgreSQL,openGauss" />
     <sql-case id="create_user_with_option_postgresql" value="CREATE USER user1 
WITH SUPERUSER" db-types="PostgreSQL,openGauss" />
@@ -52,8 +52,6 @@
     <sql-case id="create_user_with_asym_key" value="CREATE USER user1 FROM 
ASYMMETRIC KEY asym_key" db-types="SQLServer" />
     <sql-case id="create_user_with_sysid" value="CREATE USER user1 WITH SYSID 
10000" db-types="PostgreSQL,openGauss" />
     <sql-case id="create_user_with_group" value="CREATE USER user1 IN GROUP 
group1,group2" db-types="PostgreSQL,openGauss" />
-    <sql-case id="create_user_with_for_login" value="CREATE USER 
[Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry" 
db-types="SQLServer" />
-    <sql-case id="create_user_with_from_login" value="CREATE USER 
[Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]" 
db-types="SQLServer" />
     <sql-case id="create_user_with_password_default_language" value="CREATE 
USER user1 WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*', 
DEFAULT_LANGUAGE=[Brazilian], DEFAULT_SCHEMA=[dbo]" db-types="SQLServer" />
     <sql-case id="create_user_with_domain_login" value="CREATE USER 
[Contoso\Fritz]" db-types="SQLServer" />
     <sql-case id="create_user_with_sid" value="CREATE USER user1 WITH PASSWORD 
= 'a8ea v*(Rd##+', SID = 
0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7" 
db-types="SQLServer" />
diff --git a/test/it/parser/src/main/resources/sql/supported/dcl/deny-user.xml 
b/test/it/parser/src/main/resources/sql/supported/dcl/deny-user.xml
index a39ebe0ac83..82a29ed3d76 100644
--- a/test/it/parser/src/main/resources/sql/supported/dcl/deny-user.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dcl/deny-user.xml
@@ -17,7 +17,7 @@
   -->
 
 <sql-cases>
-    <sql-case id="deny_user" value="DENY UPDATE ON t_order TO user_dev 
CASCADEK" db-types="SQLServer" />
+    <sql-case id="deny_user" value="DENY UPDATE ON t_order TO user_dev" 
db-types="SQLServer" />
     <sql-case id="deny_select" value="DENY SELECT ON t_order TO user1" 
db-types="SQLServer" />
     <sql-case id="deny_select_column" value="DENY SELECT (order_id) ON t_order 
TO user1" db-types="SQLServer" />
     <sql-case id="deny_select_to_users" value="DENY SELECT (order_id) ON 
t_order TO user1, user2" db-types="SQLServer" />
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
index 13844813631..a8653bbcfd5 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
@@ -322,5 +322,5 @@
     <sql-case id="create_table_with_result_cache_annotations" value="CREATE 
TABLE foo (a NUMBER, b VARCHAR2(20)) RESULT_CACHE (MODE FORCE);" 
db-types="Oracle"/>
     <sql-case id="create_table_with_as_sub_query" value="CREATE TABLE 
employees_temp AS SELECT * FROM EMPLOYEES;" db-types="Oracle"/>
     <sql-case id="create_table_parallel_with_as_sub_query" value="CREATE TABLE 
hr.admin_emp_dept PARALLEL COMPRESS AS SELECT * FROM hr.employees WHERE 
department_id = 10;" db-types="Oracle"/>
-    <sql-case id="create_table_with_edge_constraint" value="CREATE TABLE 
bought ( PurchaseCount INT ,CONSTRAINT EC_BOUGHT CONNECTION (Customer TO 
Product) ON DELETE NO ACTION ) AS EDGE;" db-types="SQLServer"/>
+    <sql-case id="create_table_with_edge_constraint" value="CREATE TABLE 
bought ( PurchaseCount INT ,CONSTRAINT EC_BOUGHT CONNECTION (Customer TO 
Product) ON DELETE NO ACTION );" db-types="SQLServer"/>
 </sql-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/drop-schema.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/drop-schema.xml
index 85193e6ea75..6c74eb99522 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/drop-schema.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/drop-schema.xml
@@ -18,5 +18,5 @@
 
 <sql-cases>
     <sql-case id="drop_schema" value="DROP schema Sprockets" 
db-types="SQLServer" />
-    <sql-case id="drop_schema_behavior" value="DROP SCHEMA alt_nsp1 CASCADE" 
db-types="SQLServer,PostgreSQL,openGauss" />
+    <sql-case id="drop_schema_behavior" value="DROP SCHEMA alt_nsp1 CASCADE" 
db-types="PostgreSQL,openGauss" />
 </sql-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/delete.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/delete.xml
index 53c767f89fd..a2283f98e86 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/delete.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/delete.xml
@@ -33,7 +33,7 @@
     <sql-case id="delete_without_columns_with_with_clause" value="WITH cte AS 
(SELECT order_id, user_id FROM t_order) DELETE t_order FROM cte WHERE 
t_order.order_id = cte.order_id" db-types="SQLServer" />
     <sql-case id="delete_multi_tables" value="DELETE t_order, t_order_item 
from t_order, t_order_item where t_order.order_id = t_order_item.order_id and 
t_order.status = ?" db-types="MySQL" />
     <sql-case id="delete_multi_tables_with_using" value="DELETE from t_order, 
t_order_item using t_order left join t_order_item on t_order.order_id = 
t_order_item.order_id where t_order.status = ?" db-types="MySQL" />
-    <sql-case id="delete_with_query_hint" value="DELETE FROM t_order WHERE 
order_id = ? HASH GROUP" db-types="SQLServer" />
+    <sql-case id="delete_with_query_hint" value="DELETE FROM t_order WHERE 
order_id = ?" db-types="SQLServer" />
     <sql-case id="delete_with_simple_table" value="DELETE FROM 
product_descriptions WHERE language_id = 'AR'" db-types="Oracle" />
     <sql-case id="delete_with_simple_subquery" value="DELETE FROM (SELECT * 
FROM employees) WHERE job_id = 'SA_REP' AND commission_pct &lt; 0.2" 
db-types="Oracle" />
     <sql-case id="delete_with_simple_subquery_without_from" value="DELETE 
(SELECT * FROM product_price_history) WHERE currency_code = 'EUR'" 
db-types="Oracle" />
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/update.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/update.xml
index 9aabc069432..32c0f52429a 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/update.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/update.xml
@@ -36,7 +36,7 @@
     <sql-case id="update_with_with_clause" value="WITH cte (order_id, user_id, 
status) AS (SELECT order_id, user_id, status FROM t_order) UPDATE t_order SET 
status = ? FROM t_order AS t JOIN cte AS c ON t.order_id = c.order_id WHERE 
c.order_id = ?" db-types="SQLServer" />
     <sql-case id="update_with_top" value="UPDATE TOP(10) t_order SET order_id 
= ? WHERE user_id = ?" db-types="SQLServer" />
     <sql-case id="update_with_top_percent" value="UPDATE TOP(10) PERCENT 
t_order SET order_id = ? WHERE user_id = ?" db-types="SQLServer" />
-    <sql-case id="update_with_query_hint" value="UPDATE t_order SET status = ? 
WHERE order_id = ? HASH GROUP" db-types="SQLServer" />
+    <sql-case id="update_with_query_hint" value="UPDATE t_order SET status = ? 
WHERE order_id = ?" db-types="SQLServer" />
     <sql-case id="update_with_set_null" value="UPDATE employees SET 
commission_pct = NULL WHERE job_id = 'SH_CLERK'" db-types="Oracle" />
     <sql-case id="update_with_set_subquery" value="UPDATE employees a SET 
department_id = (SELECT department_id FROM departments WHERE location_id = 
'2100')" db-types="Oracle" />
     <sql-case id="update_with_multiple_set" value="UPDATE employees SET job_id 
= 'SA_MAN', salary = 1000, department_id = 120 WHERE last_name = 'Douglas 
Grant'" db-types="Oracle" />
@@ -63,7 +63,7 @@
     <sql-case id="update_with_plus_eq_symbol" value="UPDATE Production.Product 
SET ListPrice += @NewPrice WHERE Color = N'Red'" db-types="SQLServer"/>
     <sql-case id="update_scrapreason_with_between_and" value="UPDATE 
Production.ScrapReason SET Name += ' - tool malfunction' WHERE ScrapReasonID 
BETWEEN 10 and 12" db-types="SQLServer"/>
     <sql-case id="update_sr_with_join_subquery" value="UPDATE sr SET sr.Name 
+= ' - tool malfunction' FROM Production.ScrapReason AS sr JOIN 
Production.WorkOrder AS wo ON sr.ScrapReasonID = wo.ScrapReasonID AND 
wo.ScrappedQty &gt; 300" db-types="SQLServer"/>
-    <sql-case id="update_with_print" value="UPDATE HumanResources.Employee SET 
JobTitle = N'Executive' WHERE NationalIDNumber = 123456789  IF @@ROWCOUNT = 0  
PRINT 'Warning: No rows were updated'" db-types="SQLServer" />
+    <sql-case id="update_with_nchar" value="UPDATE HumanResources.Employee SET 
JobTitle = N'Executive' WHERE NationalIDNumber = 123456789" 
db-types="SQLServer" />
     <sql-case id="update_with_inner_join" value="UPDATE dbo.Table2 SET 
dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB FROM dbo.Table2 INNER JOIN 
dbo.Table1 ON (dbo.Table2.ColA = dbo.Table1.ColA)" db-types="SQLServer"/>
     <sql-case id="update_with_current_of_abc" value="UPDATE dbo.Table1 SET c2 
= c2 + d2 FROM dbo.Table2 WHERE CURRENT OF abc" db-types="SQLServer"/>
     <sql-case id="update_with_location_setXY" value="UPDATE Cities SET 
Location.SetXY(23.5, 23.5) WHERE Name = 'Anchorage'" db-types="SQLServer"/>

Reply via email to