private static PreparedStatementValueObject parseAndCastToCassandraType()

in v2/spanner-to-sourcedb/src/main/java/com/google/cloud/teleport/v2/templates/dbutils/dml/CassandraTypeHandler.java [337:450]


  private static PreparedStatementValueObject<?> parseAndCastToCassandraType(
      String columnType, Object colValue) {
    if (colValue == null) {
      return null;
    }

    if (columnType.startsWith("frozen<")) {
      return parseAndCastToCassandraType(extractInnerType(columnType), colValue);
    }

    // Handle collection types
    if (columnType.startsWith("list<")) {
      return safeHandle(
          () -> {
            JSONArray parsedJSONArray =
                colValue instanceof JSONArray
                    ? (JSONArray) colValue
                    : new JSONArray((String) colValue);
            return PreparedStatementValueObject.create(
                columnType, parseCassandraList(columnType, parsedJSONArray));
          });
    } else if (columnType.startsWith("set<")) {
      return safeHandle(
          () -> {
            JSONArray parsedJSONArray =
                colValue instanceof JSONArray
                    ? (JSONArray) colValue
                    : new JSONArray((String) colValue);
            return PreparedStatementValueObject.create(
                columnType, parseCassandraSet(columnType, parsedJSONArray));
          });
    } else if (columnType.startsWith("map<")) {
      return safeHandle(
          () -> {
            JSONObject parsedJSON =
                colValue instanceof JSONObject
                    ? (JSONObject) colValue
                    : new JSONObject((String) colValue);
            return PreparedStatementValueObject.create(
                columnType, parseCassandraMap(columnType, parsedJSON));
          });
    }

    // Handle primitive and standard types
    switch (columnType) {
      case "ascii":
      case "text":
      case "varchar":
        return PreparedStatementValueObject.create(columnType, (String) colValue);

      case "bigint":
      case "int":
      case "smallint":
      case "tinyint":
        return safeHandle(
            () ->
                PreparedStatementValueObject.create(
                    columnType, parseNumericType(columnType, colValue.toString())));

      case "boolean":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> parseBoolean(colValue.toString())));

      case "decimal":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> parseDecimal(colValue.toString())));

      case "double":
      case "float":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> parseFloatingPoint(columnType, colValue.toString())));

      case "inet":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> handleCassandraInetAddressType(colValue.toString())));

      case "time":
        return PreparedStatementValueObject.create(
            columnType,
            safeHandle(
                () ->
                    handleCassandraTimestampType(colValue.toString())
                        .atZone(ZoneId.systemDefault())
                        .toLocalTime()));
      case "timestamp":
      case "datetime":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> handleCassandraTimestampType(colValue.toString())));

      case "date":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> parseDate(colValue.toString())));

      case "timeuuid":
      case "uuid":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> handleCassandraUuidType(colValue.toString())));

      case "varint":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> handleCassandraVarintType(colValue)));

      case "duration":
        return PreparedStatementValueObject.create(
            columnType, safeHandle(() -> handleCassandraDurationType(colValue.toString())));

      case "blob":
        return safeHandle(
            () -> PreparedStatementValueObject.create(columnType, parseBlobType(colValue)));

      default:
        return PreparedStatementValueObject.create(columnType, colValue);
    }
  }