From 3ccfeb031387616dab3c0d34ffdaad87671a49d6 Mon Sep 17 00:00:00 2001 From: Paultagoras Date: Fri, 14 Feb 2025 15:54:54 -0500 Subject: [PATCH] Send null when nullable --- .../data_formats/internal/SerializerUtils.java | 6 ++++++ .../com/clickhouse/client/insert/SamplePOJO.java | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/SerializerUtils.java b/client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/SerializerUtils.java index 6a61130ed..afbe9919a 100644 --- a/client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/SerializerUtils.java +++ b/client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/SerializerUtils.java @@ -462,6 +462,12 @@ private static void serializeMapData(OutputStream stream, Object value, ClickHou } private static void serializePrimitiveData(OutputStream stream, Object value, ClickHouseColumn column) throws IOException { + //Handle null values + if (value == null && column.isNullable()) {//Only nullable columns can have null values + BinaryStreamUtils.writeNull(stream); + return; + } + //Serialize the value to the stream based on the type switch (column.getDataType()) { case Int8: diff --git a/client-v2/src/test/java/com/clickhouse/client/insert/SamplePOJO.java b/client-v2/src/test/java/com/clickhouse/client/insert/SamplePOJO.java index e9ca4d848..71914c25f 100644 --- a/client-v2/src/test/java/com/clickhouse/client/insert/SamplePOJO.java +++ b/client-v2/src/test/java/com/clickhouse/client/insert/SamplePOJO.java @@ -22,6 +22,7 @@ public class SamplePOJO { private byte byteValue; private Byte boxedByte; private int int8; + private Integer int8_null; private int int8_default; private int int16; private Short boxedShort; @@ -100,6 +101,7 @@ public SamplePOJO() { byteValue = (byte) random.nextInt(); boxedByte = (byte) random.nextInt(); int8 = random.nextInt(128); + int8_null = null; int16 = random.nextInt(32768); boxedShort = (short) random.nextInt(); int32 = random.nextInt(); @@ -175,7 +177,7 @@ public SamplePOJO() { } array = Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"); - tuple = Arrays.asList(uint64, int32, string); + tuple = Arrays.asList(uint64, int32, string, null); map = new HashMap<>(); for (int i = 0; i < 10; i++) { map.put(String.valueOf((char) ('a' + i)), i + 1); @@ -278,6 +280,14 @@ public void setInt8(int int8) { this.int8 = int8; } + public Integer getInt8_null() { + return int8_null; + } + + public void setInt8_null(Integer int8_null) { + this.int8_null = int8_null; + } + public int getInt8Default() { return int8_default; } @@ -721,6 +731,7 @@ public static String generateTableCreateSQL(String tableName) { return "CREATE TABLE " + tableName + " (" + "byteValue Int8," + "int8 Int8, " + + "int8_null Nullable(Int8), " + "boxedByte Int8, " + "int8_default Int8 DEFAULT 0, " + "int16 Int16, " + @@ -770,7 +781,7 @@ public static String generateTableCreateSQL(String tableName) { "ipv4 IPv4, " + "ipv6 IPv6, " + "array Array(String), " + - "tuple Tuple(UInt64, Int32, String), " + + "tuple Tuple(UInt64, Int32, String, Nullable(Int16)), " + "map Map(String, Int32), " + "nested Nested (innerInt Int32, innerString String, " + "innerNullableInt Nullable(Int32)), " +