Ran Tao created CALCITE-6040:
--------------------------------

             Summary: 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


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).



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

Reply via email to