[
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 actual result "(INTEGER NOT NULL, NULL) MAP NOT NULL" for this
case is wrong. If we switch to this case it throw 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 [1, null] will do leastRestrictive, the null will cast to
Integer, so the end converted result type is (INTEGER NOT NULL, INTEGER), but
the temp type is (INTEGER NOT NULL, NULL).
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 actual result "(INTEGER NOT NULL, NULL) MAP NOT NULL" for this
case is wrong. If we switch to this case it throw 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 [1, null] will do leastRestrictive, the null will cast to
Integer, so the end result type is (INTEGER NOT NULL, INTEGER), but the temp
type is (INTEGER NOT NULL, NULL).
> 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 actual result "(INTEGER NOT NULL, NULL) MAP NOT NULL" for this
> case is wrong. If we switch to this case it throw 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 [1, null] will do leastRestrictive, the null will cast to
> Integer, so the end converted result type is (INTEGER NOT NULL, INTEGER), but
> the temp type is (INTEGER NOT NULL, NULL).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)