From 455e0a43b6ef62256a1a39707109f0be0aa8554d Mon Sep 17 00:00:00 2001 From: "zhen.song" <2438143730@qq.com> Date: Mon, 26 Sep 2022 17:11:22 +0800 Subject: [PATCH 1/2] fix cast literal to decimal --- .../org/apache/calcite/rex/RexBuilder.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/src/main/java/org/apache/calcite/rex/RexBuilder.java b/core/src/main/java/org/apache/calcite/rex/RexBuilder.java index 4998c8daa7e..5653160a196 100644 --- a/core/src/main/java/org/apache/calcite/rex/RexBuilder.java +++ b/core/src/main/java/org/apache/calcite/rex/RexBuilder.java @@ -37,6 +37,7 @@ import org.apache.calcite.sql.fun.SqlCountAggFunction; import org.apache.calcite.sql.fun.SqlStdOperatorTable; import org.apache.calcite.sql.type.ArraySqlType; +import org.apache.calcite.sql.type.BasicSqlType; import org.apache.calcite.sql.type.MapSqlType; import org.apache.calcite.sql.type.MultisetSqlType; import org.apache.calcite.sql.type.SqlTypeFamily; @@ -547,6 +548,19 @@ public RexNode makeCast( } return literal2; } + if (type instanceof BasicSqlType + && type.getSqlTypeName() == SqlTypeName.DECIMAL) { + BigDecimal newValue = null; + if (value instanceof BigDecimal) { + newValue = ((BigDecimal) value); + } else if (value instanceof NlsString) { + newValue = new BigDecimal(((NlsString) value).getValue()); + } + if (newValue != null) { + newValue = newValue.setScale(type.getScale(), BigDecimal.ROUND_HALF_UP); + return makeLiteral(newValue, type, SqlTypeName.DECIMAL); + } + } } else if (SqlTypeUtil.isExactNumeric(type) && SqlTypeUtil.isInterval(exp.getType())) { return makeCastIntervalToExact(type, exp); @@ -913,6 +927,11 @@ protected RexLiteral makeLiteral( p = 0; } o = ((TimestampString) o).round(p); + case DECIMAL: + if (o instanceof BigDecimal) { + + } + o = ((BigDecimal) o).setScale(2, BigDecimal.ROUND_HALF_UP); } return new RexLiteral(o, type, typeName); } From 6c00a0c2632d76dd5f8b15a7bfa72d862767370c Mon Sep 17 00:00:00 2001 From: "zhen.song" <2438143730@qq.com> Date: Mon, 26 Sep 2022 17:18:26 +0800 Subject: [PATCH 2/2] add --- core/src/main/java/org/apache/calcite/rex/RexBuilder.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core/src/main/java/org/apache/calcite/rex/RexBuilder.java b/core/src/main/java/org/apache/calcite/rex/RexBuilder.java index 5653160a196..4eafd623478 100644 --- a/core/src/main/java/org/apache/calcite/rex/RexBuilder.java +++ b/core/src/main/java/org/apache/calcite/rex/RexBuilder.java @@ -927,11 +927,6 @@ protected RexLiteral makeLiteral( p = 0; } o = ((TimestampString) o).round(p); - case DECIMAL: - if (o instanceof BigDecimal) { - - } - o = ((BigDecimal) o).setScale(2, BigDecimal.ROUND_HALF_UP); } return new RexLiteral(o, type, typeName); }