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

Ran Tao updated CALCITE-6040:
-----------------------------
    Description: 
we have a simple test case:
{code:java}
f.checkScalar("map[1, null]", "{1=null}",
"(INTEGER NOT NULL, INTEGER) MAP NOT NULL"); {code}
The result is:
{noformat}
java.lang.AssertionError: Query: values (map[1, null])
Expected: is "(INTEGER NOT NULL, INTEGER) MAP NOT NULL"
     but: was "(INTEGER NOT NULL, NULL) MAP NOT NULL"
{noformat}
however, the asserted actual result "(INTEGER NOT NULL, NULL) MAP NOT NULL" for 
this case is wrong. If we switch to  this asserted actual result it throws 
another exception:
{noformat}
java.lang.AssertionError: Query: select map[p0, null] from (values (1)) as t(p0)
Expected: is "(INTEGER NOT NULL, NULL) MAP NOT NULL"
     but: was "(INTEGER NOT NULL, INTEGER) MAP NOT NULL"
{noformat}
No matter how you write this result type in test case, it is wrong. 
but if we use 
{code:java}
f.check("select map[1, null]", "{1=null}", "(INTEGER NOT NULL, INTEGER) MAP NOT 
NULL");  {code}
it works.

the reason is map[1, null] will do leastRestrictive, the null will convert to 
Integer, so the end converted result type is (INTEGER NOT NULL, INTEGER), but 
the temp type is (INTEGER NOT NULL, NULL). 

This case indicates that we can not use 'checkScalar' if the expression has 
converted types.

btw, Just report this issue, it maybe not a bug. (we can use 
SqlOperatorFixture.check in this situation)

  was:
we have a simple test case:
{code:java}
f.checkScalar("map[1, null]", "{1=null}",
"(INTEGER NOT NULL, INTEGER) MAP NOT NULL"); {code}
The result is:
{noformat}
java.lang.AssertionError: Query: values (map[1, null])
Expected: is "(INTEGER NOT NULL, INTEGER) MAP NOT NULL"
     but: was "(INTEGER NOT NULL, NULL) MAP NOT NULL"
{noformat}
however, the asserted actual result "(INTEGER NOT NULL, NULL) MAP NOT NULL" for 
this case is wrong. If we switch to  this asserted actual result it throws 
another exception:
{noformat}
java.lang.AssertionError: Query: select map[p0, null] from (values (1)) as t(p0)
Expected: is "(INTEGER NOT NULL, NULL) MAP NOT NULL"
     but: was "(INTEGER NOT NULL, INTEGER) MAP NOT NULL"
{noformat}
No matter how you write this result type in test case, it is wrong. 
but if we use 
{code:java}
f.check("select map[1, null]", "{1=null}", "(INTEGER NOT NULL, INTEGER) MAP NOT 
NULL");  {code}
it works.

the reason is map[1, null] will do leastRestrictive, the null will convert to 
Integer, so the end converted result type is (INTEGER NOT NULL, INTEGER), but 
the temp type is (INTEGER NOT NULL, NULL).

This case indicates that we can not use 'checkScalar' if the expression has 
converted types.

btw, Just report this issue, it maybe not a bug. (we can use 
SqlOperatorFixture.check in this situation)


> SqlOperatorFixture check result type failed for converted types
> ---------------------------------------------------------------
>
>                 Key: CALCITE-6040
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6040
>             Project: Calcite
>          Issue Type: Bug
>          Components: tests
>    Affects Versions: 1.35.0
>            Reporter: Ran Tao
>            Priority: Major
>
> we have a simple test case:
> {code:java}
> f.checkScalar("map[1, null]", "{1=null}",
> "(INTEGER NOT NULL, INTEGER) MAP NOT NULL"); {code}
> The result is:
> {noformat}
> java.lang.AssertionError: Query: values (map[1, null])
> Expected: is "(INTEGER NOT NULL, INTEGER) MAP NOT NULL"
>      but: was "(INTEGER NOT NULL, NULL) MAP NOT NULL"
> {noformat}
> however, the asserted actual result "(INTEGER NOT NULL, NULL) MAP NOT NULL" 
> for this case is wrong. If we switch to  this asserted actual result it 
> throws another exception:
> {noformat}
> java.lang.AssertionError: Query: select map[p0, null] from (values (1)) as 
> t(p0)
> Expected: is "(INTEGER NOT NULL, NULL) MAP NOT NULL"
>      but: was "(INTEGER NOT NULL, INTEGER) MAP NOT NULL"
> {noformat}
> No matter how you write this result type in test case, it is wrong. 
> but if we use 
> {code:java}
> f.check("select map[1, null]", "{1=null}", "(INTEGER NOT NULL, INTEGER) MAP 
> NOT NULL");  {code}
> it works.
> the reason is map[1, null] will do leastRestrictive, the null will convert to 
> Integer, so the end converted result type is (INTEGER NOT NULL, INTEGER), but 
> the temp type is (INTEGER NOT NULL, NULL). 
> This case indicates that we can not use 'checkScalar' if the expression has 
> converted types.
> btw, Just report this issue, it maybe not a bug. (we can use 
> SqlOperatorFixture.check in this situation)



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

Reply via email to