Skip to content

Commit 1e525e7

Browse files
authored
Added getShortArray & getStringArray implementation (#2604)
* Added getShortArray & getStringArray implementation * Change read String Array implementation.
1 parent 6a4127c commit 1e525e7

File tree

6 files changed

+153
-0
lines changed

6 files changed

+153
-0
lines changed

client-v2/src/main/java/com/clickhouse/client/api/data_formats/ClickHouseBinaryFormatReader.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,20 @@ public interface ClickHouseBinaryFormatReader extends AutoCloseable {
293293
*/
294294
boolean[] getBooleanArray(String colName);
295295

296+
/**
297+
*
298+
* @param colName
299+
* @return
300+
*/
301+
short[] getShortArray(String colName);
302+
303+
/**
304+
*
305+
* @param colName
306+
* @return
307+
*/
308+
String[] getStringArray(String colName);
309+
296310
/**
297311
* Reads column with name `colName` as a string.
298312
*
@@ -517,6 +531,10 @@ public interface ClickHouseBinaryFormatReader extends AutoCloseable {
517531

518532
boolean[] getBooleanArray(int index);
519533

534+
short [] getShortArray(int index);
535+
536+
String[] getStringArray(int index);
537+
520538
Object[] getTuple(int index);
521539

522540
Object[] getTuple(String colName);

client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/AbstractBinaryFormatReader.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,32 @@ public boolean[] getBooleanArray(String colName) {
588588
}
589589
}
590590

591+
@Override
592+
public short[] getShortArray(String colName) {
593+
try {
594+
return getPrimitiveArray(colName, short.class);
595+
} catch (ClassCastException | IllegalArgumentException e) {
596+
throw new ClientException("Value cannot be converted to an array of primitives", e);
597+
}
598+
}
599+
600+
@Override
601+
public String[] getStringArray(String colName) {
602+
Object value = readValue(colName);
603+
if (value instanceof BinaryStreamReader.ArrayValue) {
604+
BinaryStreamReader.ArrayValue array = (BinaryStreamReader.ArrayValue) value;
605+
int length = array.length;
606+
if (!array.itemType.equals(String.class))
607+
throw new ClientException("Not A String type.");
608+
String [] values = new String[length];
609+
for (int i = 0; i < length; i++) {
610+
values[i] = (String)((BinaryStreamReader.ArrayValue) value).get(i);
611+
}
612+
return values;
613+
}
614+
throw new ClientException("Not ArrayValue type.");
615+
}
616+
591617
@Override
592618
public boolean hasValue(int colIndex) {
593619
return currentRecord[colIndex - 1] != null;
@@ -733,6 +759,16 @@ public boolean[] getBooleanArray(int index) {
733759
return getBooleanArray(schema.columnIndexToName(index));
734760
}
735761

762+
@Override
763+
public short[] getShortArray(int index) {
764+
return getShortArray(schema.columnIndexToName(index));
765+
}
766+
767+
@Override
768+
public String[] getStringArray(int index) {
769+
return getStringArray(schema.columnIndexToName(index));
770+
}
771+
736772
@Override
737773
public Object[] getTuple(int index) {
738774
return readValue(index);

client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/BinaryReaderBackedRecord.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,16 @@ public boolean[] getBooleanArray(String colName) {
165165
return reader.getBooleanArray(colName);
166166
}
167167

168+
@Override
169+
public short[] getShortArray(String colName) {
170+
return reader.getShortArray(colName);
171+
}
172+
173+
@Override
174+
public String[] getStringArray(String colName) {
175+
return reader.getStringArray(colName);
176+
}
177+
168178
@Override
169179
public String getString(int index) {
170180
return reader.getString(index);
@@ -315,6 +325,16 @@ public boolean[] getBooleanArray(int index) {
315325
return reader.getBooleanArray(index);
316326
}
317327

328+
@Override
329+
public short[] getShortArray(int index) {
330+
return reader.getShortArray(index);
331+
}
332+
333+
@Override
334+
public String[] getStringArray(int index) {
335+
return reader.getStringArray(index);
336+
}
337+
318338
@Override
319339
public Object[] getTuple(int index) {
320340
return reader.getTuple(index);

client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/MapBackedRecord.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,16 @@ public boolean[] getBooleanArray(String colName) {
266266
return getPrimitiveArray(colName);
267267
}
268268

269+
@Override
270+
public short[] getShortArray(String colName) {
271+
return getPrimitiveArray(colName);
272+
}
273+
274+
@Override
275+
public String[] getStringArray(String colName) {
276+
return getPrimitiveArray(colName);
277+
}
278+
269279
@Override
270280
public boolean hasValue(int colIndex) {
271281
return hasValue(schema.columnIndexToName(colIndex));
@@ -411,6 +421,16 @@ public boolean[] getBooleanArray(int index) {
411421
return getPrimitiveArray(schema.columnIndexToName(index));
412422
}
413423

424+
@Override
425+
public short[] getShortArray(int index) {
426+
return getPrimitiveArray(schema.columnIndexToName(index));
427+
}
428+
429+
@Override
430+
public String[] getStringArray(int index) {
431+
return getPrimitiveArray(schema.columnIndexToName(index));
432+
}
433+
414434
@Override
415435
public Object[] getTuple(int index) {
416436
return readValue(index);

client-v2/src/main/java/com/clickhouse/client/api/query/GenericRecord.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ public interface GenericRecord {
246246

247247
boolean[] getBooleanArray(String colName);
248248

249+
short[] getShortArray(String colName);
250+
251+
String[] getStringArray(String colName);
252+
249253
/**
250254
* Reads column with name `colName` as a string.
251255
*
@@ -482,6 +486,10 @@ public interface GenericRecord {
482486

483487
boolean[] getBooleanArray(int index);
484488

489+
short[] getShortArray(int index);
490+
491+
String[] getStringArray(int index);
492+
485493
Object[] getTuple(int index);
486494

487495
Object[] getTuple(String colName);

client-v2/src/test/java/com/clickhouse/client/api/data_formats/ClickHouseBinaryFormatReaderTest.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,55 @@ public void testReadingAsBoolean() throws Exception {
195195
Assert.assertEquals(reader.getString("a"), "true");
196196
Assert.assertEquals(reader.getString("b"), "false");
197197
}
198+
199+
@Test
200+
public void testReadingArrays() throws Exception {
201+
ByteArrayOutputStream out = new ByteArrayOutputStream();
202+
String[] names = new String[]{ "a1", "a2", "a3", "a4", "a5"};
203+
String[] types = new String[]{"Array(Int8)", "Array(String)", "Array(Int16)", "Array(Int32)", "Array(Int64)"};
204+
205+
BinaryStreamUtils.writeVarInt(out, names.length);
206+
for (String name : names) {
207+
BinaryStreamUtils.writeString(out, name);
208+
}
209+
for (String type : types) {
210+
BinaryStreamUtils.writeString(out, type);
211+
}
212+
213+
// write data
214+
BinaryStreamUtils.writeVarInt(out, 2);
215+
BinaryStreamUtils.writeInt8(out, (byte) 1);
216+
BinaryStreamUtils.writeInt8(out, (byte) 2);
217+
218+
BinaryStreamUtils.writeVarInt(out, 2);
219+
BinaryStreamUtils.writeString(out, "a");
220+
BinaryStreamUtils.writeString(out, "b");
221+
222+
BinaryStreamUtils.writeVarInt(out, 2);
223+
BinaryStreamUtils.writeInt16(out, (short) 1);
224+
BinaryStreamUtils.writeInt16(out, (short) 2);
225+
226+
BinaryStreamUtils.writeVarInt(out, 2);
227+
BinaryStreamUtils.writeInt32(out, (int) 1);
228+
BinaryStreamUtils.writeInt32(out, (int) 2);
229+
230+
BinaryStreamUtils.writeVarInt(out, 2);
231+
BinaryStreamUtils.writeInt64(out, (long) 1);
232+
BinaryStreamUtils.writeInt64(out, (long) 2);
233+
234+
235+
InputStream in = new ByteArrayInputStream(out.toByteArray());
236+
QuerySettings querySettings = new QuerySettings().setUseTimeZone(TimeZone.getTimeZone("UTC").toZoneId().getId());
237+
RowBinaryWithNamesAndTypesFormatReader reader =
238+
new RowBinaryWithNamesAndTypesFormatReader(in, querySettings, new BinaryStreamReader.CachingByteBufferAllocator());
239+
240+
reader.next();
241+
242+
Assert.assertEquals(reader.getByteArray("a1"), new byte[] {(byte) 1, (byte) 2});
243+
Assert.assertEquals(reader.getStringArray("a2"), new String[] {"a", "b"});
244+
Assert.assertEquals(reader.getShortArray("a3"), new short[] {(short) 1, (short) 2});
245+
Assert.assertEquals(reader.getIntArray("a4"), new int[] {1, 2});
246+
Assert.assertEquals(reader.getLongArray("a5"), new long[] {1L, 2L});
247+
248+
}
198249
}

0 commit comments

Comments
 (0)