This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 773d118f4f8 [fix](planner)strip trailing zeros for decimal literal if
the precision larger than max decimal precision in doris (#29761)
773d118f4f8 is described below
commit 773d118f4f801f10a9be781374c0458540c54da7
Author: starocean999 <[email protected]>
AuthorDate: Wed Jan 10 21:32:16 2024 +0800
[fix](planner)strip trailing zeros for decimal literal if the precision
larger than max decimal precision in doris (#29761)
---
.../main/java/org/apache/doris/analysis/DecimalLiteral.java | 11 +++++++++++
.../java/org/apache/doris/analysis/DecimalLiteralTest.java | 7 +++++++
2 files changed, 18 insertions(+)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java
index 1fb14027a5c..ae0a31c2f43 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java
@@ -126,6 +126,17 @@ public class DecimalLiteral extends LiteralExpr {
this.value = value;
int precision = getBigDecimalPrecision(this.value);
int scale = getBigDecimalScale(this.value);
+ int maxPrecision = ScalarType.MAX_DECIMAL128_PRECISION;
+ int integerPart = precision - scale;
+ if (precision > maxPrecision) {
+ BigDecimal stripedValue = value.stripTrailingZeros();
+ int stripedPrecision = getBigDecimalPrecision(stripedValue);
+ if (stripedPrecision <= maxPrecision) {
+ this.value = stripedValue.setScale(maxPrecision - integerPart);
+ precision = getBigDecimalPrecision(this.value);
+ scale = getBigDecimalScale(this.value);
+ }
+ }
if (enforceV3) {
type = ScalarType.createDecimalV3Type(precision, scale);
} else {
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/analysis/DecimalLiteralTest.java
b/fe/fe-core/src/test/java/org/apache/doris/analysis/DecimalLiteralTest.java
index 11cccf25bf6..a4ba959cf87 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/DecimalLiteralTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/DecimalLiteralTest.java
@@ -82,5 +82,12 @@ public class DecimalLiteralTest {
scale = ((ScalarType) literal.getType()).getScalarScale();
Assert.assertEquals(3, precision);
Assert.assertEquals(3, scale);
+
+ decimal = new BigDecimal("197323961.520000000000000000000000000000");
+ literal = new DecimalLiteral(decimal);
+ precision = ((ScalarType) literal.getType()).getScalarPrecision();
+ scale = ((ScalarType) literal.getType()).getScalarScale();
+ Assert.assertEquals(38, precision);
+ Assert.assertEquals(29, scale);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]