duan xiong created CALCITE-4911: ----------------------------------- Summary: CAST operation should throw an exception when cast DECIMAL type lose significant digits Key: CALCITE-4911 URL: https://issues.apache.org/jira/browse/CALCITE-4911 Project: Calcite Issue Type: Bug Affects Versions: 1.28.0 Reporter: duan xiong
In Calcite: {code:java} select avg(comm) as a from "scott".emp{code} This SQL physical plan is: {noformat} EnumerableProject(A=[CAST(/(CAST(CASE(=($1, 0), null:DECIMAL(19, 2), $0)):DECIMAL(7, 2), $1)):DECIMAL(7, 2)]) EnumerableAggregate(group=[{}], agg#0=[$SUM0($6)], agg#1=[COUNT($6)]) EnumerableTableScan(table=[[scott, EMP]]){noformat} As above: The Calcite tries to cast DECIMAL(19,2) to DECIMAL(7,2). Actually, this cast should throw an exception but not. According to SQL Standard's description about <CAST specification>: If TD is exact numeric, then Case: a) If SD is exact numeric or approximate numeric, then Case: i) If there is a representation of SV in the data type *TD that does not lose any leading significant digits* after rounding or truncating if necessary, then TV is that representation. The choice of whether to round or truncate is implementation-defined. ii) Otherwise, {*}an exception condition is raised{*}: data exception------numeric value out of range. -- This message was sent by Atlassian Jira (v8.20.1#820001)