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) 
&quot;Warehouses&quot; FROM warehouses;" db-types="Oracle" />
 </sql-cases>

Reply via email to