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 abcc951e6d7 Enhance the support for SQL Server SQL parsing in
ShardingSphere (#30792)
abcc951e6d7 is described below
commit abcc951e6d77b205b69a869734ff7f4ef55012da
Author: zhuruixuan <[email protected]>
AuthorDate: Sun Apr 7 08:13:47 2024 +0800
Enhance the support for SQL Server SQL parsing in ShardingSphere (#30792)
* Change case
* Change sql
* Change g4
---
.../src/main/antlr4/imports/oracle/DDLStatement.g4 | 2 +-
.../src/main/resources/case/ddl/create-view.xml | 61 ++++++++++++++++++++++
.../resources/sql/supported/ddl/create-view.xml | 1 +
3 files changed, 63 insertions(+), 1 deletion(-)
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index 1f9ed4a60b4..720889d0630 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -269,7 +269,7 @@ xmlTypeVirtualColumnsClause
;
xmlTypeViewClause
- : OF XMLTYPE xmlSchemaSpec? WITH OBJECT (IDENTIFIER | ID) (DEFAULT | LP_
expr (COMMA_ expr)* RL_)
+ : OF XMLTYPE xmlSchemaSpec? WITH OBJECT (IDENTIFIER | ID) (DEFAULT | LP_
expr (COMMA_ expr)* RP_)
;
xmlSchemaSpec
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 6d28e86d425..077655e596c 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
@@ -2104,4 +2104,65 @@
</combine>
</select>
</create-view>
+
+ <create-view sql-case-id="create_view_select_sys_XMLGen"
view-definition="SELECT sys_XMLGen(emp_t(e.employee_id, e.first_name,
e.last_name, e.hire_date),XMLFormat('EMP')) FROM employees e WHERE salary >
15000">
+ <view name="employee_view" start-index="23" stop-index="35" />
+ <select>
+ <projections start-index="164" stop-index="252">
+ <expression-projection text="sys_XMLGen(emp_t(e.employee_id,
e.first_name, e.last_name, e.hire_date),XMLFormat('EMP'))" start-index="164"
stop-index="252">
+ <expr>
+ <function function-name="sys_XMLGen"
text="sys_XMLGen(emp_t(e.employee_id, e.first_name, e.last_name,
e.hire_date),XMLFormat('EMP'))" start-index="164" stop-index="252">
+ <parameter>
+ <function function-name="emp_t"
text="emp_t(e.employee_id, e.first_name, e.last_name, e.hire_date)"
start-index="175" stop-index="234">
+ <parameter>
+ <column name="employee_id"
start-index="181" stop-index="193">
+ <owner name="e" start-index="181"
stop-index="181" />
+ </column>
+ </parameter>
+ <parameter>
+ <column name="first_name"
start-index="196" stop-index="207">
+ <owner name="e" start-index="196"
stop-index="196"/>
+ </column>
+ </parameter>
+ <parameter>
+ <column name="last_name"
start-index="210" stop-index="220">
+ <owner name="e" start-index="210"
stop-index="210" />
+ </column>
+ </parameter>
+ <parameter>
+ <column name="hire_date"
start-index="223" stop-index="233">
+ <owner name="e" start-index="223"
stop-index="223" />
+ </column>
+ </parameter>
+ </function>
+ </parameter>
+ <parameter>
+ <function function-name="XMLFormat"
text="XMLFormat('EMP')" start-index="236" stop-index="251">
+ <parameter>
+ <literal-expression value="EMP"
start-index="246" stop-index="250" />
+ </parameter>
+ </function>
+ </parameter>
+ </function>
+ </expr>
+ </expression-projection>
+ </projections>
+ <from>
+ <simple-table alias="e" name="employees" start-index="259"
stop-index="269"/>
+ </from>
+ <where start-index="271" stop-index="290">
+ <expr>
+ <binary-operation-expression start-index="277"
stop-index="290">
+ <left>
+ <column name="salary" start-index="277"
stop-index="282" />
+ </left>
+ <right>
+ <literal-expression value="15000"
start-index="286" stop-index="290" />
+ </right>
+ <operator>></operator>
+ </binary-operation-expression>
+ </expr>
+ </where>
+ </select>
+ </create-view>
</sql-parser-test-cases>
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 20ec0911755..2812513ed17 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
@@ -95,4 +95,5 @@
<sql-case id="create_view_with_select_value" value="CREATE VIEW
warehouse_view AS SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p"
db-types="Oracle" />
<sql-case id="create_view_select_to_number_to_char" value="CREATE VIEW
time_view AS SELECT time_id, TO_NUMBER(TO_CHAR(time_id, 'ddd')) AS day_in_year
FROM times" db-types="Oracle" />
<sql-case id="create_view_select_subquery_with_union_all" value="CREATE
VIEW view_with_unionall AS (SELECT c.rowid crid, c.cust_id, 2 umarker FROM
customers c WHERE c.cust_last_name = 'Smith' UNION ALL SELECT c.rowid crid,
c.cust_id, 3 umarker FROM customers c WHERE c.cust_last_name = 'Jones')"
db-types="Oracle" />
+ <sql-case id="create_view_select_sys_XMLGen" value="CREATE OR REPLACE VIEW
employee_view OF XMLType WITH OBJECT ID (XMLCast(XMLQuery('/Emp/@empno' PASSING
OBJECT_VALUE RETURNING CONTENT) AS BINARY_DOUBLE)) AS SELECT
sys_XMLGen(emp_t(e.employee_id, e.first_name, e.last_name,
e.hire_date),XMLFormat('EMP')) FROM employees e WHERE salary > 15000;"
db-types="Oracle" />
</sql-cases>