This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 96707ec1ae3 Add SQL parser test cases for Firebird (#37720)
96707ec1ae3 is described below
commit 96707ec1ae32a31e58ec4286291a4e07fa371ec7
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Jan 12 20:35:06 2026 +0800
Add SQL parser test cases for Firebird (#37720)
* Add SQL parser test cases for Hive
* Add SQL parser test cases for Firebird
* Add SQL parser test cases for Firebird
* Add SQL parser test cases for Firebird
---
.../src/main/resources/case/dml/select-with.xml | 25 ++++++++++++++++++++++
.../src/main/resources/case/tcl/savepoint.xml | 1 +
.../resources/sql/supported/dcl/grant-user.xml | 2 +-
.../resources/sql/supported/dcl/revoke-user.xml | 2 +-
.../main/resources/sql/supported/dml/presto.xml | 2 +-
.../sql/supported/dml/select-expression.xml | 2 +-
.../sql/supported/dml/select-order-by.xml | 2 +-
.../sql/supported/dml/select-special-function.xml | 2 +-
.../resources/sql/supported/dml/select-with.xml | 1 +
.../main/resources/sql/supported/tcl/commit.xml | 2 +-
.../main/resources/sql/supported/tcl/rollback.xml | 2 +-
.../main/resources/sql/supported/tcl/savepoint.xml | 1 +
.../sql/supported/tcl/set-transaction.xml | 2 +-
13 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/test/it/parser/src/main/resources/case/dml/select-with.xml
b/test/it/parser/src/main/resources/case/dml/select-with.xml
index c1c46f89795..54872fa50b1 100644
--- a/test/it/parser/src/main/resources/case/dml/select-with.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-with.xml
@@ -816,4 +816,29 @@
</from>
</select>
+ <select sql-case-id="select_with_recursive_firebird">
+ <with start-index="0" stop-index="33">
+ <common-table-expression name="t" start-index="15" stop-index="33">
+ <column name="id" start-index="17" stop-index="18" />
+ <subquery-expression start-index="15" stop-index="33">
+ <select>
+ <projections start-index="32" stop-index="32">
+ <expression-projection text="1" start-index="32"
stop-index="32">
+ <expr>
+ <literal-expression value="1"
start-index="32" stop-index="32" />
+ </expr>
+ </expression-projection>
+ </projections>
+ </select>
+ </subquery-expression>
+ </common-table-expression>
+ </with>
+ <projections start-index="42" stop-index="43">
+ <column-projection name="id" start-index="42" stop-index="43" />
+ </projections>
+ <from>
+ <simple-table name="t" start-index="50" stop-index="50" />
+ </from>
+ </select>
+
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/tcl/savepoint.xml
b/test/it/parser/src/main/resources/case/tcl/savepoint.xml
index 4a4dead5992..b04f169c0ea 100644
--- a/test/it/parser/src/main/resources/case/tcl/savepoint.xml
+++ b/test/it/parser/src/main/resources/case/tcl/savepoint.xml
@@ -19,4 +19,5 @@
<sql-parser-test-cases>
<savepoint sql-case-id="savepoint" savepoint-name="savepoint1" />
<savepoint sql-case-id="savepoint_transaction" />
+ <savepoint sql-case-id="savepoint_firebird" />
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dcl/grant-user.xml
b/test/it/parser/src/main/resources/sql/supported/dcl/grant-user.xml
index 5884e70fbe1..0d025e663c1 100644
--- a/test/it/parser/src/main/resources/sql/supported/dcl/grant-user.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dcl/grant-user.xml
@@ -17,7 +17,7 @@
-->
<sql-cases>
- <sql-case id="grant_user_without_hostname" value="GRANT SELECT, UPDATE,
INSERT, DELETE ON t_order to user_dev"
db-types="Oracle,PostgreSQL,openGauss,SQLServer" />
+ <sql-case id="grant_user_without_hostname" value="GRANT SELECT, UPDATE,
INSERT, DELETE ON t_order to user_dev"
db-types="Oracle,PostgreSQL,openGauss,SQLServer,Firebird" />
<sql-case id="grant_user_with_grant" value="GRANT SELECT, UPDATE, INSERT,
DELETE ON t_order to user_dev with GRANT option"
db-types="Oracle,PostgreSQL,openGauss,SQLServer" />
<sql-case id="grant_role" value="GRANT role_dev to user_dev"
db-types="Oracle,PostgreSQL,openGauss" />
<sql-case id="grant_user_with_admin" value="GRANT ADVISOR, ALTER DATABASE
to user_dev with admin option" db-types="Oracle" />
diff --git
a/test/it/parser/src/main/resources/sql/supported/dcl/revoke-user.xml
b/test/it/parser/src/main/resources/sql/supported/dcl/revoke-user.xml
index 3de18f94bbd..8209c4967bb 100644
--- a/test/it/parser/src/main/resources/sql/supported/dcl/revoke-user.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dcl/revoke-user.xml
@@ -17,7 +17,7 @@
-->
<sql-cases>
- <sql-case id="revoke_user_without_hostname" value="REVOKE SELECT, UPDATE
on t_order from user_dev" db-types="Oracle,PostgreSQL,openGauss,SQLServer" />
+ <sql-case id="revoke_user_without_hostname" value="REVOKE SELECT, UPDATE
on t_order from user_dev"
db-types="Oracle,PostgreSQL,openGauss,SQLServer,Firebird" />
<sql-case id="revoke_role" value="REVOKE role_dev from user_dev"
db-types="Oracle,PostgreSQL,openGauss" />
<sql-case id="revoke_user_from" value="REVOKE ADVISOR, ALTER DATABASE from
user_dev" db-types="Oracle" />
<sql-case id="revoke_user_with_hostname_on_db" value="REVOKE select,
insert ON * FROM 'user_dev'@'localhost'" db-types="MySQL,Doris" />
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/presto.xml
b/test/it/parser/src/main/resources/sql/supported/dml/presto.xml
index f409c1004bb..9f1d1e1f0ca 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/presto.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/presto.xml
@@ -19,7 +19,7 @@
<sql-cases>
<sql-case id="presto_select_literals" value="SELECT DATE '2020-01-01',
X'1F', B'1010', TRUE, NULL FROM catalog.schem1.t_order" db-types="Presto" />
<sql-case id="presto_select_compare_all_subquery" value="SELECT * FROM
t_order WHERE order_id = ALL (SELECT order_id FROM t_order_item)"
db-types="Presto" />
- <sql-case id="presto_select_or_boolean_true" value="SELECT * FROM t_order
WHERE flag IS TRUE OR order_id = 1" db-types="Presto" />
+ <sql-case id="presto_select_or_boolean_true" value="SELECT * FROM t_order
WHERE flag IS TRUE OR order_id = 1" db-types="Presto,Firebird" />
<sql-case id="presto_select_not_flag" value="SELECT * FROM t_order WHERE
NOT flag" db-types="Presto" />
<sql-case id="presto_select_not_exists_subquery" value="SELECT * FROM
t_order WHERE NOT EXISTS (SELECT 1)" db-types="Presto" />
<sql-case id="presto_select_assignment_operator" value="SELECT * FROM
t_order WHERE order_id := 1" db-types="Presto" />
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-expression.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-expression.xml
index d1673f76f8a..3948c4e7e90 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-expression.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-expression.xml
@@ -47,7 +47,7 @@
<sql-case id="select_where_with_boolean_primary_with_comparison_subquery"
value="SELECT * FROM t_order WHERE t_order.status > ALL (SELECt status FROM
t_order_item WHERE status > ?)" db-types="MySQL" />
<sql-case id="select_where_with_predicate_with_in_subquery" value="SELECT
* FROM t_order WHERE t_order.order_id NOT IN (SELECT order_id FROM t_order_item
WHERE status > ?)" db-types="MySQL,PostgreSQL,openGauss,Presto" />
<sql-case id="select_where_with_predicate_with_in_expr" value="SELECT *
FROM t_order WHERE t_order.order_id IN (?, ?, ?)"
db-types="MySQL,PostgreSQL,openGauss,Presto" />
- <sql-case id="select_where_with_predicate_with_between" value="SELECT *
FROM t_order WHERE t_order.order_id BETWEEN ? AND ?"
db-types="MySQL,Presto,Hive" />
+ <sql-case id="select_where_with_predicate_with_between" value="SELECT *
FROM t_order WHERE t_order.order_id BETWEEN ? AND ?"
db-types="MySQL,Presto,Hive,Firebird" />
<sql-case id="select_where_with_predicate_with_sounds_like" value="SELECT
* FROM t_order WHERE t_order.order_id SOUNDS LIKE '1%'"
db-types="MySQL,Presto,Doris" />
<sql-case id="select_where_with_predicate_with_like" value="SELECT * FROM
t_order WHERE t_order.order_id NOT LIKE '1%' ESCAPE '$'"
db-types="MySQL,Presto,Hive" />
<sql-case id="select_where_with_predicate_with_not_like" value="SELECT *
FROM t_order WHERE t_order.status NOT LIKE '1%'"
db-types="MySQL,PostgreSQL,openGauss,Hive" />
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-order-by.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-order-by.xml
index ced646ec2c2..0a2349e328c 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-order-by.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-order-by.xml
@@ -34,5 +34,5 @@
<sql-case id="select_order_by_with_table_star_table_name" value="SELECT
t_order.* FROM t_order ORDER BY t_order.order_id" db-types="H2,MySQL" />
<sql-case id="select_order_by_with_star_no_table_alias" value="SELECT *
FROM t_order ORDER BY order_id" db-types="H2,MySQL" />
<sql-case id="select_order_by_with_table_star_without_table_name"
value="SELECT i.*, o.* FROM t_order o JOIN t_order_item i ON o.user_id =
i.user_id AND o.order_id = i.order_id ORDER BY item_id" db-types="H2,MySQL" />
- <sql-case id="select_order_by_expression_binary_operation" value="select *
from t_order order by 1+1" db-types="MySQL,Presto,Doris" />
+ <sql-case id="select_order_by_expression_binary_operation" value="select *
from t_order order by 1+1" db-types="MySQL,Presto,Doris,Firebird" />
</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
index f834bed2e00..a8e4053face 100644
---
a/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
+++
b/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
@@ -196,7 +196,7 @@
<sql-case id="select_is_free_lock" value="SELECT IS_FREE_LOCK('lock1')"
db-types="MySQL" />
<sql-case id="select_is_used_lock" value="SELECT IS_USED_LOCK('lock1')"
db-types="MySQL" />
<sql-case id="select_is_null" value="SELECT ISNULL(1+1)" db-types="MySQL"
/>
- <sql-case id="select_is_not_null" value="SELECT 1 IS NOT NULL"
db-types="MySQL" />
+ <sql-case id="select_is_not_null" value="SELECT 1 IS NOT NULL"
db-types="MySQL,Firebird" />
<sql-case id="select_is_uuid" value="SELECT
IS_UUID('6ccd780c-baba-1026-9564-5b8c656024db')" db-types="MySQL" />
<sql-case id="select_random_bytes" value="SELECT RANDOM_BYTES(16)"
db-types="MySQL" />
<sql-case id="select_rank" value="SELECT RANK() FROM numbers"
db-types="MySQL" />
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-with.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-with.xml
index 91a85133d66..b10501de506 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-with.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-with.xml
@@ -29,4 +29,5 @@
<sql-case id="select_with_recursive_union_all1" value="WITH RECURSIVE
DirectoryCTE as (SELECT * FROM table1 WHERE id = 1 AND project_id = 2 UNION ALL
SELECT * FROM project_file_catalog t INNER JOIN DirectoryCTE cte ON
t.project_id = cte.project_id AND t.parent_id = cte.id) SELECT * FROM
DirectoryCTE ORDER BY level" db-types="MySQL" />
<sql-case id="select_with_oracle_recursive_union_all1" value="WITH
DirectoryCTE as (SELECT table1.col1, table1.col2 FROM table1 WHERE id = 1 AND
project_id = 2 UNION ALL SELECT t.col1, t.col2 FROM project_file_catalog t
INNER JOIN DirectoryCTE cte ON t.project_id = cte.project_id AND t.parent_id =
cte.id) SELECT DirectoryCTE.col1, DirectoryCTE.col2 FROM DirectoryCTE ORDER BY
level" db-types="Oracle" />
<sql-case id="select_with_recursive_union_all2" value="WITH cte AS (SELECT
1 AS col1, 2 AS col2 UNION ALL SELECT 3, 4) SELECT col1, col2 FROM cte"
db-types="MySQL" />
+ <sql-case id="select_with_recursive_firebird" value="WITH RECURSIVE t(id)
AS (SELECT 1) SELECT id FROM t" db-types="Firebird" />
</sql-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/tcl/commit.xml
b/test/it/parser/src/main/resources/sql/supported/tcl/commit.xml
index 64cc670af4e..41e2c99ac5c 100644
--- a/test/it/parser/src/main/resources/sql/supported/tcl/commit.xml
+++ b/test/it/parser/src/main/resources/sql/supported/tcl/commit.xml
@@ -17,7 +17,7 @@
-->
<sql-cases>
- <sql-case id="commit" value="COMMIT"
db-types="MySQL,Oracle,SQLServer,PostgreSQL,openGauss,Doris" />
+ <sql-case id="commit" value="COMMIT"
db-types="MySQL,Oracle,SQLServer,PostgreSQL,openGauss,Doris,Firebird" />
<sql-case id="commit_transaction" value="COMMIT TRANSACTION"
db-types="SQLServer" />
<sql-case id="commit_with_name" value="COMMIT TRANSACTION transaction1"
db-types="SQLServer" />
<sql-case id="commit_with_comment" value="COMMIT COMMENT 'comment1'"
db-types="Oracle" />
diff --git a/test/it/parser/src/main/resources/sql/supported/tcl/rollback.xml
b/test/it/parser/src/main/resources/sql/supported/tcl/rollback.xml
index f0058f481da..a8012522c71 100644
--- a/test/it/parser/src/main/resources/sql/supported/tcl/rollback.xml
+++ b/test/it/parser/src/main/resources/sql/supported/tcl/rollback.xml
@@ -17,7 +17,7 @@
-->
<sql-cases>
- <sql-case id="rollback" value="ROLLBACK"
db-types="MySQL,Oracle,PostgreSQL,openGauss,SQLServer,Doris" />
+ <sql-case id="rollback" value="ROLLBACK"
db-types="MySQL,Oracle,PostgreSQL,openGauss,SQLServer,Doris,Firebird" />
<sql-case id="rollback_transaction" value="ROLLBACK TRAN @TransactionName"
db-types="SQLServer" />
<sql-case id="rollback_with_name" value="ROLLBACK TRANSACTION
transaction1" db-types="SQLServer" />
<sql-case id="rollback_to_savepoint" value="ROLLBACK TO savepoint1"
db-types="MySQL,PostgreSQL,openGauss,Oracle,Doris" />
diff --git a/test/it/parser/src/main/resources/sql/supported/tcl/savepoint.xml
b/test/it/parser/src/main/resources/sql/supported/tcl/savepoint.xml
index 1e8b81d5ac8..5eeadb30575 100644
--- a/test/it/parser/src/main/resources/sql/supported/tcl/savepoint.xml
+++ b/test/it/parser/src/main/resources/sql/supported/tcl/savepoint.xml
@@ -18,5 +18,6 @@
<sql-cases>
<sql-case id="savepoint" value="SAVEPOINT savepoint1"
db-types="MySQL,PostgreSQL,openGauss,Oracle,Doris" />
+ <sql-case id="savepoint_firebird" value="SAVEPOINT savepoint1"
db-types="Firebird" />
<sql-case id="savepoint_transaction" value="SAVE TRANSACTION
ProcedureSave" db-types="SQLServer" />
</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/tcl/set-transaction.xml
b/test/it/parser/src/main/resources/sql/supported/tcl/set-transaction.xml
index 6e499e5d222..c9aa3a38d5d 100644
--- a/test/it/parser/src/main/resources/sql/supported/tcl/set-transaction.xml
+++ b/test/it/parser/src/main/resources/sql/supported/tcl/set-transaction.xml
@@ -17,7 +17,7 @@
-->
<sql-cases>
- <sql-case id="set_transaction" value="SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ" db-types="MySQL,PostgreSQL,openGauss,SQLServer,Doris" />
+ <sql-case id="set_transaction" value="SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ" db-types="MySQL,PostgreSQL,openGauss,SQLServer,Doris,Firebird"
/>
<sql-case id="set_global_transaction" value="SET GLOBAL TRANSACTION
ISOLATION LEVEL REPEATABLE READ" db-types="MySQL,Doris" />
<sql-case id="set_session_transaction_doris" value="SET SESSION
TRANSACTION ISOLATION LEVEL READ COMMITTED" db-types="Doris" />
<sql-case id="set_transaction_read_only" value="SET TRANSACTION READ ONLY"
db-types="MySQL,Oracle,Doris" />