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