in core/src/main/java/org/apache/calcite/avatica/util/ArrayImpl.java [97:163]
protected Object getArray(List<?> list, AbstractCursor.ArrayAccessor arrayAccessor)
throws SQLException {
int i = 0;
switch (arrayAccessor.componentType.rep) {
case PRIMITIVE_DOUBLE:
final double[] doubles = new double[list.size()];
for (double v : (List<Double>) list) {
doubles[i++] = v;
}
return doubles;
case PRIMITIVE_FLOAT:
final float[] floats = new float[list.size()];
for (float v : (List<Float>) list) {
floats[i++] = v;
}
return floats;
case PRIMITIVE_INT:
final int[] ints = new int[list.size()];
for (int v : (List<Integer>) list) {
ints[i++] = v;
}
return ints;
case PRIMITIVE_LONG:
final long[] longs = new long[list.size()];
for (long v : (List<Long>) list) {
longs[i++] = v;
}
return longs;
case PRIMITIVE_SHORT:
final short[] shorts = new short[list.size()];
for (short v : (List<Short>) list) {
shorts[i++] = v;
}
return shorts;
case PRIMITIVE_BOOLEAN:
final boolean[] booleans = new boolean[list.size()];
for (boolean v : (List<Boolean>) list) {
booleans[i++] = v;
}
return booleans;
case PRIMITIVE_BYTE:
final byte[] bytes = new byte[list.size()];
for (byte v : (List<Byte>) list) {
bytes[i++] = v;
}
return bytes;
case PRIMITIVE_CHAR:
final char[] chars = new char[list.size()];
for (char v : (List<Character>) list) {
chars[i++] = v;
}
return chars;
default:
// fall through
}
final Object[] objects = list.toArray();
switch (arrayAccessor.componentType.id) {
case Types.ARRAY:
final AbstractCursor.ArrayAccessor componentAccessor =
(AbstractCursor.ArrayAccessor) arrayAccessor.componentAccessor;
for (i = 0; i < objects.length; i++) {
// Convert the element into a Object[] or primitive array, recurse!
objects[i] = getArrayData(objects[i], componentAccessor);
}
}
return objects;
}