Skip to content

Commit c9ea0a1

Browse files
committed
More data type aliases, return scale for number and datetime, and better binary string support
1 parent 2949c8a commit c9ea0a1

11 files changed

Lines changed: 240 additions & 58 deletions

File tree

clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseDataType.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ public enum ClickHouseDataType {
7474
IPv6(Inet6Address.class, false, true, false, 16, 39, 0, 0, 0, "INET6"),
7575
FixedString(String.class, true, true, false, 0, 0, 0, 0, 0, "BINARY"),
7676
String(String.class, false, true, false, 0, 0, 0, 0, 0, "BINARY LARGE OBJECT", "BINARY VARYING", "BLOB", "BYTEA",
77-
"CHAR", "CHAR LARGE OBJECT", "CHAR VARYING", "CHARACTER", "CHARACTER LARGE OBJECT", "CHARACTER VARYING",
78-
"CLOB", "LONGBLOB", "LONGTEXT", "MEDIUMBLOB", "MEDIUMTEXT", "NATIONAL CHAR", "NATIONAL CHAR VARYING",
79-
"NATIONAL CHARACTER", "NATIONAL CHARACTER LARGE OBJECT", "NATIONAL CHARACTER VARYING", "NCHAR",
80-
"NCHAR LARGE OBJECT", "NCHAR VARYING", "NVARCHAR", "TEXT", "TINYBLOB", "TINYTEXT", "VARCHAR", "VARCHAR2"),
77+
"CHAR", "CHARACTER", "CHARACTER LARGE OBJECT", "CHARACTER VARYING", "CHAR LARGE OBJECT", "CHAR VARYING",
78+
"CLOB", "LONGBLOB", "LONGTEXT", "MEDIUMBLOB", "MEDIUMTEXT", "NATIONAL CHAR", "NATIONAL CHARACTER",
79+
"NATIONAL CHARACTER LARGE OBJECT", "NATIONAL CHARACTER VARYING", "NATIONAL CHAR VARYING", "NCHAR",
80+
"NCHAR LARGE OBJECT", "NCHAR VARYING", "NVARCHAR", "TEXT", "TINYBLOB", "TINYTEXT", "VARBINARY", "VARCHAR",
81+
"VARCHAR2"),
8182
AggregateFunction(String.class, true, true, false, 0, 0, 0, 0, 0), // implementation-defined intermediate state
8283
SimpleAggregateFunction(String.class, true, true, false, 0, 0, 0, 0, 0),
8384
Array(Object.class, true, true, false, 0, 0, 0, 0, 0),

clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseValue.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,55 @@ default <T, E extends Enum<E>> T asObject(Class<T> clazz) {
538538
}
539539
}
540540

541+
/**
542+
* Gets binary value as byte array.
543+
*
544+
* @return non-null byte array
545+
*/
546+
default byte[] asBinary() {
547+
return asBinary(0, null);
548+
}
549+
550+
/**
551+
* Gets binary value as fixed length byte array.
552+
*
553+
* @param length byte length of value, 0 or negative number means no limit
554+
* @return non-null byte array
555+
*/
556+
default byte[] asBinary(int length) {
557+
return asBinary(length, null);
558+
}
559+
560+
/**
561+
* Gets binary value as byte array.
562+
*
563+
* @param charset charset, null is same as default(UTF-8)
564+
* @return non-null byte array
565+
*/
566+
default byte[] asBinary(Charset charset) {
567+
return asBinary(0, charset);
568+
}
569+
570+
/**
571+
* Gets binary value as byte array.
572+
*
573+
* @param length byte length of value, 0 or negative number means no limit
574+
* @param charset charset, null is same as default(UTF-8)
575+
* @return non-null byte array
576+
*/
577+
default byte[] asBinary(int length, Charset charset) {
578+
if (isNullOrEmpty()) {
579+
return ClickHouseValues.EMPTY_BYTE_ARRAY;
580+
}
581+
582+
byte[] bytes = asString().getBytes(charset == null ? StandardCharsets.UTF_8 : charset);
583+
if (length > 0) {
584+
ClickHouseChecker.notWithDifferentLength(bytes, length);
585+
}
586+
587+
return bytes;
588+
}
589+
541590
/**
542591
* Gets value as unbounded string, using default charset(usually UTF-8).
543592
*

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ public final class ClickHouseValues {
7676
public static final long[] EMPTY_LONG_ARRAY = new long[0];
7777
public static final float[] EMPTY_FLOAT_ARRAY = new float[0];
7878
public static final double[] EMPTY_DOUBLE_ARRAY = new double[0];
79+
7980
public static final String EMPTY_ARRAY_EXPR = "[]";
81+
public static final String EMPTY_STRING_EXPR = "''";
8082

8183
public static final BigDecimal NANOS = new BigDecimal(BigInteger.TEN.pow(9));
8284

clickhouse-client/src/main/java/com/clickhouse/client/data/ClickHouseRowBinaryProcessor.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -331,13 +331,15 @@ private void buildMappingsForDataTypes() {
331331

332332
// string and uuid
333333
buildMappings(deserializers, serializers,
334-
(r, f, c, i) -> ClickHouseStringValue.of(r, BinaryStreamUtils.readFixedString(i, c.getPrecision())),
335-
(v, f, c, o) -> BinaryStreamUtils.writeFixedString(o, v.asString(c.getPrecision()),
336-
c.getPrecision()),
337-
ClickHouseDataType.FixedString);
338-
buildMappings(deserializers, serializers,
339-
(r, f, c, i) -> ClickHouseStringValue.of(r, i.readUnicodeString()),
340-
(v, f, c, o) -> BinaryStreamUtils.writeString(o, v.asString()), ClickHouseDataType.String);
334+
(r, f, c, i) -> ClickHouseStringValue.of(r, i.readBytes(c.getPrecision())),
335+
(v, f, c, o) -> o.write(v.asBinary(c.getPrecision())), ClickHouseDataType.FixedString);
336+
buildMappings(deserializers, serializers,
337+
(r, f, c, i) -> ClickHouseStringValue.of(r, i.readBytes(i.readVarInt())),
338+
(v, f, c, o) -> {
339+
byte[] bytes = v.asBinary();
340+
BinaryStreamUtils.writeVarInt(o, bytes.length);
341+
o.write(bytes);
342+
}, ClickHouseDataType.String);
341343
buildMappings(deserializers, serializers,
342344
(r, f, c, i) -> ClickHouseUuidValue.of(r, BinaryStreamUtils.readUuid(i)),
343345
(v, f, c, o) -> BinaryStreamUtils.writeUuid(o, v.asUuid()), ClickHouseDataType.UUID);

0 commit comments

Comments
 (0)