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

Aleksandr Efimov reassigned IMPALA-15300:
-----------------------------------------

    Assignee: Aleksandr Efimov

> Calcite planner: narrow integer operands for Substrait substring and round
> --------------------------------------------------------------------------
>
>                 Key: IMPALA-15300
>                 URL: https://issues.apache.org/jira/browse/IMPALA-15300
>             Project: IMPALA
>          Issue Type: Sub-task
>          Components: Frontend
>            Reporter: Aleksandr Efimov
>            Assignee: Aleksandr Efimov
>            Priority: Major
>
> IMPALA-15297 maps Impala operators onto the Substrait functions they stand 
> for by name. Two of them need more than a name.
> Substrait's substring takes its position and length as i32, and Impala 
> declares substr with bigint parameters, so the call arrives as 
> SUBSTR(varchar, i64, i64) and matches nothing. Round is the same mismatch the 
> other way: Substrait's round takes the digit count as i32 while Impala types 
> it from the literal, so a two-argument round arrives with an i8. Calcite's 
> own SUBSTRING runs into this here as well, so the width is Substrait's choice 
> rather than an Impala quirk, and Isthmus's own coercion takes the operand 
> types as they come.
> Narrow those operands to i32 before matching. Isthmus has a hook for 
> supplying different operands but it is package private; the converter itself 
> is public, so the narrowing belongs there, at the point where the two type 
> systems meet, rather than in a pass over the plan.
> The narrowing is an explicit cast rather than a silent reinterpretation, 
> which Isthmus writes out with THROW_EXCEPTION behaviour. That is stricter 
> than Impala, which returns no rows rather than failing for a position past 
> the i32 range. Substrait has no wider substring to target, so the choice is 
> between saying so in the plan and not exporting these queries at all.
> Over the TPC-DS queries that carry Calcite goldens this takes the exporter 
> from 84 of 110 to 96: substr accounts for ten of them and round for two.
> A one-argument round stays out. Every Substrait round variant takes a digit 
> count, so there is nothing to match, and carrying it across would mean 
> inventing an operand rather than adjusting one.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to