Skip to content

Commit a1ef196

Browse files
authored
Merge pull request #1313 from zhicwu/main
converts empty string to default value
2 parents 347f611 + fd04656 commit a1ef196

22 files changed

+145
-24
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## 0.4.3
22
### Bug Fixes
3+
* unable to convert empty string to default value when using text-based data format.
34
* r2dbc driver does not support most client options. [#1299](https://github.com/ClickHouse/clickhouse-java/issues/1299)
45
* incorrect content from Lz4InputStream when using text-based data format [#48446](https://github.com/ClickHouse/ClickHouse/issues/48446)
56

clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseValues.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030

3131
import com.clickhouse.data.value.ClickHouseArrayValue;
3232
import com.clickhouse.data.value.ClickHouseByteValue;
33+
import com.clickhouse.data.value.ClickHouseIpv4Value;
34+
import com.clickhouse.data.value.ClickHouseIpv6Value;
3335

3436
/**
3537
* Help class for dealing with values.
@@ -55,7 +57,9 @@ public final class ClickHouseValues {
5557
public static final ClickHouseValue[] EMPTY_VALUES = new ClickHouseValue[0];
5658

5759
public static final String EMPTY_ARRAY_EXPR = "[]";
60+
public static final String EMPTY_MAP_EXPR = "{}";
5861
public static final String EMPTY_STRING_EXPR = "''";
62+
public static final String EMPTY_TUPLE_EXPR = "()";
5963

6064
public static final BigDecimal NANOS = new BigDecimal(BigInteger.TEN.pow(9));
6165

@@ -386,6 +390,8 @@ public static Inet4Address convertToIpv4(int value) {
386390
public static Inet4Address convertToIpv4(String value) {
387391
if (value == null) {
388392
return null;
393+
} else if (value.isEmpty()) {
394+
return ClickHouseIpv4Value.DEFAULT;
389395
}
390396

391397
try {
@@ -471,6 +477,8 @@ public static Inet6Address convertToIpv6(Inet4Address value) {
471477
public static Inet6Address convertToIpv6(String value) {
472478
if (value == null) {
473479
return null;
480+
} else if (value.isEmpty()) {
481+
return ClickHouseIpv6Value.DEFAULT;
474482
}
475483

476484
try {

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseArrayValue.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,14 @@ public ClickHouseArrayValue<T> update(Map<?, ?> value) {
485485
@Override
486486
@SuppressWarnings("unchecked")
487487
public ClickHouseArrayValue<T> update(String value) {
488-
set((T[]) new String[] { value });
488+
if (value == null) {
489+
resetToNullOrEmpty();
490+
} else if (value.isEmpty() || ClickHouseValues.EMPTY_ARRAY_EXPR.equals(value)) {
491+
resetToDefault();
492+
} else {
493+
// TODO parse string
494+
set((T[]) new String[] { value });
495+
}
489496
return this;
490497
}
491498

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseBigDecimalValue.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,8 @@ public ClickHouseBigDecimalValue update(LocalDateTime value) {
279279
public ClickHouseBigDecimalValue update(String value) {
280280
if (value == null) {
281281
resetToNullOrEmpty();
282+
} else if (value.isEmpty()) {
283+
resetToDefault();
282284
} else {
283285
set(new BigDecimal(value));
284286
}

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseBigIntegerValue.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,8 @@ public ClickHouseBigIntegerValue update(LocalDateTime value) {
254254
public ClickHouseBigIntegerValue update(String value) {
255255
if (value == null) {
256256
resetToNullOrEmpty();
257+
} else if (value.isEmpty()) {
258+
resetToDefault();
257259
} else {
258260
set(new BigInteger(value));
259261
}

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseBitmapValue.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@ public ClickHouseBitmapValue update(LocalDateTime value) {
320320
public ClickHouseBitmapValue update(String value) {
321321
if (value == null) {
322322
resetToNullOrEmpty();
323+
} else if (value.isEmpty()) {
324+
resetToDefault();
323325
} else {
324326
set(ClickHouseBitmap.wrap(Long.parseLong(value)));
325327
}

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseByteValue.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,14 @@ public ClickHouseByteValue update(BigDecimal value) {
8585

8686
@Override
8787
public ClickHouseByteValue update(String value) {
88-
return value == null ? resetToNullOrEmpty() : set(false, (byte) UnsignedByte.valueOf(value).byteValue());
88+
if (value == null) {
89+
resetToNullOrEmpty();
90+
} else if (value.isEmpty()) {
91+
resetToDefault();
92+
} else {
93+
set(false, UnsignedByte.valueOf(value).byteValue());
94+
}
95+
return this;
8996
}
9097
}
9198

@@ -375,7 +382,14 @@ public ClickHouseByteValue update(Enum<?> value) {
375382

376383
@Override
377384
public ClickHouseByteValue update(String value) {
378-
return value == null ? resetToNullOrEmpty() : set(false, Byte.parseByte(value));
385+
if (value == null) {
386+
resetToNullOrEmpty();
387+
} else if (value.isEmpty()) {
388+
resetToDefault();
389+
} else {
390+
set(false, Byte.parseByte(value));
391+
}
392+
return this;
379393
}
380394

381395
@Override

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseDateTimeValue.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,8 @@ public ClickHouseValue update(ZonedDateTime value) {
365365
public ClickHouseDateTimeValue update(String value) {
366366
if (value == null) {
367367
resetToNullOrEmpty();
368+
} else if (value.isEmpty()) {
369+
resetToDefault();
368370
} else {
369371
set(LocalDateTime.parse(value, ClickHouseValues.DATETIME_FORMATTER));
370372
}

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseDateValue.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,8 @@ public ClickHouseDateValue update(LocalDateTime value) {
254254
public ClickHouseDateValue update(String value) {
255255
if (value == null) {
256256
resetToNullOrEmpty();
257+
} else if (value.isEmpty()) {
258+
resetToDefault();
257259
} else {
258260
set(LocalDate.parse(value, ClickHouseValues.DATE_FORMATTER));
259261
}

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseDoubleValue.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,14 @@ public ClickHouseDoubleValue update(Enum<?> value) {
254254

255255
@Override
256256
public ClickHouseDoubleValue update(String value) {
257-
return value == null ? resetToNullOrEmpty() : set(false, Double.parseDouble(value));
257+
if (value == null) {
258+
resetToNullOrEmpty();
259+
} else if (value.isEmpty()) {
260+
resetToDefault();
261+
} else {
262+
set(false, Double.parseDouble(value));
263+
}
264+
return this;
258265
}
259266

260267
@Override

0 commit comments

Comments
 (0)