public Value getValue()

in src/main/java/com/google/cloud/spanner/pgadapter/utils/BinaryCopyParser.java [262:324]


    public Value getValue(Type type, int columnIndex) {
      Preconditions.checkArgument(
          columnIndex >= 0 && columnIndex < numColumns(),
          "columnIndex must be >= 0 && < numColumns");
      BinaryField field = fields[columnIndex];
      switch (type.getCode()) {
        case BOOL:
          return Value.bool(field.data == null ? null : BooleanParser.toBoolean(field.data));
        case INT64:
          return Value.int64(field.data == null ? null : LongParser.toLong(field.data));
        case PG_NUMERIC:
          return Value.pgNumeric(
              field.data == null ? null : NumericParser.toNumericString(field.data));
        case FLOAT32:
          return Value.float32(field.data == null ? null : FloatParser.toFloat(field.data));
        case FLOAT64:
          return Value.float64(field.data == null ? null : DoubleParser.toDouble(field.data));
        case STRING:
          return Value.string(field.data == null ? null : StringParser.toString(field.data));
        case PG_JSONB:
          return Value.pgJsonb(field.data == null ? null : JsonbParser.toString(field.data));
        case BYTES:
          return Value.bytes(field.data == null ? null : BinaryParser.toByteArray(field.data));
        case TIMESTAMP:
          return Value.timestamp(
              field.data == null ? null : TimestampParser.toTimestamp(field.data));
        case INTERVAL:
          return Value.interval(field.data == null ? null : IntervalParser.toInterval(field.data));
        case DATE:
          return Value.date(field.data == null ? null : DateParser.toDate(field.data));
        case ARRAY:
          switch (type.getArrayElementType().getCode()) {
            case STRING:
              return Value.stringArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case PG_JSONB:
              return Value.pgJsonbArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case BOOL:
              return Value.boolArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case INT64:
              return Value.int64Array(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case FLOAT32:
              return Value.float32Array(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case FLOAT64:
              return Value.float64Array(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case PG_NUMERIC:
              return Value.pgNumericArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case BYTES:
              return Value.bytesArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case DATE:
              return Value.dateArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case TIMESTAMP:
              return Value.timestampArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
            case INTERVAL:
              return Value.intervalArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
          }
        case STRUCT:
        case NUMERIC:
        default:
          String message = "Unsupported type for COPY: " + type;
          logger.log(Level.WARNING, message);
          throw SpannerExceptionFactory.newSpannerException(ErrorCode.INVALID_ARGUMENT, message);
      }
    }