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