This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 a11642a9aed fix:Support for the RANK function (#35991)
a11642a9aed is described below
commit a11642a9aedf03288d23ba6f9f5d291ee48f9784
Author: cxy <[email protected]>
AuthorDate: Tue Jul 15 09:02:14 2025 +0800
fix:Support for the RANK function (#35991)
---
.../src/main/antlr4/imports/sqlserver/BaseRule.g4 | 3 ++-
.../antlr4/imports/sqlserver/SQLServerKeyword.g4 | 4 +++
.../parser/src/main/resources/case/dml/select.xml | 30 ++++++++++++++++++++++
.../main/resources/sql/supported/dml/select.xml | 1 +
4 files changed, 37 insertions(+), 1 deletion(-)
diff --git
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
index 61143b7f01a..166c6a1b3e7 100644
--- a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
+++ b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
@@ -121,7 +121,7 @@ unreservedWord
| ELASTIC_POOL | SERVICE_OBJECTIVE | DATABASE_NAME | ALLOW_CONNECTIONS |
GEO | NAMED | DATEFIRST | BACKUP_STORAGE_REDUNDANCY |
FORCE_FAILOVER_ALLOW_DATA_LOSS | SECONDARY | FAILOVER |
DEFAULT_FULLTEXT_LANGUAGE
| DEFAULT_LANGUAGE | INLINE | NESTED_TRIGGERS | TRANSFORM_NOISE_WORDS |
TWO_DIGIT_YEAR_CUTOFF | PERSISTENT_LOG_BUFFER | DIRECTORY_NAME | DATEFORMAT |
DELAYED_DURABILITY | TRANSFER | SCHEMA | PASSWORD | AUTHORIZATION
| MEMBER | SEARCH | TEXT | SECOND | PRECISION | VIEWS | PROVIDER | COLUMNS
| SUBSTRING | RETURNS | SIZE | CONTAINS | MONTH | INPUT | YEAR
- | TIMESTAMP | TRIM | USER | RIGHT | JSON | SID | OPENQUERY | ACTION |
TARGET | HOUR | MINUTE | TABLE | NODES | VALUE | EXIST | CHANGETABLE | VERSION
| CHANGES | MODEL | AI_GENERATE_EMBEDDINGS | PARAMETERS | USE | FREETEXTTABLE |
NCHAR | LEFT
+ | TIMESTAMP | TRIM | USER | RIGHT | JSON | SID | OPENQUERY | ACTION |
TARGET | HOUR | MINUTE | TABLE | NODES | VALUE | EXIST | CHANGETABLE | VERSION
| CHANGES | MODEL | AI_GENERATE_EMBEDDINGS | PARAMETERS | USE | FREETEXTTABLE |
NCHAR | LEFT | RANK
;
databaseName
@@ -506,6 +506,7 @@ convertExpr
windowFunction
: funcName = (FIRST_VALUE | LAST_VALUE) LP_ expr RP_ nullTreatment?
overClause
| funcName = NTILE LP_ expr RP_ overClause
+ | funcName = RANK LP_ RP_ overClause
| lagLeadFunction
;
diff --git
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
index 2bf6441cab6..b9492ec1008 100644
---
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
+++
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
@@ -2038,3 +2038,7 @@ FREETEXTTABLE
NTILE
: N T I L E
;
+
+RANK
+ : R A N K
+ ;
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 5fb5573d6e9..eca53faf6e7 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -10672,4 +10672,34 @@
</expr>
</where>
</select>
+
+ <select sql-case-id="select_rank_function">
+ <projections start-index="7" stop-index="74">
+ <expression-projection text="RANK() OVER (PARTITION BY LocationID
ORDER BY Quantity DESC)" alias="Rank" start-index="7" stop-index="74">
+ <expr>
+ <function function-name="RANK" text="RANK() OVER
(PARTITION BY LocationID ORDER BY Quantity DESC)" start-index="7"
stop-index="66" />
+ </expr>
+ </expression-projection>
+ </projections>
+ <from>
+ <simple-table name="ProductInventory" start-index="81"
stop-index="107">
+ <owner name="Production" start-index="81" stop-index="90" />
+ </simple-table>
+ </from>
+ <where start-index="109" stop-index="140">
+ <expr>
+ <between-expression start-index="115" stop-index="140">
+ <left>
+ <column name="LocationID" start-index="115"
stop-index="124" />
+ </left>
+ <between-expr>
+ <literal-expression value="3" start-index="134"
stop-index="134" />
+ </between-expr>
+ <and-expr>
+ <literal-expression value="4" start-index="140"
stop-index="140" />
+ </and-expr>
+ </between-expression>
+ </expr>
+ </where>
+ </select>
</sql-parser-test-cases>
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 39f0f1a87df..c97090e97ed 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
@@ -331,4 +331,5 @@
<sql-case id="select_nchar_function" value="SELECT NCHAR(143743);"
db-types="SQLServer"/>
<sql-case id="select_string_left" value="SELECT LEFT('abcdefg',2);"
db-types="SQLServer"/>
<sql-case id="select_ntile_function" value="SELECT NTILE(4) OVER(ORDER BY
SalesYTD DESC) AS Quartile FROM Sales.SalesPerson WHERE TerritoryID IS NOT
NULL;" db-types="SQLServer"/>
+ <sql-case id="select_rank_function" value="SELECT RANK() OVER (PARTITION
BY LocationID ORDER BY Quantity DESC) AS Rank FROM Production.ProductInventory
WHERE LocationID BETWEEN 3 AND 4;" db-types="SQLServer"/>
</sql-cases>