presto-connector/src/main/java/com/facebook/presto/maxcompute/utils/ArrowUtils.java [70:157]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public class ArrowUtils
{
    private static final long MICROS_PER_MILLI = 1_000L;
    private static final long NANOS_PER_MILLI = 1_000_000L;
    private static RootAllocator rootAllocator = new RootAllocator(Long.MAX_VALUE);

    private ArrowUtils() {}

    public static RootAllocator getRootAllocator()
    {
        if (rootAllocator == null) {
            rootAllocator = new RootAllocator(Long.MAX_VALUE);
        }
        return rootAllocator;
    }

    public static ArrowVectorAccessor createColumnVectorAccessor(ValueVector vector, TypeInfo typeInfo)
    {
        switch (typeInfo.getOdpsType()) {
            case BOOLEAN:
                return new ArrowBitAccessor((BitVector) vector);
            case TINYINT:
                return new ArrowTinyIntAccessor((TinyIntVector) vector);
            case SMALLINT:
                return new ArrowSmallIntAccessor((SmallIntVector) vector);
            case INT:
                return new ArrowIntAccessor((IntVector) vector);
            case BIGINT:
                return new ArrowBigIntAccessor((BigIntVector) vector);
            case FLOAT:
                return new ArrowFloat4Accessor((Float4Vector) vector);
            case DOUBLE:
                return new ArrowFloat8Accessor((Float8Vector) vector);
            case DECIMAL:
                return new ArrowDecimalAccessor((DecimalVector) vector);
            case STRING:
            case VARCHAR:
            case CHAR:
            case JSON:
                return new ArrowVarCharAccessor((VarCharVector) vector);
            case BINARY:
                return new ArrowVarBinaryAccessor((VarBinaryVector) vector);
            case DATE:
                return new ArrowDateDayAccessor((DateDayVector) vector);
            case DATETIME:
            case TIMESTAMP:
            case TIMESTAMP_NTZ:
                return new ArrowTimestampAccessor((TimeStampVector) vector);
            case ARRAY:
                return new ArrowArrayAccessorForBlock((ListVector) vector, typeInfo);
            case MAP:
                return new ArrowMapAccessorForRecord((MapVector) vector, typeInfo);
            case STRUCT:
                return new ArrowStructAccessorForRecord((StructVector) vector, typeInfo);
            default:
                throw new UnsupportedOperationException(
                        "Datatype not supported: " + typeInfo.getTypeName());
        }
    }

    public static Object getData(ArrowVectorAccessor dataAccessor, TypeInfo typeInfo, int rowId)
    {
        if (dataAccessor.isNullAt(rowId)) {
            return null;
        }
        switch (typeInfo.getOdpsType()) {
            case BOOLEAN:
                return ((ArrowBitAccessor) dataAccessor).getBoolean(rowId);
            case TINYINT:
                return ((Number) ((ArrowTinyIntAccessor) dataAccessor).getByte(rowId)).longValue();
            case SMALLINT:
                return ((Number) ((ArrowSmallIntAccessor) dataAccessor).getShort(rowId)).longValue();
            case INT:
                return ((Number) ((ArrowIntAccessor) dataAccessor).getInt(rowId)).longValue();
            case BIGINT:
                return ((ArrowBigIntAccessor) dataAccessor).getLong(rowId);
            case FLOAT:
                // return int bits
                return ((Number) Float.floatToIntBits(((ArrowFloat4Accessor) dataAccessor).getFloat(rowId))).longValue();
            case DOUBLE:
                return ((ArrowFloat8Accessor) dataAccessor).getDouble(rowId);
            case DECIMAL:
                BigDecimal decimal = ((ArrowDecimalAccessor) dataAccessor).getDecimal(rowId);
                if (((DecimalTypeInfo) typeInfo).getPrecision() <= MAX_SHORT_PRECISION) {
                    // short decimal (long)
                    return decimal.unscaledValue().longValue();
                }
                else {
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



trino-connector/src/main/java/io/trino/plugin/maxcompute/utils/ArrowUtils.java [70:157]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public class ArrowUtils
{
    private static final long MICROS_PER_MILLI = 1_000L;
    private static final long NANOS_PER_MILLI = 1_000_000L;
    private static RootAllocator rootAllocator = new RootAllocator(Long.MAX_VALUE);

    private ArrowUtils() {}

    public static RootAllocator getRootAllocator()
    {
        if (rootAllocator == null) {
            rootAllocator = new RootAllocator(Long.MAX_VALUE);
        }
        return rootAllocator;
    }

    public static ArrowVectorAccessor createColumnVectorAccessor(ValueVector vector, TypeInfo typeInfo)
    {
        switch (typeInfo.getOdpsType()) {
            case BOOLEAN:
                return new ArrowBitAccessor((BitVector) vector);
            case TINYINT:
                return new ArrowTinyIntAccessor((TinyIntVector) vector);
            case SMALLINT:
                return new ArrowSmallIntAccessor((SmallIntVector) vector);
            case INT:
                return new ArrowIntAccessor((IntVector) vector);
            case BIGINT:
                return new ArrowBigIntAccessor((BigIntVector) vector);
            case FLOAT:
                return new ArrowFloat4Accessor((Float4Vector) vector);
            case DOUBLE:
                return new ArrowFloat8Accessor((Float8Vector) vector);
            case DECIMAL:
                return new ArrowDecimalAccessor((DecimalVector) vector);
            case STRING:
            case VARCHAR:
            case CHAR:
            case JSON:
                return new ArrowVarCharAccessor((VarCharVector) vector);
            case BINARY:
                return new ArrowVarBinaryAccessor((VarBinaryVector) vector);
            case DATE:
                return new ArrowDateDayAccessor((DateDayVector) vector);
            case DATETIME:
            case TIMESTAMP:
            case TIMESTAMP_NTZ:
                return new ArrowTimestampAccessor((TimeStampVector) vector);
            case ARRAY:
                return new ArrowArrayAccessorForBlock((ListVector) vector, typeInfo);
            case MAP:
                return new ArrowMapAccessorForRecord((MapVector) vector, typeInfo);
            case STRUCT:
                return new ArrowStructAccessorForRecord((StructVector) vector, typeInfo);
            default:
                throw new UnsupportedOperationException(
                        "Datatype not supported: " + typeInfo.getTypeName());
        }
    }

    public static Object getData(ArrowVectorAccessor dataAccessor, TypeInfo typeInfo, int rowId)
    {
        if (dataAccessor.isNullAt(rowId)) {
            return null;
        }
        switch (typeInfo.getOdpsType()) {
            case BOOLEAN:
                return ((ArrowBitAccessor) dataAccessor).getBoolean(rowId);
            case TINYINT:
                return ((Number) ((ArrowTinyIntAccessor) dataAccessor).getByte(rowId)).longValue();
            case SMALLINT:
                return ((Number) ((ArrowSmallIntAccessor) dataAccessor).getShort(rowId)).longValue();
            case INT:
                return ((Number) ((ArrowIntAccessor) dataAccessor).getInt(rowId)).longValue();
            case BIGINT:
                return ((ArrowBigIntAccessor) dataAccessor).getLong(rowId);
            case FLOAT:
                // return int bits
                return ((Number) Float.floatToIntBits(((ArrowFloat4Accessor) dataAccessor).getFloat(rowId))).longValue();
            case DOUBLE:
                return ((ArrowFloat8Accessor) dataAccessor).getDouble(rowId);
            case DECIMAL:
                BigDecimal decimal = ((ArrowDecimalAccessor) dataAccessor).getDecimal(rowId);
                if (((DecimalTypeInfo) typeInfo).getPrecision() <= MAX_SHORT_PRECISION) {
                    // short decimal (long)
                    return decimal.unscaledValue().longValue();
                }
                else {
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



