in src/main/java/com/google/cloud/spanner/pgadapter/parsers/Parser.java [66:131]
public static Parser<?> create(
SessionState sessionState, byte[] item, int oidType, FormatCode formatCode) {
switch (oidType) {
case Oid.BOOL:
case Oid.BIT:
return new BooleanParser(item, formatCode);
case Oid.BYTEA:
case Oid.BIT_ARRAY:
return new BinaryParser(item, formatCode);
case Oid.DATE:
return new DateParser(item, formatCode);
case Oid.FLOAT4:
return new FloatParser(item, formatCode);
case Oid.FLOAT8:
return new DoubleParser(item, formatCode);
case Oid.INT2:
return new ShortParser(item, formatCode);
case Oid.INT4:
return new IntegerParser(item, formatCode);
case Oid.INT8:
case Oid.OID:
return new LongParser(item, formatCode);
case Oid.NUMERIC:
return new NumericParser(item, formatCode);
case Oid.TEXT:
case Oid.VARCHAR:
return new StringParser(item, formatCode);
case Oid.UUID:
return new UuidParser(item, formatCode);
case Oid.TIMESTAMP:
case Oid.TIMESTAMPTZ:
return new TimestampParser(item, formatCode, sessionState);
case Oid.INTERVAL:
return new IntervalParser(item, formatCode);
case Oid.JSONB:
return new JsonbParser(item, formatCode);
case Oid.BOOL_ARRAY:
case Oid.BYTEA_ARRAY:
case Oid.DATE_ARRAY:
case Oid.FLOAT4_ARRAY:
case Oid.FLOAT8_ARRAY:
case Oid.INT2_ARRAY:
case Oid.INT4_ARRAY:
case Oid.INT8_ARRAY:
case Oid.OID_ARRAY:
case Oid.NUMERIC_ARRAY:
case Oid.TEXT_ARRAY:
case Oid.VARCHAR_ARRAY:
case Oid.UUID_ARRAY:
case Oid.TIMESTAMP_ARRAY:
case Oid.TIMESTAMPTZ_ARRAY:
case Oid.INTERVAL_ARRAY:
case Oid.JSONB_ARRAY:
int elementOid = getArrayElementOid(oidType);
return new ArrayParser(item, formatCode, sessionState, toType(elementOid), elementOid);
case Oid.UNSPECIFIED:
default:
// Use the UnspecifiedParser for unknown types. This will encode the parameter value as a
// string and send it to Spanner without any type information. This will ensure that clients
// that for example send char instead of varchar as the type code for a parameter would
// still work.
return new UnspecifiedParser(item, formatCode);
}
}