This is an automated email from the ASF dual-hosted git repository.

panjuan 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 6786750  Add sql parser SQLServer delete query hint statement. (#8689)
6786750 is described below

commit 67867505e7a4f5e0313dd43789f3bc1b69d4dde4
Author: Zonglei Dong <[email protected]>
AuthorDate: Mon Dec 21 11:18:46 2020 +0800

    Add sql parser SQLServer delete query hint statement. (#8689)
    
    * Add sql test case from SQLServer delete query hint statement.
    
    * Add sql parser SQLServer delete query hint statement.
    
    * Remove concat keyword.
    
    Co-authored-by: Zonglei Dong <[email protected]>
---
 .../main/antlr4/imports/sqlserver/DMLStatement.g4  |  54 ++++++++-
 .../src/main/antlr4/imports/sqlserver/Keyword.g4   |  55 ++++++++-
 .../src/main/antlr4/imports/sqlserver/Literals.g4  |  22 +++-
 .../antlr4/imports/sqlserver/SQLServerKeyword.g4   | 126 ++++++++++++++++++++-
 .../src/main/resources/case/dml/delete.xml         |  16 +++
 .../main/resources/sql/supported/dml/delete.xml    |   1 +
 6 files changed, 262 insertions(+), 12 deletions(-)

diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
index 6b3997d..3966c1f 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
@@ -22,7 +22,7 @@ import Symbol, Keyword, SQLServerKeyword, Literals, BaseRule;
 insert
     : withClause? INSERT top? INTO? tableName (AS? alias)? (insertDefaultValue 
| insertValuesClause | insertSelectClause)
     ;
-    
+
 insertDefaultValue
     : columnNames? outputClause? DEFAULT VALUES
     ;
@@ -57,7 +57,7 @@ assignmentValue
     ;
 
 delete
-    : withClause? DELETE top? (singleTableClause | multipleTablesClause) 
outputClause? whereClause?
+    : withClause? DELETE top? (singleTableClause | multipleTablesClause) 
outputClause? whereClause? (OPTION queryHint)?
     ;
 
 singleTableClause
@@ -72,7 +72,7 @@ multipleTableNames
     : tableName DOT_ASTERISK_? (COMMA_ tableName DOT_ASTERISK_?)*
     ;
 
-select 
+select
     : aggregationClause
     ;
 
@@ -184,3 +184,51 @@ outputWithAaterisk
 outputTableName
     : (AT_ name) | tableName
     ;
+
+queryHint
+    : (HASH | ORDER) GROUP
+    | (CONCAT | HASH | MERGE) UNION
+    | (LOOP | MERGE | HASH) JOIN
+    | EXPAND VIEWS
+    | FAST INT_NUM_
+    | FORCE ORDER
+    | (FORCE | DISABLE) EXTERNALPUSHDOWN
+    | (FORCE | DISABLE) SCALEOUTEXECUTION
+    | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
+    | KEEP PLAN
+    | KEEPFIXED PLAN
+    | MAX_GRANT_PERCENT EQ_ DECIMAL_NUM_
+    | MIN_GRANT_PERCENT EQ_ DECIMAL_NUM_
+    | MAXDOP INT_NUM_
+    | MAXRECURSION INT_NUM_
+    | NO_PERFORMANCE_SPOOL
+    | OPTIMIZE FOR LP_ AT_ name (UNKNOWN | EQ_ identifier)* RP_
+    | OPTIMIZE FOR UNKNOWN
+    | PARAMETERIZATION (SIMPLE | FORCED)
+    | QUERYTRACEON INT_NUM_
+    | RECOMPILE
+    | ROBUST PLAN
+    | USE HINT LP_ useHitName* RP_
+    | USE PLAN N STRING_
+    ;
+
+useHitName
+    : SQ_ ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS SQ_
+    | SQ_ ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES SQ_
+    | SQ_ DISABLE_BATCH_MODE_ADAPTIVE_JOINS SQ_
+    | SQ_ DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK SQ_
+    | SQ_ DISABLE_DEFERRED_COMPILATION_TV SQ_
+    | SQ_ DISABLE_INTERLEAVED_EXECUTION_TVF SQ_
+    | SQ_ DISABLE_OPTIMIZED_NESTED_LOOP SQ_
+    | SQ_ DISABLE_OPTIMIZER_ROWGOAL SQ_
+    | SQ_ DISABLE_PARAMETER_SNIFFING SQ_
+    | SQ_ DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK SQ_
+    | SQ_ DISABLE_TSQL_SCALAR_UDF_INLINING SQ_
+    | SQ_ DISALLOW_BATCH_MODE SQ_
+    | SQ_ ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS SQ_
+    | SQ_ ENABLE_QUERY_OPTIMIZER_HOTFIXES SQ_
+    | SQ_ FORCE_DEFAULT_CARDINALITY_ESTIMATION SQ_
+    | SQ_ FORCE_LEGACY_CARDINALITY_ESTIMATION SQ_
+    | SQ_ QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n SQ_
+    | SQ_ QUERY_PLAN_PROFILE SQ_
+    ;
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4
index 6ab5f84..1a3d49f 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4
@@ -430,7 +430,7 @@ MAX
 MIN
     : M I N
     ;
-    
+
 SUM
     : S U M
     ;
@@ -583,8 +583,59 @@ TIES
 EXCEPT
     : E X C E P T
     ;
-   
+
 INTERSECT
     : I N T E R S E C T
     ;
 
+USE
+    : U S E
+    ;
+
+MERGE
+    : M E R G E
+    ;
+
+LOOP
+    : L O O P
+    ;
+
+EXPAND
+    : E X P A N D
+    ;
+
+VIEWS
+    : V I E W S
+    ;
+
+FAST
+    : F A S T
+    ;
+
+FORCE
+    : F O R C E
+    ;
+
+KEEP
+    : K E E P
+    ;
+
+PLAN
+    : P L A N
+    ;
+
+OPTIMIZE
+    : O P T I M I Z E
+    ;
+
+SIMPLE
+    : S I M P L E
+    ;
+
+FORCED
+    : F O R C E D
+    ;
+
+HINT
+    : H I N T
+    ;
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/Literals.g4
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/Literals.g4
index 3674cfc..fd8e727 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/Literals.g4
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/Literals.g4
@@ -23,13 +23,27 @@ IDENTIFIER_
     : LBT_? DQ_? [a-zA-Z_$#][a-zA-Z0-9_$#]* DQ_? RBT_?
     ;
 
-STRING_ 
+STRING_
     : (DQ_ ( '\\'. | '""' | ~('"'| '\\') )* DQ_)
     | (SQ_ ('\\'. | '\'\'' | ~('\'' | '\\'))* SQ_)
     ;
 
 NUMBER_
-    : INT_? DOT_? INT_ (E (PLUS_ | MINUS_)? INT_)?
+    : INT_NUM_
+    | FLOAT_NUM_
+    | DECIMAL_NUM_
+    ;
+
+INT_NUM_
+    : DIGIT+
+    ;
+
+FLOAT_NUM_
+    : INT_NUM_? DOT_? INT_NUM_ E (PLUS_ | MINUS_)? INT_NUM_
+    ;
+
+DECIMAL_NUM_
+    : INT_NUM_? DOT_ INT_NUM_
     ;
 
 HEX_DIGIT_
@@ -40,8 +54,8 @@ BIT_NUM_
     : '0b' ('0' | '1')+ | B SQ_ ('0' | '1')+ SQ_
     ;
 
-fragment INT_
-    : [0-9]+
+fragment DIGIT
+    : [0-9]
     ;
 
 fragment HEX_
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
index 2bcdc33..bdf58d9 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
@@ -166,7 +166,7 @@ MONTHS
 WEEKS
     : W E E K S
     ;
-  
+
 DAYS
     : D A Y S
     ;
@@ -660,11 +660,11 @@ SUBSCRIBE
     ;
 
 QUERY
-    : Q U E R Y 
+    : Q U E R Y
     ;
 
 NOTIFICATIONS
-    : N O T I F I C A T I O N S 
+    : N O T I F I C A T I O N S
     ;
 
 CHECKPOINT
@@ -930,3 +930,123 @@ INSERTED
 DELETED
     : D E L E T E D
     ;
+
+ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
+    : A S S U M E UL_ J O I N UL_ P R E D I C A T E UL_ D E P E N D S UL_ O N 
UL_ F I L T E R S
+    ;
+
+ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
+    : A S S U M E UL_ M I N UL_ S E L E C T I V I T Y UL_ F O R UL_ F I L T E 
R UL_ E S T I M A T E S
+    ;
+
+DISABLE_BATCH_MODE_ADAPTIVE_JOINS
+    : D I S A B L E UL_ B A T C H UL_ M O D E UL_ A D A P T I V E UL_ J O I N S
+    ;
+
+DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK
+    : D I S A B L E UL_ B A T C H UL_ M O D E UL_ M E M O R Y UL_ G R A N T 
UL_ F E E D B A C K
+    ;
+
+DISABLE_DEFERRED_COMPILATION_TV
+    : D I S A B L E UL_ D E F E R R E D UL_ C O M P I L A T I O N UL_ T V
+    ;
+
+DISABLE_INTERLEAVED_EXECUTION_TVF
+    : D I S A B L E UL_ I N T E R L E A V E D UL_ E X E C U T I O N UL_ T V F
+    ;
+
+DISABLE_OPTIMIZED_NESTED_LOOP
+    : D I S A B L E UL_ O P T I M I Z E D UL_ N E S T E D UL_ L O O P
+    ;
+
+DISABLE_OPTIMIZER_ROWGOAL
+    : D I S A B L E UL_ O P T I M I Z E R UL_ R O W G O A L
+    ;
+
+DISABLE_PARAMETER_SNIFFING
+    : D I S A B L E UL_ P A R A M E T E R UL_ S N I F F I N G
+    ;
+
+DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK
+    : D I S A B L E UL_ R O W UL_ M O D E UL_ M E M O R Y UL_ G R A N T UL_ F 
E E D B A C K
+    ;
+
+DISABLE_TSQL_SCALAR_UDF_INLINING
+    : D I S A B L E UL_ T S Q L UL_ S C A L A R UL_ U D F UL_ I N L I N I N G
+    ;
+
+DISALLOW_BATCH_MODE
+    : D I S A L L O W UL_ B A T C H UL_ M O D E
+    ;
+
+ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS
+    : E N A B L E UL_ H I S T UL_ A M E N D M E N T UL_ F O R UL_ A S C UL_ K 
E Y S
+    ;
+
+ENABLE_QUERY_OPTIMIZER_HOTFIXES
+    : E N A B L E UL_ Q U E R Y UL_ O P T I M I Z E R UL_ H O T F I X E S
+    ;
+
+FORCE_DEFAULT_CARDINALITY_ESTIMATION
+    : F O R C E UL_ D E F A U L T UL_ C A R D I N A L I T Y UL_ E S T I M A T 
I O N
+    ;
+
+FORCE_LEGACY_CARDINALITY_ESTIMATION
+    : F O R C E UL_ L E G A C Y UL_ C A R D I N A L I T Y UL_ E S T I M A T I 
O N
+    ;
+
+QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n
+    : Q U E R Y UL_ O P T I M I Z E R UL_ C O M P A T I B I L I T Y UL_ L E V 
E L UL_
+    ;
+
+QUERY_PLAN_PROFILE
+    : Q U E R Y UL_ P L A N UL_ P R O F I L E
+    ;
+
+EXTERNALPUSHDOWN
+    : E X T E R N A L P U S H D O W N
+    ;
+
+SCALEOUTEXECUTION
+    : S C A L E O U T E X E C U T I O N
+    ;
+
+IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
+    : I G N O R E UL_ N O N C L U S T E R E D UL_ C O L U M N S T O R E UL_ I 
N D E X
+    ;
+
+KEEPFIXED
+    : K E E P F I X E D
+    ;
+
+MAX_GRANT_PERCENT
+    : M A X UL_ G R A N T UL_ P E R C E N T
+    ;
+
+MIN_GRANT_PERCENT
+    : M I N UL_ G R A N T UL_ P E R C E N T
+    ;
+
+MAXRECURSION
+    : M A X R E C U R S I O N
+    ;
+
+NO_PERFORMANCE_SPOOL
+    : N O UL_ P E R F O R M A N C E UL_ S P O O L
+    ;
+
+PARAMETERIZATION
+    : P A R A M E T E R I Z A T I O N
+    ;
+
+QUERYTRACEON
+    : Q U E R Y T R A C E O N
+    ;
+
+RECOMPILE
+    : R E C O M P I L E
+    ;
+
+ROBUST
+    : R O B U S T
+    ;
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
index 2e2d288..3903444 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
@@ -403,4 +403,20 @@
         <table name="t_order" start-index="12" stop-index="18"/>
         <table name="t_order_item" start-index="21" stop-index="32"/>
     </delete>
+
+    <delete sql-case-id="delete_with_query_hint" parameters="1000">
+        <table name="t_order" start-index="12" stop-index="18" />
+        <where start-index="20" stop-index="37" literal-stop-index="40">
+            <and-predicate>
+                <predicate start-index="26" stop-index="37" 
literal-stop-index="40">
+                    <column-left-value name="order_id" start-index="26" 
stop-index="33" />
+                    <operator type="=" />
+                    <compare-right-value>
+                        <parameter-marker-expression value="0" 
start-index="37" stop-index="37" />
+                        <literal-expression value="1000" start-index="37" 
stop-index="40" />
+                    </compare-right-value>
+                </predicate>
+            </and-predicate>
+        </where>
+    </delete>
 </sql-parser-test-cases>
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/delete.xml
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/delete.xml
index 739d86c..300550f 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/delete.xml
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/delete.xml
@@ -34,4 +34,5 @@
     <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-cases>

Reply via email to