[ 
https://issues.apache.org/jira/browse/CALCITE-5731?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

jackylau updated CALCITE-5731:
------------------------------
    Description: 
the cast standard grammar it here from iso 2016
{code:java}
// code placeholder
<cast specification> ::=
CAST <left paren> <cast operand> AS <cast target> <right paren>
<cast operand> ::=
<value expression>
| <implicitly typed value specification>
<cast target> ::=
<domain name>
| <data type>

<data type> ::=
<predefined type>
| <row type>
| <path-resolved user-defined type name>
| <reference type>
| <collection type>


<collection type> ::=
<array type>
| <multiset type>
<array type> ::=
<data type> ARRAY
[ <left bracket or trigraph> <maximum cardinality> <right bracket or trigraph> 
] {code}
 

not null/ null are constraint, can not be in cast, only can be in ddl
{code:java}
// this simple type and collection type will throw exception in calcite now
expr("cast(x as integer ^not^ null)")
    .fails("(?s).*Encountered \"not\" at .*");
expr("cast(x as integer ^not^ null array)")
    .fails("(?s).*Encountered \"not\" at .*");
expr("cast(x as integer array ^not^ null)")
    .fails("(?s).*Encountered \"not\" at .*"); 

// but the followings are not 
expr("cast(x as row(f0 int ^not^ null))")
    .fails("(?s).*Encountered \"not\" at .*");
expr("cast(x as row(f0 varchar ^null^))")
    .fails("(?s).*Encountered \"null\" at .*");
expr("cast(x as row(f0 int ^not^ null, f1 varchar ^null^))")
    .fails("(?s).*Encountered \"not\" at .*");{code}
 

  was:
the cast standard grammar it here from iso 2016
{code}
// code placeholder
<cast specification> ::=
CAST <left paren> <cast operand> AS <cast target> <right paren>
<cast operand> ::=
<value expression>
| <implicitly typed value specification>
<cast target> ::=
<domain name>
| <data type>

<data type> ::=
<predefined type>
| <row type>
| <path-resolved user-defined type name>
| <reference type>
| <collection type>


<collection type> ::=
<array type>
| <multiset type>
<array type> ::=
<data type> ARRAY
[ <left bracket or trigraph> <maximum cardinality> <right bracket or trigraph> 
] {code}


> cast to row type should throw exception when contains null/not null constraint
> ------------------------------------------------------------------------------
>
>                 Key: CALCITE-5731
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5731
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.35.0
>            Reporter: jackylau
>            Priority: Major
>             Fix For: 1.35.0
>
>
> the cast standard grammar it here from iso 2016
> {code:java}
> // code placeholder
> <cast specification> ::=
> CAST <left paren> <cast operand> AS <cast target> <right paren>
> <cast operand> ::=
> <value expression>
> | <implicitly typed value specification>
> <cast target> ::=
> <domain name>
> | <data type>
> <data type> ::=
> <predefined type>
> | <row type>
> | <path-resolved user-defined type name>
> | <reference type>
> | <collection type>
> <collection type> ::=
> <array type>
> | <multiset type>
> <array type> ::=
> <data type> ARRAY
> [ <left bracket or trigraph> <maximum cardinality> <right bracket or 
> trigraph> ] {code}
>  
> not null/ null are constraint, can not be in cast, only can be in ddl
> {code:java}
> // this simple type and collection type will throw exception in calcite now
> expr("cast(x as integer ^not^ null)")
>     .fails("(?s).*Encountered \"not\" at .*");
> expr("cast(x as integer ^not^ null array)")
>     .fails("(?s).*Encountered \"not\" at .*");
> expr("cast(x as integer array ^not^ null)")
>     .fails("(?s).*Encountered \"not\" at .*"); 
> // but the followings are not 
> expr("cast(x as row(f0 int ^not^ null))")
>     .fails("(?s).*Encountered \"not\" at .*");
> expr("cast(x as row(f0 varchar ^null^))")
>     .fails("(?s).*Encountered \"null\" at .*");
> expr("cast(x as row(f0 int ^not^ null, f1 varchar ^null^))")
>     .fails("(?s).*Encountered \"not\" at .*");{code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to