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 9238dc2943f Support oracle select into clause parsing (#27353)
9238dc2943f is described below
commit 9238dc2943fbf332e2691ad86092e5c63b5e9ac0
Author: ZhangCheng <[email protected]>
AuthorDate: Fri Jul 21 19:03:37 2023 +0800
Support oracle select into clause parsing (#27353)
* Support oracle select into clause parsing
* Support oracle select into clause parsing
* Support oracle select into clause parsing
---
.../oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 | 14 +++++++++++++-
test/it/parser/src/main/resources/case/dml/select-into.xml | 9 +++++++++
.../src/main/resources/sql/supported/dml/select-into.xml | 1 +
.../src/main/resources/sql/unsupported/unsupported.xml | 1 -
4 files changed, 23 insertions(+), 2 deletions(-)
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
index 3c740fb716e..29d2cfa1ae1 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
@@ -148,7 +148,19 @@ parenthesisSelectSubquery
;
queryBlock
- : withClause? SELECT hint? duplicateSpecification? selectList
selectFromClause whereClause? hierarchicalQueryClause? groupByClause?
modelClause?
+ : withClause? SELECT hint? duplicateSpecification? selectList
selectIntoClause? selectFromClause whereClause? hierarchicalQueryClause?
groupByClause? modelClause?
+ ;
+
+selectIntoClause
+ : (BULK COLLECT)? INTO variableNames
+ ;
+
+variableNames
+ : variableName (COMMA_ variableName)*
+ ;
+
+variableName
+ : identifier | stringLiterals
;
withClause
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 49f7c95b83f..1e0a8746771 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
@@ -201,4 +201,13 @@
<expression-projection text="1" start-index="7" stop-index="7" />
</projections>
</select>
+
+ <select sql-case-id="select_into_with_variable">
+ <projections start-index="7" stop-index="17" literal-start-index="7"
literal-stop-index="17">
+ <column-projection name="select_list" start-index="7"
stop-index="17" literal-start-index="7" literal-stop-index="17" />
+ </projections>
+ <from>
+ <simple-table name="table_or_view_name" start-index="50"
stop-index="67" literal-start-index="50" literal-stop-index="67" />
+ </from>
+ </select>
</sql-parser-test-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 7499335b436..9ff9bc84874 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
@@ -28,4 +28,5 @@
<sql-case id="select_into_with_lock_after_into" value="SELECT status FROM
t_order WHERE order_id = ? INTO @var1 FOR UPDATE " db-types="MySQL" />
<sql-case id="select_into_with_lock_before_into" value="SELECT status FROM
t_order WHERE order_id = ? FOR UPDATE INTO @var1" db-types="MySQL" />
<sql-case id="select_into_param_without_at" value="SELECT 1 INTO a"
db-types="MySQL" />
+ <sql-case id="select_into_with_variable" value="SELECT select_list INTO
record_variable_name FROM table_or_view_name" db-types="Oracle" />
</sql-cases>
diff --git a/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
b/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
index 76d07bfa0a6..0da27863a01 100644
--- a/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
+++ b/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
@@ -17,7 +17,6 @@
-->
<sql-cases>
- <sql-case id="assert_select_into_SQL" value="SELECT * INTO t_order_new
FROM t_order" db-types="Oracle" />
<sql-case id="assert_select_with_json_extract_sign_with_parameter_marker"
value="SELECT * FROM t_order WHERE order_id -> ?" db-types="MySQL" />
<sql-case
id="assert_select_with_json_unquote_extract_sign_with_parameter_marker"
value="SELECT * FROM t_order WHERE order_id ->> ?" db-types="MySQL" />
<sql-case id="assert_insert_with_first" value="INSERT FIRST INTO TABLE_XXX
(field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2" db-types="Oracle" />