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 e74bd66e9af Add more test cases on Doris SQL parser (#37673)
e74bd66e9af is described below
commit e74bd66e9afa9e0d1756769f5f7df66f05ad6977
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jan 7 18:23:05 2026 +0800
Add more test cases on Doris SQL parser (#37673)
* Refactor PropertiesBuilder
* Add more test cases on Doris SQL parser
* Add more test cases on Doris SQL parser
---
.../parser/src/main/resources/case/dcl/grant.xml | 2 +
.../src/main/resources/case/ddl/create-table.xml | 8 ++++
.../src/main/resources/case/ddl/create-view.xml | 16 +++++++
.../src/main/resources/case/dml/select-into.xml | 10 ++++
.../main/resources/case/dml/select-pagination.xml | 25 ++++++++++
.../main/resources/case/dml/select-sub-query.xml | 6 +--
.../src/main/resources/case/dml/select-window.xml | 13 +++++
.../parser/src/main/resources/case/dml/select.xml | 56 ++++++++++++++++++++++
.../src/main/resources/sql/supported/dal/reset.xml | 8 ++--
.../src/main/resources/sql/supported/dal/show.xml | 10 ++--
.../resources/sql/supported/dcl/grant-user.xml | 1 +
.../resources/sql/supported/ddl/create-table.xml | 4 +-
.../resources/sql/supported/ddl/create-view.xml | 1 +
.../main/resources/sql/supported/dml/handler.xml | 4 +-
.../main/resources/sql/supported/dml/import.xml | 4 +-
.../resources/sql/supported/dml/select-into.xml | 1 +
.../resources/sql/supported/dml/select-join.xml | 4 +-
.../sql/supported/dml/select-order-by.xml | 2 +-
.../sql/supported/dml/select-pagination.xml | 2 +
.../sql/supported/dml/select-sub-query.xml | 10 ++--
.../resources/sql/supported/dml/select-window.xml | 1 +
.../main/resources/sql/supported/dml/select.xml | 7 ++-
22 files changed, 168 insertions(+), 27 deletions(-)
diff --git a/test/it/parser/src/main/resources/case/dcl/grant.xml
b/test/it/parser/src/main/resources/case/dcl/grant.xml
index ac739f8f2b1..023a61bb8cc 100644
--- a/test/it/parser/src/main/resources/case/dcl/grant.xml
+++ b/test/it/parser/src/main/resources/case/dcl/grant.xml
@@ -223,6 +223,8 @@
<!--<table name="ds_0" start-index="24" stop-index="27" />-->
</grant>
+ <grant sql-case-id="grant_all_on_database_doris" />
+
<grant sql-case-id="grant_view_definition_on_availability_group" />
<grant sql-case-id="grant_take_ownership_on_availability_group" />
<grant sql-case-id="grant_control_on_availability_group" />
diff --git a/test/it/parser/src/main/resources/case/ddl/create-table.xml
b/test/it/parser/src/main/resources/case/ddl/create-table.xml
index 9a141181864..2ced010ff1f 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-table.xml
@@ -2061,6 +2061,14 @@
<create-table sql-case-id="create_table_with_select">
<table name="t_order_new" start-index="13" stop-index="23"/>
+ <select>
+ <projections start-index="35" stop-index="35">
+ <shorthand-projection start-index="35" stop-index="35" />
+ </projections>
+ <from>
+ <simple-table name="t_order" start-index="42" stop-index="48"
/>
+ </from>
+ </select>
</create-table>
<create-table
sql-case-id="create_table_organization_index_parallel_with_select">
diff --git a/test/it/parser/src/main/resources/case/ddl/create-view.xml
b/test/it/parser/src/main/resources/case/ddl/create-view.xml
index 69556758a17..c6bee611eb3 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-view.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-view.xml
@@ -94,6 +94,22 @@
</where>
</select>
</create-view>
+
+ <create-view sql-case-id="create_view_with_columns_doris"
view-definition="SELECT k1, k2 FROM example_table">
+ <view name="example_view" start-index="12" stop-index="23">
+ <column name="c1" start-index="26" stop-index="27" />
+ <column name="c2" start-index="30" stop-index="31" />
+ </view>
+ <select>
+ <projections start-index="44" stop-index="49">
+ <column-projection name="k1" start-index="44" stop-index="45"
/>
+ <column-projection name="k2" start-index="48" stop-index="49"
/>
+ </projections>
+ <from>
+ <simple-table name="example_table" start-index="56"
stop-index="68" />
+ </from>
+ </select>
+ </create-view>
<create-view sql-case-id="create_view_with_check_option"
view-definition="SELECT * FROM comedies WHERE classification = 'U'">
<view name="universal_comedies" start-index="12" stop-index="29" />
diff --git a/test/it/parser/src/main/resources/case/dml/select-into.xml
b/test/it/parser/src/main/resources/case/dml/select-into.xml
index 09e6fe63091..5cce78d5eb2 100644
--- a/test/it/parser/src/main/resources/case/dml/select-into.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-into.xml
@@ -445,4 +445,14 @@
</projections>
<outfile start-index="36" stop-index="140"
file-path="hdfs://path/to/result_" />
</select>
+
+ <select sql-case-id="select_into_table_doris">
+ <from start-index="14" stop-index="20">
+ <simple-table name="t_order" start-index="14" stop-index="20" />
+ </from>
+ <projections distinct-row="false" start-index="7" stop-index="7">
+ <shorthand-projection start-index="7" stop-index="7" />
+ </projections>
+ <into-table name="t_backup" start-index="27" stop-index="34" />
+ </select>
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/dml/select-pagination.xml
b/test/it/parser/src/main/resources/case/dml/select-pagination.xml
index 6dd946bb74d..46c0648b8fc 100644
--- a/test/it/parser/src/main/resources/case/dml/select-pagination.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-pagination.xml
@@ -2097,6 +2097,31 @@
</limit>
</select>
+ <select sql-case-id="select_limit_only_doris">
+ <from>
+ <simple-table name="t_order" start-index="14" stop-index="20" />
+ </from>
+ <projections start-index="7" stop-index="7">
+ <shorthand-projection start-index="7" stop-index="7" />
+ </projections>
+ <limit start-index="22" stop-index="28">
+ <row-count value="5" start-index="28" stop-index="28" />
+ </limit>
+ </select>
+
+ <select sql-case-id="select_limit_with_params_doris" parameters="1, 2">
+ <from>
+ <simple-table name="t_order" start-index="14" stop-index="20" />
+ </from>
+ <projections start-index="7" stop-index="7">
+ <shorthand-projection start-index="7" stop-index="7" />
+ </projections>
+ <limit start-index="22" stop-index="31">
+ <row-count value="2" parameter-index="1" start-index="31"
stop-index="31" />
+ <offset value="1" parameter-index="0" start-index="28"
stop-index="28" />
+ </limit>
+ </select>
+
<!-- <select
sql-case-id="select_pagination_with_first_and_expr_value">-->
<!-- <limit start-index="7" stop-index="17">-->
<!-- <row-count value="1" start-index="13" stop-index="17"/>-->
diff --git a/test/it/parser/src/main/resources/case/dml/select-sub-query.xml
b/test/it/parser/src/main/resources/case/dml/select-sub-query.xml
index 00a6df6bd89..414aa6f50bd 100644
--- a/test/it/parser/src/main/resources/case/dml/select-sub-query.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-sub-query.xml
@@ -335,8 +335,8 @@
<select sql-case-id="select_with_exists_sub_query_with_project">
<projections start-index="7" stop-index="36">
- <expression-projection start-index="7" stop-index="36"
text="EXISTS (SELECT 1 FROM t_order)" literal-text="EXISTS (SELECT 1 FROM
t_order)">
- <subquery start-index="15" stop-index="35">
+ <subquery-projection start-index="14" stop-index="36" text="EXISTS
(SELECT 1 FROM t_order)" literal-text="EXISTS (SELECT 1 FROM t_order)">
+ <subquery>
<select>
<from>
<simple-table name="t_order" start-index="29"
stop-index="35" />
@@ -346,7 +346,7 @@
</projections>
</select>
</subquery>
- </expression-projection>
+ </subquery-projection>
</projections>
</select>
diff --git a/test/it/parser/src/main/resources/case/dml/select-window.xml
b/test/it/parser/src/main/resources/case/dml/select-window.xml
index fe72a2869d5..ade7d269592 100644
--- a/test/it/parser/src/main/resources/case/dml/select-window.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-window.xml
@@ -92,4 +92,17 @@
<simple-table name="t_order" start-index="53" stop-index="59" />
</from>
</select>
+
+ <select sql-case-id="select_window_frame_doris">
+ <projections start-index="7" stop-index="86">
+ <aggregation-projection type="SUM" expression="SUM(v) OVER
(PARTITION BY k ORDER BY v ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)"
start-index="7" stop-index="86">
+ <parameter>
+ <column name="v" start-index="11" stop-index="11" />
+ </parameter>
+ </aggregation-projection>
+ </projections>
+ <from>
+ <simple-table name="t_order" start-index="93" stop-index="99" />
+ </from>
+ </select>
</sql-parser-test-cases>
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 c7895e4a2c2..a710b34292f 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -9916,6 +9916,19 @@
</group-by>
</select>
+ <select sql-case-id="select_with_force_index_for_join">
+ <projections start-index="7" stop-index="7">
+ <shorthand-projection start-index="7" stop-index="7" />
+ </projections>
+ <from>
+ <simple-table name="t1" start-index="14" stop-index="15">
+ <index-hint origin-text="FORCE INDEX FOR JOIN (idx1)"
start-index="17" stop-index="43">
+ <hint-index-name name="idx1" start-index="39"
stop-index="42" />
+ </index-hint>
+ </simple-table>
+ </from>
+ </select>
+
<select sql-case-id="select_with_reserved_word_with_table_ref">
<projections start-index="7" stop-index="19">
<column-projection name="condition" start-index="7"
stop-index="19" >
@@ -11878,4 +11891,47 @@
</expression-projection>
</projections>
</select>
+
+ <select sql-case-id="select_true_literal_doris">
+ <projections start-index="7" stop-index="10">
+ <expression-projection text="true" start-index="7" stop-index="10">
+ <expr>
+ <literal-expression value="true" start-index="7"
stop-index="10" />
+ </expr>
+ </expression-projection>
+ </projections>
+ </select>
+
+ <select sql-case-id="select_false_literal_doris">
+ <projections start-index="7" stop-index="11">
+ <expression-projection text="false" start-index="7"
stop-index="11">
+ <expr>
+ <literal-expression value="false" start-index="7"
stop-index="11" />
+ </expr>
+ </expression-projection>
+ </projections>
+ </select>
+
+ <select sql-case-id="select_null_literal_doris">
+ <projections start-index="7" stop-index="10">
+ <expression-projection text="null" start-index="7" stop-index="10">
+ <expr>
+ <literal-expression value="null" start-index="7"
stop-index="10" />
+ </expr>
+ </expression-projection>
+ </projections>
+ </select>
+
+ <select sql-case-id="select_from_dual_doris">
+ <projections start-index="7" stop-index="7">
+ <expression-projection text="1" start-index="7" stop-index="7">
+ <expr>
+ <literal-expression value="1" start-index="7"
stop-index="7" />
+ </expr>
+ </expression-projection>
+ </projections>
+ <from start-index="9" stop-index="17">
+ <simple-table name="DUAL" start-index="14" stop-index="17" />
+ </from>
+ </select>
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dal/reset.xml
b/test/it/parser/src/main/resources/sql/supported/dal/reset.xml
index 72adeb7cd1e..16acfdf3b4b 100644
--- a/test/it/parser/src/main/resources/sql/supported/dal/reset.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dal/reset.xml
@@ -22,10 +22,10 @@
<sql-case id="reset_master" value="RESET MASTER" db-types="MySQL,Doris" />
<sql-case id="reset_slave" value="RESET SLAVE" db-types="MySQL,Doris" />
<sql-case id="reset_master_slave" value="RESET MASTER, SLAVE"
db-types="MySQL" />
- <sql-case id="reset_master_with_binlog" value="RESET MASTER TO 10"
db-types="MySQL" />
- <sql-case id="reset_slave_with_all" value="RESET SLAVE ALL"
db-types="MySQL" />
- <sql-case id="reset_slave_with_channel" value="RESET SLAVE FOR CHANNEL
'TEST_CHANNEL'" db-types="MySQL" />
- <sql-case id="reset_slave_with_all_channel" value="RESET SLAVE ALL FOR
CHANNEL 'TEST_CHANNEL'" db-types="MySQL" />
+ <sql-case id="reset_master_with_binlog" value="RESET MASTER TO 10"
db-types="MySQL,Doris" />
+ <sql-case id="reset_slave_with_all" value="RESET SLAVE ALL"
db-types="MySQL,Doris" />
+ <sql-case id="reset_slave_with_channel" value="RESET SLAVE FOR CHANNEL
'TEST_CHANNEL'" db-types="MySQL,Doris" />
+ <sql-case id="reset_slave_with_all_channel" value="RESET SLAVE ALL FOR
CHANNEL 'TEST_CHANNEL'" db-types="MySQL,Doris" />
<sql-case id="reset_query_cache" value="RESET QUERY CACHE"
db-types="MySQL,Doris" />
<sql-case id="reset_replica" value="RESET REPLICA" db-types="MySQL,Doris"
/>
<sql-case id="reset_persist" value="RESET PERSIST" db-types="MySQL,Doris"
/>
diff --git a/test/it/parser/src/main/resources/sql/supported/dal/show.xml
b/test/it/parser/src/main/resources/sql/supported/dal/show.xml
index 7f678fc8e95..1c11624d74c 100644
--- a/test/it/parser/src/main/resources/sql/supported/dal/show.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dal/show.xml
@@ -99,8 +99,8 @@
<sql-case id="show_tables_from_schema" value="SHOW TABLES FROM
`sharding_db`" db-types="MySQL" />
<sql-case id="show_tables_in_schema" value="SHOW TABLES IN `sharding_db`"
db-types="MySQL" />
<sql-case id="show_tables_with_like_pattern" value="SHOW TABLES FROM
`sharding_db` LIKE 't_order_%'" db-types="MySQL,Doris" />
- <sql-case id="show_tables_with_where_expr" value="SHOW EXTENDED FULL
TABLES FROM `sharding_db` WHERE `table_type` = ?" db-types="MySQL" />
- <sql-case id="show_tables_with_where_expr_no_parameter" value="SHOW
EXTENDED FULL TABLES FROM `sharding_db` WHERE `table_type` = 'BASE TABLE'"
db-types="MySQL" />
+ <sql-case id="show_tables_with_where_expr" value="SHOW EXTENDED FULL
TABLES FROM `sharding_db` WHERE `table_type` = ?" db-types="MySQL,Doris" />
+ <sql-case id="show_tables_with_where_expr_no_parameter" value="SHOW
EXTENDED FULL TABLES FROM `sharding_db` WHERE `table_type` = 'BASE TABLE'"
db-types="MySQL,Doris" />
<sql-case id="show_character_set" value="SHOW CHARACTER SET"
db-types="MySQL,Doris" />
<sql-case id="show_character_set_with_like_pattern" value="SHOW CHARACTER
SET LIKE 'latin%'" db-types="MySQL,Doris" />
<sql-case id="show_character_set_with_where_expr" value="SHOW CHARACTER
SET WHERE `Charset` = ?" db-types="MySQL,Doris" />
@@ -141,10 +141,10 @@
<sql-case id="show_profile" value="SHOW PROFILE LIMIT 1, 2"
db-types="MySQL" />
<sql-case id="show_profiles" value="SHOW PROFILES" db-types="MySQL" />
<sql-case id="show_charset" value="SHOW CHARSET" db-types="MySQL" />
- <sql-case id="show_warnings_limit" value="SHOW WARNINGS limit 1"
db-types="MySQL" />
- <sql-case id="show_warnings_count" value="SHOW COUNT(*) WARNINGS"
db-types="MySQL" />
+ <sql-case id="show_warnings_limit" value="SHOW WARNINGS limit 1"
db-types="MySQL,Doris" />
+ <sql-case id="show_warnings_count" value="SHOW COUNT(*) WARNINGS"
db-types="MySQL,Doris" />
<sql-case id="show_search_path" value="SHOW search_path;"
db-types="PostgreSQL,openGauss" />
- <sql-case id="show_errors" value="SHOW ERRORS;" db-types="Oracle"/>
+ <sql-case id="show_errors" value="SHOW ERRORS;" db-types="Oracle,Doris"/>
<sql-case id="show_parameter_smtp_out_server" value="SHOW PARAMETER
SMTP_OUT_SERVER" db-types="Oracle"/>
<sql-case id="show_databases_basic" value="SHOW DATABASES;"
db-types="Hive" />
<sql-case id="show_schemas_basic" value="SHOW SCHEMAS;" db-types="Hive" />
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 7540d7cd38b..5884e70fbe1 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
@@ -101,6 +101,7 @@
<sql-case id="grant_all_on_schema" value="GRANT ALL PRIVILEGES ON SCHEMA
schema1 TO role1" db-types="PostgreSQL,openGauss" />
<sql-case id="grant_all_on_schema_to_roles" value="GRANT ALL PRIVILEGES ON
SCHEMA schema1 TO role1, role2" db-types="PostgreSQL,openGauss" />
<sql-case id="grant_all_on_schema_to_current_user" value="GRANT ALL
PRIVILEGES ON SCHEMA schema1 TO CURRENT_USER" db-types="PostgreSQL,openGauss" />
+ <sql-case id="grant_all_on_database_doris" value="GRANT ALL PRIVILEGES ON
db1.* TO user1" db-types="Doris" />
<sql-case id="grant_create_on_schema" value="GRANT CREATE ON SCHEMA
schema1 TO role1" db-types="PostgreSQL,openGauss" />
<sql-case id="grant_create_on_schemas" value="GRANT CREATE ON SCHEMA
schema1, schema2 TO role1" db-types="PostgreSQL,openGauss" />
<sql-case id="grant_all_on_tablespace" value="GRANT ALL PRIVILEGES ON
TABLESPACE tablespace1 TO role1" db-types="PostgreSQL,openGauss" />
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 c2d2aba987a..07fc7b54909 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
@@ -23,7 +23,7 @@
<sql-case id="create_table_with_backtick_engine_myisam" value="create
table `t``1`(a int) engine=myisam" db-types="MySQL" />
<sql-case id="create_table_with_backtick" value="CREATE TABLE ```t_order`
(i int)" db-types="MySQL" />
<sql-case id="create_table_column_with_backtick" value="create table
`````t_o``r``d``e``r``` (```i` int)" db-types="MySQL" />
- <sql-case id="create_table_with_like" value="CREATE TABLE t_log LIKE
t_old_log" db-types="MySQL" />
+ <sql-case id="create_table_with_like" value="CREATE TABLE t_log LIKE
t_old_log" db-types="MySQL,Doris" />
<sql-case id="create_table" value="CREATE TABLE t_log(id int PRIMARY KEY,
status varchar(10))" />
<sql-case id="create_table_with_engin_charset" value="CREATE TABLE
t_log(id int PRIMARY KEY, status varchar(10)) ENGINE=InnoDB DEFAULT
CHARSET=utf8mb4" db-types="MySQL" />
<sql-case id="create_table_with_keyword" value="CREATE TABLE t_log(id int
PRIMARY KEY, status boolean)" db-types="PostgreSQL,openGauss" />
@@ -151,7 +151,7 @@
<sql-case id="create_table_with_partition_less_than" value="CREATE TABLE
t_sales (order_id INTEGER NOT NULL, goods_name CHAR(20) NOT NULL, sales_date
DATE NOT NULL, sales_volume INTEGER, sales_store CHAR(20), PRIMARY KEY (
order_id )) PARTITION BY RANGE (sales_date) (PARTITION season1 VALUES LESS
THAN('2023-04-01 00:00:00'),PARTITION season2 VALUES LESS THAN('2023-07-01
00:00:00'),PARTITION season3 VALUES LESS THAN('2023-10-01 00:00:00'),PARTITION
season4 VALUES LESS THAN(MAXVALUE))" [...]
<sql-case id="create_table_with_negative_data_type" value="CREATE TABLE
T(COL1 NUMBER, COL2 NUMBER(3), COL3 NUMBER(3,2), COL4 NUMBER(6,-2))"
db-types="Oracle" />
<sql-case id="create_table_with_ref_data_type" value="CREATE TABLE
location_table (location_number NUMBER, building REF warehouse_typ SCOPE IS
warehouse_table);" db-types="Oracle" />
- <sql-case id="create_table_with_select" value="CREATE TABLE t_order_new AS
SELECT * FROM t_order" db-types="Oracle"/>
+ <sql-case id="create_table_with_select" value="CREATE TABLE t_order_new AS
SELECT * FROM t_order" db-types="Oracle,Doris"/>
<sql-case id="create_table_organization_index_parallel_with_select"
value="CREATE TABLE admin_iot3(i PRIMARY KEY, j, k, l) ORGANIZATION INDEX
PARALLEL AS SELECT * FROM hr.jobs" db-types="Oracle" />
<sql-case id="create_table_partition_by_range" value="CREATE TABLE
costs_demo (prod_id NUMBER(6), time_id DATE, unit_cost NUMBER(10,2), unit_price
NUMBER(10,2))
PARTITION BY RANGE (time_id) (PARTITION costs_old VALUES LESS THAN
(TO_DATE('01-JAN-2003', 'DD-MON-YYYY')) COMPRESS,
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/create-view.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/create-view.xml
index bf648f93a22..8ad1238ad3c 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-view.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-view.xml
@@ -21,6 +21,7 @@
<sql-case id="create_view_with_udf_nested_fun" value="CREATE VIEW V_T1_C
AS SELECT DB29023216.TESTFUNC(NOW())" db-types="MySQL" />
<sql-case id="create_view_with_udf_arg" value="CREATE VIEW V_T1_C AS
SELECT DB29023216.TESTFUNC(1,2,3,4)" db-types="MySQL" />
<sql-case id="create_view" value="CREATE VIEW comedies AS SELECT * FROM
films WHERE kind = 'Comedy'"
db-types="MySQL,PostgreSQL,openGauss,SQLServer,Doris" />
+ <sql-case id="create_view_with_columns_doris" value="CREATE VIEW
example_view (c1, c2) AS SELECT k1, k2 FROM example_table" db-types="Doris" />
<sql-case id="create_view_with_check_option" value="CREATE VIEW
universal_comedies AS SELECT * FROM comedies WHERE classification = 'U' WITH
LOCAL CHECK OPTION" db-types="PostgreSQL,openGauss" />
<sql-case id="create_view_with_recursive" value="CREATE RECURSIVE VIEW
public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE
n = 100" db-types="PostgreSQL,openGauss" />
<sql-case id="create_view_with_option" value="CREATE OR REPLACE TEMP view
order_view (order_id,user_id) WITH (security_barrier=TRUE) AS SELECT * FROM
t_order" db-types="PostgreSQL,openGauss" />
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/handler.xml
b/test/it/parser/src/main/resources/sql/supported/dml/handler.xml
index b83d597e1db..596671ed3b1 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/handler.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/handler.xml
@@ -17,6 +17,6 @@
-->
<sql-cases>
- <sql-case id="handler_table_name_with_close" value="HANDLER t1 CLOSE"
db-types="MySQL" />
- <sql-case id="handler_table_name_read_limit" value="handler a1 read first
limit 9" db-types="MySQL" />
+ <sql-case id="handler_table_name_with_close" value="HANDLER t1 CLOSE"
db-types="MySQL,Doris" />
+ <sql-case id="handler_table_name_read_limit" value="handler a1 read first
limit 9" db-types="MySQL,Doris" />
</sql-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/import.xml
b/test/it/parser/src/main/resources/sql/supported/dml/import.xml
index c8e18ee67aa..64f76b7daca 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/import.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/import.xml
@@ -17,6 +17,6 @@
-->
<sql-cases>
- <sql-case id="import_table_from_file" value="IMPORT TABLE FROM
's1/t1*.sdi'" db-types="MySQL" />
- <sql-case id="import_table_from_files" value="IMPORT TABLE FROM
'/tmp/mysql-files/employees.sdi','/tmp/mysql-files/managers.sdi'"
db-types="MySQL" />
+ <sql-case id="import_table_from_file" value="IMPORT TABLE FROM
's1/t1*.sdi'" db-types="MySQL,Doris" />
+ <sql-case id="import_table_from_files" value="IMPORT TABLE FROM
'/tmp/mysql-files/employees.sdi','/tmp/mysql-files/managers.sdi'"
db-types="MySQL,Doris" />
</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-into.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-into.xml
index d72ed723ce8..c799491125f 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-into.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-into.xml
@@ -40,4 +40,5 @@
<sql-case id="select_into_outfile_doris_with_parquet" value="SELECT * FROM
t_order INTO OUTFILE 's3://bucket/result_' FORMAT AS PARQUET PROPERTIES
('s3.endpoint' = 'http://s3.amazonaws.com', 's3.access_key' = 'xxx',
's3.secret_key' = 'yyy')" db-types="Doris"/>
<sql-case id="select_into_outfile_doris_with_fields" value="SELECT * FROM
t_order INTO OUTFILE 'hdfs://path/to/result_' FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'" db-types="Doris"/>
<sql-case id="select_into_outfile_doris_with_fields_and_escaped"
value="SELECT user_id, status FROM t_order INTO OUTFILE
'hdfs://path/to/result_' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY
'"' ESCAPED BY '\\'" db-types="Doris"/>
+ <sql-case id="select_into_table_doris" value="SELECT * FROM t_order INTO
t_backup" db-types="Doris"/>
</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
index 8ab5007033d..94cbecddea7 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
@@ -27,8 +27,8 @@
<sql-case id="select_cross_apply_join_related_with_alias" value="SELECT
d.department_name, v.employee_id, v.last_name FROM departments d CROSS APPLY
(SELECT * FROM employees e WHERE e.department_id = d.department_id) v WHERE
d.department_name IN ('Marketing', 'Operations', 'Public Relations') ORDER BY
d.department_name, v.employee_id" db-types="Oracle" />
<sql-case id="select_natural_join" value="SELECT * FROM t_order o NATURAL
JOIN t_order_item i WHERE o.order_id = ?"
db-types="MySQL,PostgreSQL,openGauss,Oracle,Doris" />
<sql-case id="select_natural_inner_join" value="SELECT * FROM t_order o
NATURAL INNER JOIN t_order_item i WHERE o.order_id = ?"
db-types="MySQL,PostgreSQL,openGauss,Oracle" />
- <sql-case id="select_natural_left_join" value="SELECT * FROM t_order o
NATURAL LEFT JOIN t_order_item i WHERE o.order_id = ?"
db-types="MySQL,PostgreSQL,openGauss,Oracle" />
- <sql-case id="select_natural_right_join" value="SELECT * FROM t_order o
NATURAL RIGHT JOIN t_order_item i WHERE o.order_id = ?"
db-types="MySQL,PostgreSQL,openGauss,Oracle" />
+ <sql-case id="select_natural_left_join" value="SELECT * FROM t_order o
NATURAL LEFT JOIN t_order_item i WHERE o.order_id = ?"
db-types="MySQL,PostgreSQL,openGauss,Oracle,Doris" />
+ <sql-case id="select_natural_right_join" value="SELECT * FROM t_order o
NATURAL RIGHT JOIN t_order_item i WHERE o.order_id = ?"
db-types="MySQL,PostgreSQL,openGauss,Oracle,Doris" />
<sql-case id="select_natural_full_join" value="SELECT * FROM t_order o
NATURAL FULL JOIN t_order_item i WHERE o.order_id = ?"
db-types="PostgreSQL,openGauss,Oracle" />
<sql-case id="select_with_join_operator" value="SELECT * FROM t_order o ,
t_order_item i WHERE o.order_id(+) = i.order_id" db-types="Oracle" />
<sql-case id="select_join_with_quote" value="SELECT "u".*,
"o".* FROM t_user "u" INNER JOIN t_order "o" ON
"u".user_id = "o".user_id WHERE "u".user_id = ?"
db-types="Oracle" />
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 47dc76524a7..6cc2e5bbbbd 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" />
+ <sql-case id="select_order_by_expression_binary_operation" value="select *
from t_order order by 1+1" db-types="MySQL,Presto,Doris" />
</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-pagination.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-pagination.xml
index 617c4d523bd..45e5ad82896 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-pagination.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-pagination.xml
@@ -42,6 +42,8 @@
<sql-case id="select_pagination_with_first_skip" value="SELECT FIRST 1
SKIP 1 1 a FROM t_order" db-types="Firebird" />
<sql-case id="select_pagination_with_skip" value="SELECT SKIP 1 1 a FROM
t_order" db-types="Firebird" />
<sql-case id="select_limit_offset_doris" value="SELECT * FROM t_order
LIMIT 5 OFFSET 2" db-types="Doris" />
+ <sql-case id="select_limit_only_doris" value="SELECT * FROM t_order LIMIT
5" db-types="Doris" />
+ <sql-case id="select_limit_with_params_doris" value="SELECT * FROM t_order
LIMIT ?, ?" db-types="Doris" />
<!-- <sql-case id="select_pagination_with_first_and_expr_value"
value="SELECT FIRST (1+1) 1 a FROM t_order" db-types="Firebird" />-->
<!-- <sql-case id="select_pagination_with_skip_and_expr_value"
value="SELECT SKIP (2+2) 1 a FROM t_order" db-types="Firebird" />-->
</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-sub-query.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-sub-query.xml
index 82e1a5c448f..3964780891c 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-sub-query.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-sub-query.xml
@@ -22,16 +22,16 @@
<sql-case id="select_sub_query_with_table" value="SELECT t.* FROM (SELECT
* FROM t_order WHERE order_id IN (?, ?)) t" />
<sql-case id="select_with_equal_subquery" value="SELECT * FROM t_order
WHERE user_id = (SELECT user_id FROM t_order_item WHERE id = 10)"
db-types="MySQL, PostgreSQL,openGauss" />
<sql-case id="select_with_any_subquery" value="SELECT * FROM employees
WHERE salary = ANY (SELECT salary FROM employees WHERE department_id = 30)
ORDER BY employee_id;" db-types="Oracle" />
- <sql-case id="select_with_in_subquery" value="SELECT * FROM t_order WHERE
user_id IN (SELECT user_id FROM t_order_item WHERE id IN (10, 11))"
db-types="MySQL,PostgreSQL,openGauss" />
- <sql-case id="select_with_between_subquery" value="SELECT * FROM t_order
WHERE user_id BETWEEN (SELECT user_id FROM t_order_item WHERE order_id = 10)
AND ?" db-types="MySQL, PostgreSQL,openGauss" />
- <sql-case id="select_with_exists_sub_query_with_project" value="SELECT
EXISTS (SELECT 1 FROM t_order)" db-types="MySQL,PostgreSQL,openGauss" />
+ <sql-case id="select_with_in_subquery" value="SELECT * FROM t_order WHERE
user_id IN (SELECT user_id FROM t_order_item WHERE id IN (10, 11))"
db-types="MySQL,PostgreSQL,openGauss,Doris" />
+ <sql-case id="select_with_between_subquery" value="SELECT * FROM t_order
WHERE user_id BETWEEN (SELECT user_id FROM t_order_item WHERE order_id = 10)
AND ?" db-types="MySQL, PostgreSQL,openGauss,Doris" />
+ <sql-case id="select_with_exists_sub_query_with_project" value="SELECT
EXISTS (SELECT 1 FROM t_order)" db-types="MySQL,PostgreSQL,openGauss,Doris" />
<sql-case id="select_with_join_table_subquery" value="SELECT
t_order_federate.order_id, t_order_federate.user_id, u.user_id FROM
t_order_federate, (SELECT * FROM t_user_info) as u WHERE
t_order_federate.user_id = u.user_id" db-types="MySQL, PostgreSQL,openGauss,
SQLServer, SQL92" />
<sql-case id="select_with_projection_subquery" value="SELECT
t_order_federate.order_id, t_order_federate.user_id, (SELECT COUNT(user_id)
FROM t_user_info) FROM t_order_federate" />
<sql-case id="select_with_projection_subquery_and_multiple_parameters"
value="SELECT t_order_federate.order_id, t_order_federate.user_id, (SELECT
CONCAT(order_id, user_id) FROM t_user_info) FROM t_order_federate" />
<sql-case id="select_with_in_subquery_condition" value="SELECT
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE
user_id IN (SELECT * FROM t_user_info)" />
<sql-case id="select_with_between_and_subquery_condition" value="SELECT
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE
user_id BETWEEN (SELECT user_id FROM t_user_info WHERE information = 'before')
AND (SELECT user_id FROM t_user_info WHERE information = 'after')" />
- <sql-case id="select_with_exist_subquery_condition" value="SELECT
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE
EXISTS (SELECT * FROM t_user_info WHERE t_order_federate.user_id =
t_user_info.user_id)" db-types="MySQL,PostgreSQL,openGauss" />
- <sql-case id="select_with_not_exist_subquery_condition" value="SELECT
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE
NOT EXISTS (SELECT * FROM t_user_info WHERE t_order_federate.user_id =
t_user_info.user_id)" db-types="MySQL" />
+ <sql-case id="select_with_exist_subquery_condition" value="SELECT
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE
EXISTS (SELECT * FROM t_user_info WHERE t_order_federate.user_id =
t_user_info.user_id)" db-types="MySQL,PostgreSQL,openGauss,Doris" />
+ <sql-case id="select_with_not_exist_subquery_condition" value="SELECT
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE
NOT EXISTS (SELECT * FROM t_user_info WHERE t_order_federate.user_id =
t_user_info.user_id)" db-types="MySQL,Doris" />
<sql-case id="select_with_exist_string_split_subquery" value="SELECT
ProductId, Name, Tags FROM Product WHERE EXISTS (SELECT * FROM
STRING_SPLIT(Tags, ',') WHERE value IN ('clothing', 'road'))"
db-types="SQLServer"/>
<sql-case id="select_sub_query_with_cast_function" value="SELECT
[T1_1].[BusinessEntityID] AS [BusinessEntityID], [T1_1].[rowguid] AS [rowguid],
[T1_1].[ModifiedDate] AS [ModifiedDate] FROM (SELECT [T2_1].[BusinessEntityID]
AS [BusinessEntityID], [T2_1].[rowguid] AS [rowguid], [T2_1].[ModifiedDate] AS
[ModifiedDate] FROM [AdventureWorks2022].[Person].[BusinessEntity] AS T2_1
WHERE ([T2_1].[BusinessEntityID] = CAST ((17907) AS INT))) AS T1_1"
db-types="SQLServer"/>
<sql-case id="select_sub_query_with_inner_join" value="SELECT
[T1_1].[BusinessEntityID] AS [BusinessEntityID], [T1_1].[AddressID] AS
[AddressID] FROM (SELECT [T2_2].[BusinessEntityID] AS [BusinessEntityID],
[T2_1].[AddressID] AS [AddressID] FROM
[AdventureWorks2022].[Person].[BusinessEntityAddress] AS T2_1 INNER JOIN
[AdventureWorks2022].[Person].[BusinessEntity] AS T2_2 ON
([T2_1].[BusinessEntityID] = [T2_2].[BusinessEntityID])) AS T1_1"
db-types="SQLServer"/>
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-window.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-window.xml
index 701b75fa9e3..42c346fcb44 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-window.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-window.xml
@@ -20,4 +20,5 @@
<sql-case id="select_window" value="SELECT user_id, ROW_NUMBER() OVER w AS
'row_number', RANK() OVER w AS 'rank', DENSE_RANK() OVER w AS 'dense_rank' FROM
t_order WHERE order_id = ? WINDOW w AS (ORDER BY user_id)"
db-types="MySQL,Doris" />
<sql-case id="select_window_partition_order_doris" value="SELECT
ROW_NUMBER() OVER (PARTITION BY k ORDER BY v) FROM t_order" db-types="Doris" />
<sql-case id="select_window_lead_lag_doris" value="SELECT LEAD(v) OVER
(PARTITION BY k ORDER BY v) FROM t_order" db-types="Doris" />
+ <sql-case id="select_window_frame_doris" value="SELECT SUM(v) OVER
(PARTITION BY k ORDER BY v ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM
t_order" db-types="Doris" />
</sql-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 53c303f6d85..47405458386 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
@@ -75,7 +75,7 @@
<sql-case id="select_keyword_table_name_with_double_quotes" value="SELECT
i.* FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id
= i.order_id JOIN "select" c ON o.status = c.status WHERE o.user_id
IN (?, ?) AND o.order_id BETWEEN ? AND ? AND c.status = ? ORDER BY i.item_id"
db-types="PostgreSQL,openGauss,Oracle" />
<sql-case id="select_keyword_table_name_with_square_brackets"
value="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id
AND o.order_id = i.order_id JOIN [select] c ON o.status = c.status WHERE
o.user_id IN (?, ?) AND o.order_id BETWEEN ? AND ? AND c.status = ? ORDER BY
i.item_id" db-types="SQLServer" />
<sql-case id="select_alias_as_keyword" value="SELECT length.item_id
password FROM t_order_item length where length.item_id = ? "
db-types="MySQL,H2,SQLServer,Oracle" />
- <sql-case id="select_with_force_index_join" value="SELECT i.* FROM t_order
o FORCE INDEX(order_index) JOIN t_order_item i ON o.order_id=i.order_id WHERE
o.order_id = ?" db-types="MySQL" />
+ <sql-case id="select_with_force_index_join" value="SELECT i.* FROM t_order
o FORCE INDEX(order_index) JOIN t_order_item i ON o.order_id=i.order_id WHERE
o.order_id = ?" db-types="MySQL,Doris" />
<sql-case id="select_equal_with_geography" value="SELECT * FROM t_order
WHERE rule = ?::jsonb AND
start_point=ST_GeographyFromText('SRID=4326;POINT('||?||' '||?||')') AND
user_id = ? AND order_id = ?" db-types="PostgreSQL,openGauss" />
<sql-case id="select_in_with_geography" value="SELECT * FROM t_order WHERE
rule IN (?::jsonb, ?::jsonb) AND
start_point=ST_GeographyFromText('SRID=4326;POINT('||?||' '||?||')') AND
user_id = ? AND order_id = ?" db-types="PostgreSQL,openGauss" />
<sql-case id="select_between_with_geography" value="SELECT * FROM t_order
WHERE rule BETWEEN ?::jsonb AND ?::jsonb AND
start_point=ST_GeographyFromText('SRID=4326;POINT('||?||' '||?||')') AND
order_id = ?" db-types="PostgreSQL,openGauss" />
@@ -230,10 +230,14 @@
<sql-case id="select_with_lead_and_lag_function" value="SELECT hire_date,
LAG(hire_date, 1) OVER (ORDER BY hire_date) AS LAG1, LEAD(hire_date, 1) OVER
(ORDER BY hire_date) AS LEAD1 FROM employees WHERE department_id = 30 ORDER BY
hire_date;" db-types="Oracle,MySQL" />
<sql-case id="select_with_connect_by_root" value="SELECT CONNECT_BY_ROOT
last_name 'Manager' FROM employees CONNECT BY PRIOR employee_id = manager_id"
db-types="Oracle" />
<sql-case id="select_with_ntile_function" value="SELECT NTILE(4) OVER
(ORDER BY salary DESC) AS quartile FROM employees WHERE department_id = 100
ORDER BY last_name" db-types="Oracle,MySQL,Doris" />
+ <sql-case id="select_from_dual_doris" value="SELECT 1 FROM DUAL"
db-types="Doris" />
<sql-case id="select_date_literal_doris" value="SELECT DATE '2020-01-01'"
db-types="Doris" />
<sql-case id="select_hex_literal_doris" value="SELECT 0x1AF"
db-types="Doris" />
<sql-case id="select_bit_literal_doris" value="SELECT b'1010'"
db-types="Doris" />
<sql-case id="select_collate_clause_doris" value="SELECT 'a' COLLATE
utf8mb4_bin" db-types="Doris" />
+ <sql-case id="select_true_literal_doris" value="SELECT TRUE"
db-types="Doris" />
+ <sql-case id="select_false_literal_doris" value="SELECT FALSE"
db-types="Doris" />
+ <sql-case id="select_null_literal_doris" value="SELECT NULL"
db-types="Doris" />
<sql-case id="select_with_percentile_functions" value="SELECT
department_id, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC) 'Median
cont', PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary DESC) 'Median disc'
FROM employees GROUP BY department_id" db-types="Oracle" />
<sql-case id="select_with_keep_clause" value="SELECT salary,MIN(salary)
KEEP (DENSE_RANK FIRST ORDER BY commission_pct) OVER (PARTITION BY
department_id) 'Worst', MAX(salary) KEEP (DENSE_RANK LAST ORDER BY
commission_pct) OVER (PARTITION BY department_id) 'Best' FROM employees ORDER
BY department_id" db-types="Oracle" />
<sql-case id="select_with_corr_function" value="SELECT employee_id,
CORR(SYSDATE - hire_date, salary) FROM employees WHERE department_id in (50,
80) ORDER BY employee_id" db-types="Oracle" />
@@ -311,6 +315,7 @@
<sql-case id="select_with_index_hints3" value="SELECT * FROM t1 USE INDEX
(i1,i2) IGNORE INDEX (i2);" db-types="MySQL,Doris"/>
<sql-case id="select_with_force_index_for_order_by" value="SELECT * FROM
t1 FORCE INDEX FOR ORDER BY (idx1) ORDER BY id" db-types="MySQL,Doris" />
<sql-case id="select_with_force_index_for_group_by" value="SELECT * FROM
t1 FORCE INDEX FOR GROUP BY (idx1) GROUP BY id" db-types="MySQL,Doris" />
+ <sql-case id="select_with_force_index_for_join" value="SELECT * FROM t1
FORCE INDEX FOR JOIN (idx1)" db-types="MySQL,Doris" />
<sql-case id="select_with_reserved_word_with_table_ref" value="select
xxx.condition from xxx" db-types="MySQL,Doris"/>
<sql-case id="select_with_reserved_word" value="select describe from xxx"
db-types="MySQL,Doris"/>
<sql-case id="select_with_nvl_function_and_interval_hour" value="SELECT *
FROM t_order t WHERE t.CREATE_TIME <= nvl(END_TIME, sysdate) - INTERVAL ?
HOUR AND t.STATUS = 'FAILURE'" db-types="Oracle"/>