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

Mihai Budiu resolved CALCITE-7880.
----------------------------------
    Fix Version/s: 1.43.0
       Resolution: Fixed

Fixed in 
[https://github.com/apache/calcite/commit/68f16139b5ca26a1519eae071ab217de3ae8c9df]

Thank you for the fix xgbtxy

> Unqualified common column of JOIN USING has the left column's type, so 
> arithmetic on it can overflow
> ----------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-7880
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7880
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>            Reporter: Vladimir Sitnikov
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.43.0
>
>
> An unqualified reference to the common column of an inner {{JOIN ... USING}} 
> has the type of the left column, while {{SELECT *}} over the same join gives 
> that column the common type of both sides. When the left column has the 
> narrower type, arithmetic on the column overflows.
> On main (6ff13eaccd):
> {code:sql}
> SELECT k + 1 AS x
> FROM (VALUES (CAST(2147483647 AS INTEGER))) AS d(k)
> JOIN (VALUES (CAST(2147483647 AS BIGINT))) AS f(k) USING (k)
> {code}
> returns
> {noformat}
> X=-2147483648
> {noformat}
> On 1.42.0 the same query returns {{X=2147483648}}.
> Type of column {{K}} for the same join (FROM clause as above):
> ||Query||main (6ff13eaccd)||1.42.0||
> |{{SELECT *}}|{{K BIGINT NOT NULL}}|{{K BIGINT NOT NULL}}|
> |{{SELECT k}}|{{K INTEGER NOT NULL}}|{{K BIGINT NOT NULL}}|
> Expected: {{SELECT k}} has the type {{SELECT *}} gives the column, {{BIGINT 
> NOT NULL}} in the example, and the query returns {{X=2147483648}}, as it does 
> on 1.42.0. The SQL standard defines the common column of a USING join as 
> {{COALESCE(TA.C, TB.C)}}, whose type is the common type of the two columns.
> h3. Possible cause
> This is a guess from reading the code; the report above stands without it. 
> [CALCITE-2659] (commit aa90b89709, not in any release) changed 
> {{SqlValidatorImpl#expandExprFromJoin}} to expand the column into the left 
> column for INNER and LEFT joins and into the right column for RIGHT joins, 
> instead of {{COALESCE(left, right)}}. The reference then keeps that column's 
> own type. Casting the reference to the common type when the two column types 
> differ would keep the plan improvement of CALCITE-2659. RIGHT and NATURAL 
> joins take the same path; I did not run them.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to