private static SizedType parseSpannerType()

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);
  }