[ 
https://issues.apache.org/jira/browse/CALCITE-7174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18022698#comment-18022698
 ] 

Alessandro Solimando edited comment on CALCITE-7174 at 9/25/25 10:35 AM:
-------------------------------------------------------------------------

Sorry for the late reply [~korlov] and thanks for your comment.

I forgot about the unsigned types we now support, I am working on covering them 
too, I realized it's enough work for a PR already.

I will create a follow-up ticket for DateTime types, which are again pretty 
complex when covering timezones etc., not sure I will have bandwidth to tackle 
it myself but having the ticket is already good value.

EDIT: I have updated the description with what I have worked on, will open a PR 
shortly


was (Author: asolimando):
Sorry for the late reply [~korlov] and thanks for your comment.

I forgot about the unsigned types we now support, I am working on covering them 
too, I realized it's enough work for a PR already.

I will create a follow-up ticket for DateTime types, which are again pretty 
complex when covering timezones etc., not sure I will have bandwidth to tackle 
it myself but having the ticket is already good value.

> Improve detection of lossless casts from INT family to FLOAT/REAL/DECIMAL
> -------------------------------------------------------------------------
>
>                 Key: CALCITE-7174
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7174
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.40.0
>            Reporter: Alessandro Solimando
>            Assignee: Alessandro Solimando
>            Priority: Minor
>
> [RexUtil.java#isLossLessCast|https://github.com/apache/calcite/blob/calcite-1.40.0/core/src/main/java/org/apache/calcite/rex/RexUtil.java#L1692]
>  doesn't handle casts from the INT family to non-INT numeric are not covered 
> at all and always considered lossy.
> This ticket proposes to detect the following additional cases as being 
> lossless:
> - INTEGER-family (signed and unsigned) => INTEGER-family when the target 
> range fully covers the source range, checked via numeric limits
> - DECIMAL(p, s=0) => INTEGER-family when the decimal range is entirely 
> contained in the target integer range
> - INTEGER-family (signed/unsigned) => DECIMAL(p, s) when the integer digits 
> fit within (p - s)
> - DECIMAL(p, s=0) / INTEGER-family => APPROXIMATE numerics when the target 
> has at least as many significant digits
> All other cases, including DECIMAL with non-zero scale, remain conservative 
> and are treated as lossy, to honor the method contract (OK to be incomplete 
> but no false positives).
> The newly supported cases must (at least) be covered appropriately in 
> _RexLosslessCastTest_.
> The method has been introduced in Calcite 1.22 and it's still marked as 
> experimental despite being [in 
> use|https://github.com/search?q=repo%3Aapache/calcite%20isLosslessCast&type=code]
>  for years now in several key components, this ticket also proposes promote 
> it to "stable".



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

Reply via email to