You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ja...@apache.org on 2022/12/06 07:53:12 UTC
[flink] branch master updated: [FLINK-30245][table-runtime] Fix the NPE thrown when filtering decimal(18, x) values after calling DecimalDataUtils.subtract method
This is an automated email from the ASF dual-hosted git repository.
jark pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new bca57b7a222 [FLINK-30245][table-runtime] Fix the NPE thrown when filtering decimal(18, x) values after calling DecimalDataUtils.subtract method
bca57b7a222 is described below
commit bca57b7a222615869ddc38acdeb46c436b1bc0b3
Author: Wei Zhong <we...@gmail.com>
AuthorDate: Tue Dec 6 15:53:03 2022 +0800
[FLINK-30245][table-runtime] Fix the NPE thrown when filtering decimal(18, x) values after calling DecimalDataUtils.subtract method
This closes #21429
---
.../java/org/apache/flink/table/data/DecimalDataUtils.java | 10 ++++++++--
.../test/java/org/apache/flink/table/data/DecimalDataTest.java | 5 +++++
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/data/DecimalDataUtils.java b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/data/DecimalDataUtils.java
index 320d9a3bcc9..d88848ab311 100644
--- a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/data/DecimalDataUtils.java
+++ b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/data/DecimalDataUtils.java
@@ -104,7 +104,10 @@ public final class DecimalDataUtils {
}
public static DecimalData add(DecimalData v1, DecimalData v2, int precision, int scale) {
- if (v1.isCompact() && v2.isCompact() && v1.scale == v2.scale) {
+ if (v1.isCompact()
+ && v2.isCompact()
+ && v1.scale == v2.scale
+ && DecimalData.isCompact(precision)) {
assert scale == v1.scale; // no need to rescale
try {
long ls = Math.addExact(v1.longVal, v2.longVal); // checks overflow
@@ -118,7 +121,10 @@ public final class DecimalDataUtils {
}
public static DecimalData subtract(DecimalData v1, DecimalData v2, int precision, int scale) {
- if (v1.isCompact() && v2.isCompact() && v1.scale == v2.scale) {
+ if (v1.isCompact()
+ && v2.isCompact()
+ && v1.scale == v2.scale
+ && DecimalData.isCompact(precision)) {
assert scale == v1.scale; // no need to rescale
try {
long ls = Math.subtractExact(v1.longVal, v2.longVal); // checks overflow
diff --git a/flink-table/flink-table-runtime/src/test/java/org/apache/flink/table/data/DecimalDataTest.java b/flink-table/flink-table-runtime/src/test/java/org/apache/flink/table/data/DecimalDataTest.java
index 1596630840f..4fbe9290e0d 100644
--- a/flink-table/flink-table-runtime/src/test/java/org/apache/flink/table/data/DecimalDataTest.java
+++ b/flink-table/flink-table-runtime/src/test/java/org/apache/flink/table/data/DecimalDataTest.java
@@ -167,6 +167,11 @@ public class DecimalDataTest {
assertThat(DecimalData.fromBigDecimal(new BigDecimal(Long.MAX_VALUE), 5, 0)).isNull();
assertThat(DecimalData.zero(20, 2).toBigDecimal().intValue()).isEqualTo(0);
assertThat(DecimalData.zero(20, 2).toBigDecimal().intValue()).isEqualTo(0);
+
+ DecimalData decimal3 = DecimalData.fromBigDecimal(new BigDecimal(10), 18, 0);
+ DecimalData decimal4 = DecimalData.fromBigDecimal(new BigDecimal(15), 18, 0);
+ assertThat(DecimalDataUtils.compare(subtract(decimal3, decimal4, 19, 0), -5)).isEqualTo(0);
+ assertThat(DecimalDataUtils.compare(add(decimal3, decimal4, 19, 0), 25)).isEqualTo(0);
}
@Test