public static Object getData()

in odps-sdk/odps-sdk-core/src/main/java/com/aliyun/odps/table/record/accessor/ArrowToRecordConverter.java [147:219]


  public static Object getData(ArrowVectorAccessor dataAccessor, TypeInfo typeInfo, int rowId,
                               boolean isExtension)
      throws IOException {
    if (dataAccessor.isNullAt(rowId)) {
      return null;
    }
    switch (typeInfo.getOdpsType()) {
      case BOOLEAN:
        return ((ArrowBitAccessor) dataAccessor).getBoolean(rowId);
      case TINYINT:
        return ((ArrowTinyIntAccessor) dataAccessor).getByte(rowId);
      case SMALLINT:
        return ((ArrowSmallIntAccessor) dataAccessor).getShort(rowId);
      case INT:
        return ((ArrowIntAccessor) dataAccessor).getInt(rowId);
      case BIGINT:
        return ((ArrowBigIntAccessor) dataAccessor).getLong(rowId);
      case FLOAT:
        return ((ArrowFloat4Accessor) dataAccessor).getFloat(rowId);
      case DOUBLE:
        return ((ArrowFloat8Accessor) dataAccessor).getDouble(rowId);
      case DECIMAL:
        if (isExtension && (dataAccessor instanceof ArrowDecimalExtensionAccessor)) {
          return ((ArrowDecimalExtensionAccessor) dataAccessor).getDecimal(rowId);
        } else {
          return ((ArrowDecimalAccessor) dataAccessor).getDecimal(rowId);
        }
      case STRING:
        return ((ArrowVarCharAccessor) dataAccessor).getBytes(rowId);
      case VARCHAR:
        return new Varchar(new String(((ArrowVarCharAccessor) dataAccessor).getBytes(rowId),
                                      ConfigConstants.DEFAULT_CHARSET));
      case CHAR:
        return new Char(new String(((ArrowVarCharAccessor) dataAccessor).getBytes(rowId),
                                   ConfigConstants.DEFAULT_CHARSET));
      case BINARY:
        return new Binary(((ArrowVarBinaryAccessor) dataAccessor).getBinary(rowId));
      case DATE:
        return LocalDate.ofEpochDay(((ArrowDateDayAccessor) dataAccessor).getEpochDay(rowId));
      case DATETIME:
        return convertToTimeStamp(((ArrowTimestampAccessor) dataAccessor).getType(),
                                  ((ArrowTimestampAccessor) dataAccessor).getEpochTime(
                                      rowId)).atZone(ZoneId.systemDefault());
      case TIMESTAMP:
        if (!isExtension) {
          return convertToTimeStamp(((ArrowTimestampAccessor) dataAccessor).getType(),
                                    ((ArrowTimestampAccessor) dataAccessor).getEpochTime(rowId));
        } else {
          return ((ArrowTimestampExtensionAccessor) dataAccessor).getTimestamp(rowId);
        }
      case TIMESTAMP_NTZ:
        if (!isExtension) {
          return convertToTimeStampNtz(((ArrowTimestampAccessor) dataAccessor).getType(),
                                       ((ArrowTimestampAccessor) dataAccessor).getEpochTime(rowId));
        } else {
          return ((ArrowTimestampExtensionAccessor) dataAccessor).getTimestampNtz(rowId);
        }
      case JSON:
        return new SimpleJsonValue(
            new String(((ArrowVarCharAccessor) dataAccessor).getBytes(rowId)));
      case ARRAY:
        return (((ArrowArrayAccessorImpl.ArrowArrayAccessorForRecord) dataAccessor)).getArray(
            rowId);
      case MAP:
        return (((ArrowMapAccessorImpl.ArrowMapAccessorForRecord) dataAccessor)).getMap(rowId);
      case STRUCT:
        return (((ArrowStructAccessorImpl.ArrowStructAccessorForRecord) dataAccessor)).getStruct(
            rowId);
      default:
        throw new UnsupportedOperationException(
            "Datatype not supported: " + typeInfo.getTypeName());
    }
  }