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 f444ee2101c Fix PostgreSQL/openGauss failed to parse const with type 
cast (#23530)
f444ee2101c is described below

commit f444ee2101c073541db58f6849aa6a82fbc8cef6
Author: 吴伟杰 <[email protected]>
AuthorDate: Fri Jan 13 08:35:54 2023 +0800

    Fix PostgreSQL/openGauss failed to parse const with type cast (#23530)
    
    * Fix PostgreSQL/openGauss failed to parse const with type cast
    
    * Update openGauss unsupported SQL cases
---
 .../src/main/antlr4/imports/opengauss/BaseRule.g4   |  8 ++++++++
 .../src/main/antlr4/imports/postgresql/BaseRule.g4  |  8 ++++++++
 .../parser/src/main/resources/case/dml/select.xml   | 16 ++++++++++++++--
 .../src/main/resources/sql/supported/dml/select.xml |  1 +
 .../main/resources/sql/unsupported/unsupported.xml  | 21 ---------------------
 5 files changed, 31 insertions(+), 23 deletions(-)

diff --git 
a/sql-parser/dialect/opengauss/src/main/antlr4/imports/opengauss/BaseRule.g4 
b/sql-parser/dialect/opengauss/src/main/antlr4/imports/opengauss/BaseRule.g4
index 7a9e51108f3..c0c87d9d603 100644
--- a/sql-parser/dialect/opengauss/src/main/antlr4/imports/opengauss/BaseRule.g4
+++ b/sql-parser/dialect/opengauss/src/main/antlr4/imports/opengauss/BaseRule.g4
@@ -943,6 +943,7 @@ aexprConst
     | STRING_
     | funcName STRING_
     | funcName LP_ funcArgList sortClause? RP_ STRING_
+    | constTypeName STRING_
     | TRUE
     | FALSE
     | NULL
@@ -1092,6 +1093,13 @@ simpleTypeName
     | constInterval LP_ NUMBER_ RP_
     ;
 
+constTypeName
+    : numeric
+    | bit
+    | character
+    | constDatetime
+    ;
+
 exprList
     : aExpr
     | exprList COMMA_ aExpr
diff --git 
a/sql-parser/dialect/postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4 
b/sql-parser/dialect/postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
index 0901bd6bd49..db7448b0db8 100644
--- 
a/sql-parser/dialect/postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
+++ 
b/sql-parser/dialect/postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
@@ -939,6 +939,7 @@ aexprConst
     | BEGIN_DOLLAR_STRING_CONSTANT DOLLAR_TEXT* END_DOLLAR_STRING_CONSTANT
     | funcName STRING_
     | funcName LP_ funcArgList sortClause? RP_ STRING_
+    | constTypeName STRING_
     | TRUE
     | FALSE
     | NULL
@@ -1092,6 +1093,13 @@ simpleTypeName
     | constInterval LP_ NUMBER_ RP_
     ;
 
+constTypeName
+    : numeric
+    | bit
+    | character
+    | constDatetime
+    ;
+
 exprList
     : aExpr
     | exprList COMMA_ aExpr
diff --git a/test/it/parser/src/main/resources/case/dml/select.xml 
b/test/it/parser/src/main/resources/case/dml/select.xml
index 3ce6a75898e..203ff12abc0 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -4842,7 +4842,7 @@
         </from>
     </select>
     
-    <select sql-case-id="select_literal_type_cast_money" >
+    <select sql-case-id="select_literal_type_cast_money">
         <projections start-index="7" stop-index="18">
             <expression-projection text="'$99'::money" start-index="7" 
stop-index="18">
                 <binary-operation-expression start-index="7" stop-index="18">
@@ -4858,7 +4858,7 @@
         </projections>
     </select>
     
-    <select sql-case-id="select_positional_parameter_type_cast_money" 
parameters="123.00" >
+    <select sql-case-id="select_positional_parameter_type_cast_money" 
parameters="123.00">
         <projections start-index="7" stop-index="15">
             <expression-projection text="$1::money" start-index="7" 
stop-index="15">
                 <binary-operation-expression start-index="7" stop-index="15">
@@ -4873,4 +4873,16 @@
             </expression-projection>
         </projections>
     </select>
+    
+    <select sql-case-id="select_string_constant_type_cast">
+        <projections start-index="7" stop-index="25">
+            <!-- TODO Fix this case after supported string const type cast 
syntax-->
+            <expression-projection text="int4 '1'" start-index="7" 
stop-index="14">
+                <literal-expression value="1" start-index="7" stop-index="14" 
/>
+            </expression-projection>
+            <expression-projection text="money '2'" start-index="17" 
stop-index="25">
+                <literal-expression value="2" start-index="17" stop-index="25" 
/>
+            </expression-projection>
+        </projections>
+    </select>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/select.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/select.xml
index 297c499caad..2fd1b55d9d0 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select.xml
@@ -158,4 +158,5 @@
     <sql-case id="select_with_null_keyword_in_projection" value="select null 
as order_id, item_id from t_order" db-types="MySQL" />
     <sql-case id="select_literal_type_cast_money" value="SELECT '$99'::money" 
db-types="PostgreSQL,openGauss" />
     <sql-case id="select_positional_parameter_type_cast_money" value="SELECT 
$1::money" db-types="PostgreSQL,openGauss" case-types="Placeholder" />
+    <sql-case id="select_string_constant_type_cast" value="SELECT int4 '1', 
money '2'" db-types="PostgreSQL,openGauss" />
 </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 d66083c3879..0536a7b47aa 100644
--- a/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
+++ b/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
@@ -34,7 +34,6 @@
     <sql-case id="unsupported_select_case_for_opengauss_14" value="select 
count(*) from partition_list_tab partition for ('10');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_15" value="select 
count(*) from partition_list_tab partition for ('20');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_16" value="select 
count(*) from partition_list_tab partition for ('30');" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_24" value="select case 
when date '2018-09-17' &gt; date '2018-09-16' then 'A' else 'B' end;" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_25" value="select 
''null''::jsonb;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_26" value="select 
''null''::json;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_27" value="select 
&amp;quot;{&amp;quot;name&amp;quot;: [&amp;quot;john&amp;quot;, false],  
&amp;quot;age&amp;quot;:    18,  &amp;quot;assress&amp;quot;:  
{&amp;quot;country&amp;quot; :&amp;quot;china&amp;quot;, 
&amp;quot;zip-code&amp;quot;: 
&amp;quot;10000&amp;quot;},&amp;quot;true&amp;quot;:true}&amp;quot;::JSON;" 
db-types="openGauss" />
@@ -145,9 +144,6 @@
     <sql-case id="unsupported_select_case_for_opengauss_139" value="select 
array_lower([1,2,3], 1) as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_140" value="select 
array_lower(array[1,2,3], @) as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_141" value="select 
array_lower(array[1,2,3], ) as result;" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_142" value="select 
col1 / double precision '1.5' from test_date01;" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_143" value="select 
double precision '1.5' * col1  from test_date01;" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_144" value="select 
col1:: date + integer '7'  from test_date01;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_145" value="select 
daterange('2000-05-06','2000-08-08','(]');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_146" value="select 
daterange('2000-05-06 00:01:09','2000-08-08 19:59:00','(]');" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_147" value="select 
daterange('2000-05-06 12:01:09','2000-08-08 19:59:00','(]');" 
db-types="openGauss" />
@@ -171,19 +167,15 @@
     <sql-case id="unsupported_select_case_for_opengauss_165" value="select 
daterange('2000-05-06 12:01:09','2000-08-08 19:59:00','[]');" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_166" value="select 
daterange('2000-05-06 00:01:09','2000-08-08 09:59:00','[]');" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_167" value="select 
daterange('2000-05-06 17:01:09','2000-08-08 09:59:00','[]');" 
db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_168" value="select 
date '2019-1-6' -  col1  from test_date01;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_169" value="select 
daterange('2001-02-16 20:38:40','2001-02-16 20:38:41');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_170" value="select 
daterange('2018-05-14 14:09:04.127444+08','2018-05-16 14:09:04.127444+08');" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_171" value="select 
daterange('2000-05-06','2000-08-08');" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_172" value="select 
col1:: date - integer '7'  from test_date01;" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_173" value="select 
ADD_MONTHS('2018-02-28',1) - date'2018-02-28'  from  sys_dummy;" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_174" value="select 
bitand(6,) as result from sys_dummy;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_175" value="select 
bitand(,6) as result from sys_dummy;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_176" value="select 
first(s_name) as name, first(s_id nulls first ) from first06;" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_177" value="select 
notlike(1, );" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_178" value="select 
sin(2  2) as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_179" value="select 
sin(2)(2) as result;" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_180" value="select 
length(EXTRACT (MONTH FROM DATE '2018-10-04')) from sys_dummy;" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_181" value="select 
acos(2  2) as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_182" value="select 
acos(2)(2) as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_183" value="select 
acos 1 as result;" db-types="openGauss" />
@@ -436,12 +428,8 @@
     <sql-case id="unsupported_select_case_for_opengauss_438" value="select 
B'101' | as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_439" value="select 
B'101' # as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_440" value="select 
B'11110' # B'0000';" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_441" value="select 
extract(epoch from timestamp with time zone '2001-02-16 20:38:40.12-08') from 
sys_dummy;" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_442" value="select 
timestamp with time zone 'epoch' + 982384720.12 * interval '1 second' as 
result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_443" value="select 
extract(quarter from timestamp '2001-02-16 20:38:40') from sys_dummy;" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_444" value="select 
extract(week from timestamp '2001-02-16 20:38:40') from sys_dummy;" 
db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_445" value="select 
extract(isoyear from date '2006-01-01') from sys_dummy;" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_446" value="select 
extract(isoyear from date '2006-01-02') from sys_dummy;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_447" value="select 
atan(11 11) from sys_dummy;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_448" value="select 
atan(,) from sys_dummy;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_449" value="select 
to_tsvector('fat cats ate fat rats') @@ 'fa:*'::tsquery as result;" 
db-types="openGauss" />
@@ -497,18 +485,11 @@
     <sql-case id="unsupported_select_case_for_opengauss_499" value="select !! 
'cat'::tsquery as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_500" value="select 
'fat:ab'::tsquery  || 'fa:ab'::tsquery as result;" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_501" value="select 
'rat'::tsquery &amp;&amp; 'cat'::tsquery &amp;&amp; ',' ::tsquery  as result;" 
db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_502" value="select 
cast(date 'epoch' as nchar(37));" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_503" value="select 
to_char(interval '2' year ,'yyyy','yyyy');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_504" value="select 
to_char(interval 2 year);" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_505" value="select 
to_char(current_timestamp, 0x5d);" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_506" value="select 
to_char(pg_systimestamp(), #%&amp;^);" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_507" value="select 
to_char(-1239.456::numeric(7,3),''汉字'');" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_508" value="select 
to_char(date 'epoch', 'hh12:mi:ss yyyy-month-dd');" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_509" value="select 
to_char(timestamp with time zone '2010-09-13 12:32:03+08', 'hh12:mi:ss');" 
db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_510" value="select 
to_char(timestamp with time zone '2015-10-14 11:21:28.317367 pst', 
'hh12:mi:ss');" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_511" value="select 
to_char(timestamp with time zone '2015-10-14 11:21:28.317367 america/new_york', 
'hh12:mi:ss');" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_512" value="select 
to_char(timestamp with time zone '2015-10-14 11:21:28.317367+08', 
'hh12:mi:ss');" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_513" value="select 
to_char(timestamp without time zone '2010-09-13 12:32:03+08');" 
db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_514" value="select 
to_char(interval '2' year ,'yyyy');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_515" value="select 
to_char(interval '3' day ,'ddd');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_516" value="select 
to_char(interval '3' day ,'dd');" db-types="openGauss" />
@@ -520,8 +501,6 @@
     <sql-case id="unsupported_select_case_for_opengauss_522" value="select 
to_number( , '99g999d9s');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_523" value="select 
to_number(&lt;1*8+9/3-9%3+9/2&gt;, '999999d99');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_524" value="select 
to_timestamp(-#&amp;%#^5);" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_525" value="select 
to_char(date 'allballs', 'hh24:mi:ss ms');" db-types="openGauss" />
-    <sql-case id="unsupported_select_case_for_opengauss_526" value="select 
to_char(timestamp with time zone '2015-10-14 11:21:28.317367 
america/new_yorkkk', 'hh12:mi:ss');" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_527" value="select 
coalesce(,1,null,2);" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_528" value="select 
coalesce();" db-types="openGauss" />
     <sql-case id="unsupported_select_case_for_opengauss_529" value="select 
localtimestamp('skdfhhgh跳或者购买功能') from sys_dummy;" db-types="openGauss" />

Reply via email to