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 49a5cc3a54c Support OpenGauss PREDICT BY function parse (#28150)
49a5cc3a54c is described below

commit 49a5cc3a54c6fa37fb00f11df630305d4ba4d9bf
Author: Zichao <[email protected]>
AuthorDate: Tue Aug 22 16:51:55 2023 +1200

    Support OpenGauss PREDICT BY function parse (#28150)
    
    * Support OpenGauss PREDICT BY function parse
    
    * Support OpenGauss PREDICT BY function parse
---
 .../src/main/antlr4/imports/opengauss/BaseRule.g4  |  6 ++++++
 .../antlr4/imports/opengauss/OpenGaussKeyword.g4   |  8 ++++++++
 .../src/main/antlr4/imports/oracle/BaseRule.g4     |  2 +-
 .../main/resources/case/dml/select-expression.xml  | 23 ++++++++++++++++++++++
 .../sql/supported/dml/select-expression.xml        |  1 +
 5 files changed, 39 insertions(+), 1 deletion(-)

diff --git 
a/parser/sql/dialect/opengauss/src/main/antlr4/imports/opengauss/BaseRule.g4 
b/parser/sql/dialect/opengauss/src/main/antlr4/imports/opengauss/BaseRule.g4
index af7d0efdae3..0ff56b2d082 100644
--- a/parser/sql/dialect/opengauss/src/main/antlr4/imports/opengauss/BaseRule.g4
+++ b/parser/sql/dialect/opengauss/src/main/antlr4/imports/opengauss/BaseRule.g4
@@ -438,6 +438,7 @@ unreservedWord
     | YES
     | ZONE
     | JSON
+    | POSITION
     ;
 
 typeFuncNameKeyword
@@ -494,6 +495,10 @@ name
     : identifier
     ;
 
+modelName
+    : identifier
+    ;
+
 tableNames
     : LP_? tableName (COMMA_ tableName)* RP_?
     ;
@@ -1073,6 +1078,7 @@ functionExprCommonSubexpr
     | XMLPI LP_ NAME identifier COMMA_ aExpr RP_
     | XMLROOT LP_ aExpr COMMA_ xmlRootVersion xmlRootStandalone? RP_
     | XMLSERIALIZE LP_ documentOrContent aExpr AS simpleTypeName RP_
+    | PREDICT BY modelName LP_ FEATURES name (COMMA_ name)* RP_
     ;
 
 typeName
diff --git 
a/parser/sql/dialect/opengauss/src/main/antlr4/imports/opengauss/OpenGaussKeyword.g4
 
b/parser/sql/dialect/opengauss/src/main/antlr4/imports/opengauss/OpenGaussKeyword.g4
index 69ee2f8f234..dfe9c5cbf69 100644
--- 
a/parser/sql/dialect/opengauss/src/main/antlr4/imports/opengauss/OpenGaussKeyword.g4
+++ 
b/parser/sql/dialect/opengauss/src/main/antlr4/imports/opengauss/OpenGaussKeyword.g4
@@ -1396,3 +1396,11 @@ INOUT
 DUPLICATE
     : D U P L I C A T E
     ;
+
+PREDICT
+    : P R E D I C T
+    ;
+
+FEATURES
+    : F E A T U R E S
+    ;
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 264b6e717b5..7181023448c 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
@@ -328,7 +328,7 @@ unreservedWord3
     | WIDTH_BUCKET | WRAPPED | XID | XMLAGG | XMLATTRIBUTES | XMLCAST | 
XMLCDATA | XMLCOLATTVAL | XMLCOMMENT | XMLCONCAT | XMLDIFF
     | XMLEXISTS | XMLEXISTS2 | XMLFOREST | XMLINDEX_REWRITE | 
XMLINDEX_REWRITE_IN_SELECT | XMLINDEX_SEL_IDX_TBL | XMLISNODE
     | XMLISVALID | XMLNAMESPACES | XMLPARSE | XMLPATCH | XMLPI | XMLQUERY | 
XMLROOT | XMLSERIALIZE | XMLTABLE | XMLTOOBJECT
-    | XMLTRANSFORM | XMLTRANSFORMBLOB | XML_DML_RWT_STMT | XPATHTABLE | 
XS_SYS_CONTEXT | X_DYN_PRUNE | RESULT | TABLE | NUMBER
+    | XMLTRANSFORM | XMLTRANSFORMBLOB | XML_DML_RWT_STMT | XPATHTABLE | 
XS_SYS_CONTEXT | X_DYN_PRUNE | RESULT | TABLE | NUMBER | CHAR
     ;
 
 schemaName
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 075775ae35b..b0e3c5e7b65 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
@@ -2914,4 +2914,27 @@
             </expr>
         </where>
     </select>
+    
+    <select sql-case-id="select_predict_by_function">
+        <projections start-index="7" stop-index="56">
+            <expression-projection start-index="7" stop-index="56" 
text="PREDICT BY point_kmeans (FEATURES position)" alias="pos" />
+        </projections>
+        <from>
+            <subquery-table>
+                <subquery>
+                    <select>
+                        <projections start-index="71" stop-index="71">
+                            <shorthand-projection start-index="71" 
stop-index="71" />
+                        </projections>
+                        <from>
+                            <simple-table name="kmeans_2d" start-index="78" 
stop-index="86" />
+                        </from>
+                        <limit start-index="88" stop-index="95">
+                            <row-count start-index="94" stop-index="95" 
value="10" />
+                        </limit>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </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 a711e045042..dc89c856644 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
@@ -122,4 +122,5 @@
     <sql-case id="select_prediction_bounds_function" value="SELECT cust_id 
FROM mining_data_apply_v WHERE PREDICTION_BOUNDS(glmr_sh_regr_sample,0.98 USING 
*).LOWER = 24;" db-types="Oracle" />
     <sql-case id="select_prediction_function" value="SELECT cust_gender FROM 
mining_data_apply_v WHERE PREDICTION (nb_sh_clas_sample COST MODEL AUTO USING 
cust_marital_status, aeducation, household_size) = 1;" db-types="Oracle" />
     <sql-case id="select_prediction_details_function" value="SELECT 
PREDICTION_DETAILS(DT_SH_Clas_sample using *) FROM mining_data_apply_v WHERE 
occupation = 'TechSup'" db-types="Oracle" />
+    <sql-case id="select_predict_by_function" value="SELECT PREDICT BY 
point_kmeans (FEATURES position) as pos FROM (select * from kmeans_2d limit 
10);" db-types="openGauss" />
 </sql-cases>

Reply via email to