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 dd36113c743 Support Oracle collect function (#27875)
dd36113c743 is described below
commit dd36113c743354027d326f7b6e529c8dbe48cc50
Author: Zichao <[email protected]>
AuthorDate: Thu Aug 3 15:51:47 2023 +1200
Support Oracle collect function (#27875)
---
.../dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4 | 2 +-
.../sql/parser/sql/common/enums/AggregationType.java | 2 +-
test/it/parser/src/main/resources/case/dml/select-expression.xml | 9 +++++++++
.../src/main/resources/sql/supported/dml/select-expression.xml | 1 +
4 files changed, 12 insertions(+), 2 deletions(-)
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index 6817513d448..3f288aae428 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -704,7 +704,7 @@ functionCall
;
aggregationFunction
- : aggregationFunctionName LP_ (((DISTINCT | ALL)? expr (COMMA_ expr)*) |
ASTERISK_) (COMMA_ stringLiterals)? listaggOverflowClause? RP_ (WITHIN GROUP
LP_ orderByClause RP_)? keepClause? overClause? overClause?
+ : aggregationFunctionName LP_ (((DISTINCT | ALL)? expr (COMMA_ expr)*) |
ASTERISK_) (COMMA_ stringLiterals)? listaggOverflowClause? orderByClause? RP_
(WITHIN GROUP LP_ orderByClause RP_)? keepClause? overClause? overClause?
;
keepClause
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/enums/AggregationType.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/enums/AggregationType.java
index 5a0c967ea15..a1af72e9938 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/enums/AggregationType.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/enums/AggregationType.java
@@ -24,7 +24,7 @@ import java.util.Arrays;
*/
public enum AggregationType {
- MAX, MIN, SUM, COUNT, AVG, BIT_XOR, GROUP_CONCAT;
+ MAX, MIN, SUM, COUNT, AVG, BIT_XOR, GROUP_CONCAT, COLLECT;
/**
* Is aggregation type.
diff --git a/test/it/parser/src/main/resources/case/dml/select-expression.xml
b/test/it/parser/src/main/resources/case/dml/select-expression.xml
index d7df28026b0..5ac327c61df 100644
--- a/test/it/parser/src/main/resources/case/dml/select-expression.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-expression.xml
@@ -2706,4 +2706,13 @@
<column-item name="customer_id" order-direction="ASC"
start-index="116" stop-index="126"/>
</order-by>
</select>
+
+ <select sql-case-id="select_collect_expression">
+ <projections start-index="7" stop-index="92">
+ <expression-projection start-index="7" stop-index="92"
text="CAST(COLLECT(warehouse_name ORDER BY warehouse_name) AS
warehouse_name_t)" alias="Warehouses" />
+ </projections>
+ <from>
+ <simple-table start-index="99" stop-index="108" name="warehouses"
/>
+ </from>
+ </select>
</sql-parser-test-cases>
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 ba98745114e..58cc76a8769 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
@@ -113,4 +113,5 @@
<sql-case id="select_with_multiset_except_expression" value="SELECT
customer_id, cust_address_ntab MULTISET EXCEPT DISTINCT cust_address2_ntab
multiset_except FROM customers_demo ORDER BY customer_id;" db-types="Oracle" />
<sql-case id="select_with_multiset_intersect_expression" value="SELECT
customer_id, cust_address_ntab MULTISET INTERSECT DISTINCT cust_address2_ntab
multiset_intersect FROM customers_demo ORDER BY customer_id;" db-types="Oracle"
/>
<sql-case id="select_with_multiset_union_expression" value="SELECT
customer_id, cust_address_ntab MULTISET UNION cust_address2_ntab multiset_union
FROM customers_demo ORDER BY customer_id;" db-types="Oracle" />
+ <sql-case id="select_collect_expression" value="SELECT
CAST(COLLECT(warehouse_name ORDER BY warehouse_name) AS warehouse_name_t)
"Warehouses" FROM warehouses;" db-types="Oracle" />
</sql-cases>