private static Object getColumnValueFromResultSet()

in v2/googlecloud-to-googlecloud/src/main/java/com/google/cloud/teleport/v2/templates/spannerchangestreamstobigquery/schemautils/SpannerToBigQueryUtils.java [169:242]


  private static Object getColumnValueFromResultSet(
      TrackedSpannerColumn spannerColumn, ResultSet resultSet) {
    String columnName = spannerColumn.getName();
    Type columnType = spannerColumn.getType();

    if (resultSet.isNull(columnName)) {
      return null;
    }

    // All the NULL columns in the array are filtered out since BigQuery doesn't allow NULL in the
    // array.
    if (columnType.equals(Type.array(Type.bool()))) {
      return removeNulls(resultSet.getBooleanList(columnName));
    } else if (columnType.equals(Type.array(Type.bytes()))) {
      return removeNulls(resultSet.getBytesList(columnName)).stream()
          .map(e -> e.toBase64())
          .collect(Collectors.toList());
    } else if (columnType.equals(Type.array(Type.date()))) {
      return removeNulls(resultSet.getDateList(columnName)).stream()
          .map(e -> e.toString())
          .collect(Collectors.toList());
    } else if (columnType.equals(Type.array(Type.float32()))) {
      return removeNulls(resultSet.getFloatList(columnName));
    } else if (columnType.equals(Type.array(Type.float64()))) {
      return removeNulls(resultSet.getDoubleList(columnName));
    } else if (columnType.equals(Type.array(Type.int64()))) {
      return removeNulls(resultSet.getLongList(columnName));
    } else if (columnType.equals(Type.array(Type.json()))) {
      return removeNulls(resultSet.getJsonList(columnName));
    } else if (columnType.equals(Type.array(Type.numeric()))) {
      return removeNulls(resultSet.getBigDecimalList(columnName));
    } else if (columnType.equals(Type.array(Type.pgNumeric()))) {
      return removeNulls(resultSet.getStringList(columnName));
    } else if (columnType.equals(Type.array(Type.pgJsonb()))) {
      return removeNulls(resultSet.getPgJsonbList(columnName));
    } else if (columnType.equals(Type.array(Type.string()))) {
      return removeNulls(resultSet.getStringList(columnName));
    } else if (columnType.equals(Type.array(Type.timestamp()))) {
      return removeNulls(resultSet.getTimestampList(columnName)).stream()
          .map(e -> e.toString())
          .collect(Collectors.toList());
    } else {
      Type.Code columnTypeCode = columnType.getCode();
      switch (columnTypeCode) {
        case BOOL:
          return resultSet.getBoolean(columnName);
        case BYTES:
          return resultSet.getBytes(columnName).toBase64();
        case DATE:
          return resultSet.getDate(columnName).toString();
        case FLOAT32:
          return resultSet.getFloat(columnName);
        case FLOAT64:
          return resultSet.getDouble(columnName);
        case INT64:
          return resultSet.getLong(columnName);
        case JSON:
          return resultSet.getJson(columnName);
        case NUMERIC:
          return resultSet.getBigDecimal(columnName);
        case PG_NUMERIC:
          return resultSet.getString(columnName);
        case PG_JSONB:
          return resultSet.getPgJsonb(columnName);
        case STRING:
          return resultSet.getString(columnName);
        case TIMESTAMP:
          return resultSet.getTimestamp(columnName).toString();
        default:
          throw new IllegalArgumentException(
              String.format("Unsupported Spanner type: %s", columnTypeCode));
      }
    }
  }