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 3c478b2f7e0 Fix SQLParsingException when using reserved word `order` 
in ORDER BY clause (#37958)
3c478b2f7e0 is described below

commit 3c478b2f7e0c640e5b114063dc2b86f7332e9ff1
Author: Claire <[email protected]>
AuthorDate: Thu Feb 5 09:17:44 2026 +0800

    Fix SQLParsingException when using reserved word `order` in ORDER BY clause 
(#37958)
    
    * support order by order
    
    * release-notes
    
    * update xml
---
 RELEASE-NOTES.md                                   |  1 +
 .../src/main/antlr4/imports/doris/BaseRule.g4      |  1 +
 .../src/main/antlr4/imports/firebird/BaseRule.g4   |  1 +
 .../hive/src/main/antlr4/imports/hive/BaseRule.g4  |  1 +
 .../src/main/antlr4/imports/presto/BaseRule.g4     |  1 +
 .../src/main/antlr4/imports/sql92/BaseRule.g4      |  1 +
 .../src/main/antlr4/imports/sqlserver/BaseRule.g4  |  2 +-
 .../parser/src/main/resources/case/dml/select.xml  | 26 ++++++++++++++++++++++
 .../main/resources/sql/supported/dml/select.xml    |  2 ++
 9 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index aea2c709e27..57ebd82d78b 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -9,6 +9,7 @@
 1. SQL Parser: Support Oracle SQL parser correctly extract REGEXP_SUBSTR 
parameters - [#37924](https://github.com/apache/shardingsphere/pull/37924)
 2. SQL Parser: Fix escape '\' in SQL causing DialectSQLParsingException - 
[#37943](https://github.com/apache/shardingsphere/pull/37943)
 3. SQL Parser: Fix error parsing \l command SQL statement when front-end 
protocol is og - [#37953](https://github.com/apache/shardingsphere/pull/37953)
+4. SQL Parser:Fix SQLParsingException when using reserved word `order` in 
ORDER BY clause - [#37958](https://github.com/apache/shardingsphere/pull/37958)
 
 ## Release 5.5.3
 
diff --git 
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4 
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
index dc097b4458e..03805cc0bc4 100644
--- a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
+++ b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
@@ -370,6 +370,7 @@ identifierKeywordsUnambiguous
     | OPEN
     | OPTIONAL
     | OPTIONS
+    | ORDER
     | ORDINALITY
     | ORGANIZATION
     | OTHERS
diff --git 
a/parser/sql/engine/dialect/firebird/src/main/antlr4/imports/firebird/BaseRule.g4
 
b/parser/sql/engine/dialect/firebird/src/main/antlr4/imports/firebird/BaseRule.g4
index 602ef184bc1..333ffdfa9ef 100644
--- 
a/parser/sql/engine/dialect/firebird/src/main/antlr4/imports/firebird/BaseRule.g4
+++ 
b/parser/sql/engine/dialect/firebird/src/main/antlr4/imports/firebird/BaseRule.g4
@@ -77,6 +77,7 @@ unreservedWord
     | LENGTH
     | MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE92 | MUMPS
     | NAME | NULLABLE | NUMBER
+    | ORDER
     | PASCAL | PLI
     | REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE 
| ROW_COUNT
     | SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
diff --git 
a/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/BaseRule.g4 
b/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/BaseRule.g4
index 2c91c97baa5..3ff5612528f 100644
--- a/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/BaseRule.g4
+++ b/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/BaseRule.g4
@@ -339,6 +339,7 @@ identifierKeywordsUnambiguous
     | OPEN
     | OPTIONAL
     | OPTIONS
+    | ORDER
     | ORDINALITY
     | ORGANIZATION
     | OTHERS
diff --git 
a/parser/sql/engine/dialect/presto/src/main/antlr4/imports/presto/BaseRule.g4 
b/parser/sql/engine/dialect/presto/src/main/antlr4/imports/presto/BaseRule.g4
index e9097a67281..2ed8690e347 100644
--- 
a/parser/sql/engine/dialect/presto/src/main/antlr4/imports/presto/BaseRule.g4
+++ 
b/parser/sql/engine/dialect/presto/src/main/antlr4/imports/presto/BaseRule.g4
@@ -343,6 +343,7 @@ identifierKeywordsUnambiguous
     | OPEN
     | OPTIONAL
     | OPTIONS
+    | ORDER
     | ORDINALITY
     | ORGANIZATION
     | OTHERS
diff --git 
a/parser/sql/engine/dialect/sql92/src/main/antlr4/imports/sql92/BaseRule.g4 
b/parser/sql/engine/dialect/sql92/src/main/antlr4/imports/sql92/BaseRule.g4
index 6d3d1da193a..bbde8e425a5 100644
--- a/parser/sql/engine/dialect/sql92/src/main/antlr4/imports/sql92/BaseRule.g4
+++ b/parser/sql/engine/dialect/sql92/src/main/antlr4/imports/sql92/BaseRule.g4
@@ -77,6 +77,7 @@ unreservedWord
     | LENGTH
     | MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE92 | MUMPS
     | NAME | NULLABLE | NUMBER
+    | ORDER
     | PASCAL | PLI
     | REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE 
| ROW_COUNT
     | SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
diff --git 
a/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
 
b/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
index 9ea2035af6a..90a8cb74d62 100644
--- 
a/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
+++ 
b/parser/sql/engine/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
@@ -84,7 +84,7 @@ unreservedWord
     | DISTRIBUTION | DOCUMENT | DURABILITY | ENCRYPTED | FILESTREAM | 
FILETABLE | FOLLOWING
     | HASH | HEAP | INBOUND | INFINITE | LOGIN | MASKED | MAXDOP 
     | MINUTES | MONTHS | MOVE | NOCHECK | NONCLUSTERED | OBJECT | OFF
-    | ONLINE | OUTBOUND | OVER | PAGE | PARTITIONS | PAUSED | PERIOD
+    | ONLINE | ORDER | OUTBOUND | OVER | PAGE | PARTITIONS | PAUSED | PERIOD
     | PERSISTED | PRECEDING | RANDOMIZED | RANGE | REBUILD | REPLICATE | 
REPLICATION
     | RESUMABLE | ROWGUIDCOL | SAVE | SELF | SPARSE | SWITCH | TRAN
     | TRANCOUNT | UNBOUNDED | YEARS | WEEKS | ABORT_AFTER_WAIT | 
ALLOW_PAGE_LOCKS | ALLOW_ROW_LOCKS
diff --git a/test/it/parser/src/main/resources/case/dml/select.xml 
b/test/it/parser/src/main/resources/case/dml/select.xml
index 2aaf5fc7ff1..43833d5a56d 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -13713,6 +13713,32 @@
             </expr>
         </where>
     </select>
+    
+    <select sql-case-id="select_order_by_order">
+        <projections start-index="7" stop-index="8">
+            <column-projection name="id" start-index="7" stop-index="8" />
+        </projections>
+        <from>
+            <simple-table name="test" start-index="15" stop-index="18" />
+        </from>
+        <order-by>
+            <column-item name="order" start-delimiter="`" end-delimiter="`" 
start-index="29" stop-index="35" />
+        </order-by>
+    </select>
+
+    <select sql-case-id="select_order_by_order_two">
+        <projections start-index="7" stop-index="8">
+            <column-projection name="id" start-index="7" stop-index="8" />
+        </projections>
+        <from>
+            <simple-table name="t_test" start-index="15" stop-index="20" />
+        </from>
+        <order-by>
+            <column-item name="order" start-index="31" stop-index="42">
+                <owner name="t_test" start-index="31" stop-index="36" />
+            </column-item>
+        </order-by>
+    </select>
 
     <select sql-case-id="select_pg_database_info">
         <projections start-index="7" stop-index="250">
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/select.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/select.xml
index 7279a7c32b6..4a7d30cdd3e 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select.xml
@@ -495,5 +495,7 @@
     <sql-case id="select_format_function_oracle" value="SELECT FORMAT('abc', 
'999') FROM dual" db-types="Oracle" />
     <sql-case id="select_first_value_oracle" value="SELECT FIRST_VALUE(salary) 
OVER (ORDER BY salary) FROM employees" db-types="Oracle" />
     <sql-case id="select_datetime_lbe_literal_oracle" value="SELECT {ts 
'2020-02-02 10:00:00'} FROM dual" db-types="Oracle" />
+    <sql-case id="select_order_by_order" value="SELECT id FROM test ORDER BY 
`order` " db-types="MySQL,Hive,Doris,Presto" />
+    <sql-case id="select_order_by_order_two" value="SELECT id FROM t_test 
ORDER BY t_test.order" 
db-types="MySQL,Hive,Doris,SQLServer,Firebird,SQL92,Presto" />
     <sql-case id="select_pg_database_info" value="SELECT d.datname as 
&quot;Name&quot;, pg_catalog.pg_get_userbyid(d.datdba) as &quot;Owner&quot;, 
pg_catalog.pg_encoding_to_char(d.encoding) as &quot;Encoding&quot;, 
d.datcollate as &quot;Collate&quot;, d.datctype as &quot;Ctype&quot;, 
pg_catalog.array_to_string(d.datacl, E'\n') AS &quot;Access privileges&quot; 
FROM pg_catalog.pg_database d ORDER BY 1;" db-types="openGauss" />
 </sql-cases>

Reply via email to