From 00a224498afe5aa7d5451a634d03ea265bc77979 Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 14 Aug 2022 00:25:07 +0400 Subject: [PATCH] Fix overflow error in ClickHouseLongValue.update method for BigDecimal and BigInteger parameters --- .../com/clickhouse/client/data/ClickHouseLongValue.java | 4 ++-- .../com/clickhouse/client/data/ClickHouseLongValueTest.java | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/clickhouse-client/src/main/java/com/clickhouse/client/data/ClickHouseLongValue.java b/clickhouse-client/src/main/java/com/clickhouse/client/data/ClickHouseLongValue.java index 755536235..3e4fd938a 100644 --- a/clickhouse-client/src/main/java/com/clickhouse/client/data/ClickHouseLongValue.java +++ b/clickhouse-client/src/main/java/com/clickhouse/client/data/ClickHouseLongValue.java @@ -246,12 +246,12 @@ public ClickHouseLongValue update(double value) { @Override public ClickHouseLongValue update(BigInteger value) { - return value == null ? resetToNullOrEmpty() : set(false, unsigned, value.longValueExact()); + return value == null ? resetToNullOrEmpty() : set(false, unsigned, value.longValue()); } @Override public ClickHouseLongValue update(BigDecimal value) { - return value == null ? resetToNullOrEmpty() : set(false, unsigned, value.longValueExact()); + return value == null ? resetToNullOrEmpty() : set(false, unsigned, value.longValue()); } @Override diff --git a/clickhouse-client/src/test/java/com/clickhouse/client/data/ClickHouseLongValueTest.java b/clickhouse-client/src/test/java/com/clickhouse/client/data/ClickHouseLongValueTest.java index 7be6e3f7e..442a88bf5 100644 --- a/clickhouse-client/src/test/java/com/clickhouse/client/data/ClickHouseLongValueTest.java +++ b/clickhouse-client/src/test/java/com/clickhouse/client/data/ClickHouseLongValueTest.java @@ -321,5 +321,11 @@ public void testUnsignedValue() throws Exception { Assert.assertEquals(v.asBigInteger(), new BigInteger("10223372036854775101")); Assert.assertEquals(v.asBigDecimal(), new BigDecimal("10223372036854775101")); Assert.assertEquals(v.asString(), "10223372036854775101"); + + v.update(new BigDecimal("10223372036854775101")); + Assert.assertEquals(v.asLong(), -8223372036854776515L); + Assert.assertEquals(v.asBigInteger(), new BigInteger("10223372036854775101")); + Assert.assertEquals(v.asBigDecimal(), new BigDecimal("10223372036854775101")); + Assert.assertEquals(v.asString(), "10223372036854775101"); } }