[ https://issues.apache.org/jira/browse/CALCITE-6147?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benchao Li updated CALCITE-6147: -------------------------------- Description: Lossless cast removal has been introduced in CALCITE-3712. However, {{{}VARCHAR{}}}'s precision is {{{}-1{}}}, which will not meet the lossless condition {code:java} // 3) From NUMERIC family to CHARACTER family: it depends on the precision/scale if (sourceSqlTypeName.getFamily() == SqlTypeFamily.NUMERIC && targetSqlTypeName.getFamily() == SqlTypeFamily.CHARACTER) { int sourceLength = source.getPrecision() + 1; // include sign if (source.getScale() != -1 && source.getScale() != 0) { sourceLength += source.getScale() + 1; // include decimal mark } return target.getPrecision() >= sourceLength; // target.getPrecision() is -1, which will make the optimization fail. } {code} was: Lossless case removal has been introduced in CALCITE-3712. However, {{VARCHAR}}'s precision is {{-1}}, which will not meet the lossless condition {code:java} // 3) From NUMERIC family to CHARACTER family: it depends on the precision/scale if (sourceSqlTypeName.getFamily() == SqlTypeFamily.NUMERIC && targetSqlTypeName.getFamily() == SqlTypeFamily.CHARACTER) { int sourceLength = source.getPrecision() + 1; // include sign if (source.getScale() != -1 && source.getScale() != 0) { sourceLength += source.getScale() + 1; // include decimal mark } return target.getPrecision() >= sourceLength; // target.getPrecision() is -1, which will make the optimization fail. } {code} > CAST(CAST(EMPNO AS VARCHAR) AS INT) should be simplified to EMPNO > ----------------------------------------------------------------- > > Key: CALCITE-6147 > URL: https://issues.apache.org/jira/browse/CALCITE-6147 > Project: Calcite > Issue Type: Improvement > Components: core > Affects Versions: 1.36.0 > Reporter: Benchao Li > Assignee: Benchao Li > Priority: Major > > Lossless cast removal has been introduced in CALCITE-3712. > However, {{{}VARCHAR{}}}'s precision is {{{}-1{}}}, which will not meet the > lossless condition > {code:java} > // 3) From NUMERIC family to CHARACTER family: it depends on the > precision/scale > if (sourceSqlTypeName.getFamily() == SqlTypeFamily.NUMERIC > && targetSqlTypeName.getFamily() == SqlTypeFamily.CHARACTER) { > int sourceLength = source.getPrecision() + 1; // include sign > if (source.getScale() != -1 && source.getScale() != 0) { > sourceLength += source.getScale() + 1; // include decimal mark > } > return target.getPrecision() >= sourceLength; // target.getPrecision() > is -1, which will make the optimization fail. > } > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)