in v2/spanner-common/src/main/java/com/google/cloud/teleport/v2/spanner/ddl/Column.java [341:446]
private static SizedType parseSpannerType(String spannerType, Dialect dialect) {
switch (dialect) {
case GOOGLE_STANDARD_SQL:
{
if (spannerType.equals(Type.Code.BOOL.getName())) {
return t(Type.bool(), null);
}
if (spannerType.equals(Type.Code.INT64.getName())) {
return t(Type.int64(), null);
}
if (spannerType.equals(Type.Code.FLOAT64.getName())) {
return t(Type.float64(), null);
}
if (spannerType.equals(Type.Code.FLOAT32.getName())) {
return t(Type.float32(), null);
}
if (spannerType.startsWith(Type.Code.STRING.getName())) {
String sizeStr = spannerType.substring(7, spannerType.length() - 1);
int size = sizeStr.equals("MAX") ? -1 : Integer.parseInt(sizeStr);
return t(Type.string(), size);
}
if (spannerType.startsWith(Type.Code.BYTES.getName())) {
String sizeStr = spannerType.substring(6, spannerType.length() - 1);
int size = sizeStr.equals("MAX") ? -1 : Integer.parseInt(sizeStr);
return t(Type.bytes(), size);
}
if (spannerType.equals(Type.Code.TIMESTAMP.getName())) {
return t(Type.timestamp(), null);
}
if (spannerType.equals(Type.Code.DATE.getName())) {
return t(Type.date(), null);
}
if (spannerType.equals(Type.Code.NUMERIC.getName())) {
return t(Type.numeric(), null);
}
if (spannerType.equals(Type.Code.JSON.getName())) {
return t(Type.json(), null);
}
if (spannerType.equals(Type.Code.TOKENLIST.getName())) {
return t(Type.tokenlist(), null);
}
if (spannerType.startsWith(Type.Code.ARRAY.getName())) {
// Substring "ARRAY<"xxx">"
String spannerArrayType = spannerType.substring(6, spannerType.length() - 1);
SizedType itemType = parseSpannerType(spannerArrayType, dialect);
return t(Type.array(itemType.type), itemType.size);
}
break;
}
case POSTGRESQL:
{
if (spannerType.endsWith("[]")) {
// Substring "xxx[]"
// Must check array type first
String spannerArrayType = spannerType.substring(0, spannerType.length() - 2);
SizedType itemType = parseSpannerType(spannerArrayType, dialect);
return t(Type.pgArray(itemType.type), itemType.size);
}
if (spannerType.equals(Type.Code.PG_BOOL.getName())) {
return t(Type.pgBool(), null);
}
if (spannerType.equals(Type.Code.PG_INT8.getName())) {
return t(Type.pgInt8(), null);
}
if (spannerType.equals(Type.Code.PG_FLOAT8.getName())) {
return t(Type.pgFloat8(), null);
}
if (spannerType.equals(Type.Code.PG_FLOAT4.getName())) {
return t(Type.pgFloat4(), null);
}
if (spannerType.equals(Type.Code.PG_TEXT.getName())) {
return t(Type.pgText(), -1);
}
if (spannerType.startsWith(Type.Code.PG_VARCHAR.getName())) {
int size = -1;
if (spannerType.length() > 18) {
String sizeStr = spannerType.substring(18, spannerType.length() - 1);
size = Integer.parseInt(sizeStr);
}
return t(Type.pgVarchar(), size);
}
if (spannerType.equals(Type.Code.PG_BYTEA.getName())) {
return t(Type.pgBytea(), -1);
}
if (spannerType.equals(Type.Code.PG_TIMESTAMPTZ.getName())) {
return t(Type.pgTimestamptz(), null);
}
if (spannerType.equals(Type.Code.PG_NUMERIC.getName())) {
return t(Type.pgNumeric(), null);
}
if (spannerType.equals(Type.Code.PG_JSONB.getName())) {
return t(Type.pgJsonb(), null);
}
if (spannerType.equals(Type.Code.PG_DATE.getName())) {
return t(Type.pgDate(), null);
}
if (spannerType.equals(Type.Code.PG_COMMIT_TIMESTAMP.getName())) {
return t(Type.pgCommitTimestamp(), null);
}
break;
}
default:
break;
}
throw new IllegalArgumentException("Unknown spanner type " + spannerType);
}