You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Evgeny Stanilovsky (Jira)" <ji...@apache.org> on 2023/02/08 10:53:00 UTC

[jira] [Assigned] (IGNITE-18753) Sql. Conversion to relational algebra failed to preserve datatypes.

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

Evgeny Stanilovsky reassigned IGNITE-18753:
-------------------------------------------

    Assignee: Evgeny Stanilovsky

> Sql. Conversion to relational algebra failed to preserve datatypes.
> -------------------------------------------------------------------
>
>                 Key: IGNITE-18753
>                 URL: https://issues.apache.org/jira/browse/IGNITE-18753
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>            Reporter: Maksim Zhuravkov
>            Assignee: Evgeny Stanilovsky
>            Priority: Major
>              Labels: calcite2-required, calcite3-required, ignite-3
>             Fix For: 3.0.0-beta2
>
>
> MRE:
> {code:java}
> @Test
> public void testThis() {
>     assertQuery("SELECT ?::INTEGER = '8'")
>             .withParams(8)
>             .returns(true)
>             .check();
> }
> {code}
> Output:
> {code:java}
> Conversion to relational algebra failed to preserve datatypes:
> validated type:
> RecordType(BOOLEAN NOT NULL EXPR$0) NOT NULL
> converted type:
> RecordType(BOOLEAN EXPR$0) NOT NULL
> rel:
> LogicalProject(EXPR$0=[=(?0, 8)])
>   LogicalValues(tuples=[[{ 0 }]])
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:492)
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:607)
> 	at org.apache.ignite.internal.sql.engine.prepare.IgnitePlanner.rel(IgnitePlanner.java:222)
> 	at org.apache.ignite.internal.sql.engine.prepare.PlannerHelper.optimize(PlannerHelper.java:63)
> 	at org.apache.ignite.internal.sql.engine.prepare.PrepareServiceImpl.lambda$prepareExplain$0(PrepareServiceImpl.java:208)
> {code}
> It seems that nullability attribute is being lost somewhere at the validation stage.
> The error does not depend on a type of a dynamic parameter because the query below also trigger the same assertion:
> {code:java}
> @Test
> public void oops() {
>     assertQuery("SELECT ?::VARCHAR = '8'")
>             .withParams("8")
>             .returns(true)
>             .check();
> }
> {code}
> P.S.
> From the first glance it may look like it is related to dynamic parameters. This error is present in main branch.
> Then I switched to commit that introduces IGNITE-18282: Illegal use of dynamic parameter exception in SQL functions (#1418) (November)  and commented out IgniteSqlValidator::inferUnknownTypes. And I still got this error.



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