in src/main/java/com/google/cloud/spanner/pgadapter/parsers/ArrayParser.java [350:419]
public void bind(ImmutableMap.Builder<String, Value> parametersBuilder, String name) {
switch (elementOid) {
case Oid.BIT:
case Oid.BOOL:
parametersBuilder.put(name, Value.boolArray((List<Boolean>) this.item));
break;
case Oid.INT2:
if (this.item == null) {
parametersBuilder.put(name, Value.int64Array((long[]) null));
} else {
parametersBuilder.put(
name,
Value.int64Array(
((List<Short>) this.item)
.stream()
.map(s -> s == null ? null : s.longValue())
.collect(Collectors.toList())));
}
break;
case Oid.INT4:
if (this.item == null) {
parametersBuilder.put(name, Value.int64Array((long[]) null));
} else {
parametersBuilder.put(
name,
Value.int64Array(
((List<Integer>) this.item)
.stream()
.map(i -> i == null ? null : i.longValue())
.collect(Collectors.toList())));
}
break;
case Oid.INT8:
parametersBuilder.put(name, Value.int64Array((List<Long>) this.item));
break;
case Oid.OID:
parametersBuilder.put(name, Value.pgOidArray((List<Long>) this.item));
break;
case Oid.NUMERIC:
parametersBuilder.put(name, Value.pgNumericArray((List<String>) this.item));
break;
case Oid.FLOAT4:
parametersBuilder.put(name, Value.float32Array((List<Float>) this.item));
break;
case Oid.FLOAT8:
parametersBuilder.put(name, Value.float64Array((List<Double>) this.item));
break;
case Oid.UUID:
case Oid.VARCHAR:
case Oid.TEXT:
parametersBuilder.put(name, Value.stringArray((List<String>) this.item));
break;
case Oid.JSONB:
parametersBuilder.put(name, Value.pgJsonbArray((List<String>) this.item));
break;
case Oid.BYTEA:
parametersBuilder.put(name, Value.bytesArray((List<ByteArray>) this.item));
break;
case Oid.TIMESTAMPTZ:
case Oid.TIMESTAMP:
parametersBuilder.put(name, Value.timestampArray((List<Timestamp>) this.item));
break;
case Oid.DATE:
parametersBuilder.put(name, Value.dateArray((List<Date>) this.item));
break;
default:
throw PGExceptionFactory.newPGException(
"Unsupported array element type: " + arrayElementType, SQLState.InvalidParameterValue);
}
}