Search in sources :

Example 1 with ExtTypeInfoEnum

use of org.h2.value.ExtTypeInfoEnum in project h2database by h2database.

the class ValueDataType method readValue.

/**
 * Read a value.
 *
 * @param buff the source buffer
 * @param columnType the data type of value, or {@code null}
 * @return the value
 */
Value readValue(ByteBuffer buff, TypeInfo columnType) {
    int type = buff.get() & 255;
    switch(type) {
        case NULL:
            return ValueNull.INSTANCE;
        case BOOLEAN_TRUE:
            return ValueBoolean.TRUE;
        case BOOLEAN_FALSE:
            return ValueBoolean.FALSE;
        case INT_NEG:
            return ValueInteger.get(-readVarInt(buff));
        case INTEGER:
            return ValueInteger.get(readVarInt(buff));
        case BIGINT_NEG:
            return ValueBigint.get(-readVarLong(buff));
        case BIGINT:
            return ValueBigint.get(readVarLong(buff));
        case TINYINT:
            return ValueTinyint.get(buff.get());
        case SMALLINT:
            return ValueSmallint.get(buff.getShort());
        case NUMERIC_0_1:
            return ValueNumeric.ZERO;
        case NUMERIC_0_1 + 1:
            return ValueNumeric.ONE;
        case NUMERIC_SMALL_0:
            return ValueNumeric.get(BigDecimal.valueOf(readVarLong(buff)));
        case NUMERIC_SMALL:
            {
                int scale = readVarInt(buff);
                return ValueNumeric.get(BigDecimal.valueOf(readVarLong(buff), scale));
            }
        case NUMERIC:
            {
                int scale = readVarInt(buff);
                return ValueNumeric.get(new BigDecimal(new BigInteger(readVarBytes(buff)), scale));
            }
        case DECFLOAT:
            {
                int scale = readVarInt(buff), len = readVarInt(buff);
                switch(len) {
                    case -3:
                        return ValueDecfloat.NEGATIVE_INFINITY;
                    case -2:
                        return ValueDecfloat.POSITIVE_INFINITY;
                    case -1:
                        return ValueDecfloat.NAN;
                    default:
                        byte[] b = Utils.newBytes(len);
                        buff.get(b, 0, len);
                        return ValueDecfloat.get(new BigDecimal(new BigInteger(b), scale));
                }
            }
        case DATE:
            return ValueDate.fromDateValue(readVarLong(buff));
        case TIME:
            return ValueTime.fromNanos(readTimestampTime(buff));
        case TIME_TZ:
            return ValueTimeTimeZone.fromNanos(readVarInt(buff) * DateTimeUtils.NANOS_PER_SECOND + readVarInt(buff), readTimeZone(buff));
        case TIMESTAMP:
            return ValueTimestamp.fromDateValueAndNanos(readVarLong(buff), readTimestampTime(buff));
        case TIMESTAMP_TZ_OLD:
            return ValueTimestampTimeZone.fromDateValueAndNanos(readVarLong(buff), readTimestampTime(buff), readVarInt(buff) * 60);
        case TIMESTAMP_TZ:
            return ValueTimestampTimeZone.fromDateValueAndNanos(readVarLong(buff), readTimestampTime(buff), readTimeZone(buff));
        case VARBINARY:
            return ValueVarbinary.getNoCopy(readVarBytes(buff));
        case BINARY:
            return ValueBinary.getNoCopy(readVarBytes(buff));
        case JAVA_OBJECT:
            return ValueJavaObject.getNoCopy(readVarBytes(buff));
        case UUID:
            return ValueUuid.get(buff.getLong(), buff.getLong());
        case VARCHAR:
            return ValueVarchar.get(readString(buff));
        case VARCHAR_IGNORECASE:
            return ValueVarcharIgnoreCase.get(readString(buff));
        case CHAR:
            return ValueChar.get(readString(buff));
        case ENUM:
            {
                int ordinal = readVarInt(buff);
                if (columnType != null) {
                    return ((ExtTypeInfoEnum) columnType.getExtTypeInfo()).getValue(ordinal, provider);
                }
                return ValueInteger.get(ordinal);
            }
        case INTERVAL:
            {
                int ordinal = buff.get();
                boolean negative = ordinal < 0;
                if (negative) {
                    ordinal = ~ordinal;
                }
                return ValueInterval.from(IntervalQualifier.valueOf(ordinal), negative, readVarLong(buff), ordinal < 5 ? 0 : readVarLong(buff));
            }
        case REAL_0_1:
            return ValueReal.ZERO;
        case REAL_0_1 + 1:
            return ValueReal.ONE;
        case DOUBLE_0_1:
            return ValueDouble.ZERO;
        case DOUBLE_0_1 + 1:
            return ValueDouble.ONE;
        case DOUBLE:
            return ValueDouble.get(Double.longBitsToDouble(Long.reverse(readVarLong(buff))));
        case REAL:
            return ValueReal.get(Float.intBitsToFloat(Integer.reverse(readVarInt(buff))));
        case BLOB:
            {
                int smallLen = readVarInt(buff);
                if (smallLen >= 0) {
                    byte[] small = Utils.newBytes(smallLen);
                    buff.get(small, 0, smallLen);
                    return ValueBlob.createSmall(small);
                } else if (smallLen == -3) {
                    return new ValueBlob(readLobDataDatabase(buff), readVarLong(buff));
                } else {
                    throw DbException.get(ErrorCode.FILE_CORRUPTED_1, "lob type: " + smallLen);
                }
            }
        case CLOB:
            {
                int smallLen = readVarInt(buff);
                if (smallLen >= 0) {
                    byte[] small = Utils.newBytes(smallLen);
                    buff.get(small, 0, smallLen);
                    return ValueClob.createSmall(small, readVarLong(buff));
                } else if (smallLen == -3) {
                    return new ValueClob(readLobDataDatabase(buff), readVarLong(buff), readVarLong(buff));
                } else {
                    throw DbException.get(ErrorCode.FILE_CORRUPTED_1, "lob type: " + smallLen);
                }
            }
        case ARRAY:
            {
                if (columnType != null) {
                    TypeInfo elementType = (TypeInfo) columnType.getExtTypeInfo();
                    return ValueArray.get(elementType, readArrayElements(buff, elementType), provider);
                }
                return ValueArray.get(readArrayElements(buff, null), provider);
            }
        case ROW:
            {
                int len = readVarInt(buff);
                Value[] list = new Value[len];
                if (columnType != null) {
                    ExtTypeInfoRow extTypeInfoRow = (ExtTypeInfoRow) columnType.getExtTypeInfo();
                    Iterator<Entry<String, TypeInfo>> fields = extTypeInfoRow.getFields().iterator();
                    for (int i = 0; i < len; i++) {
                        list[i] = readValue(buff, fields.next().getValue());
                    }
                    return ValueRow.get(columnType, list);
                }
                TypeInfo[] columnTypes = rowFactory.getColumnTypes();
                for (int i = 0; i < len; i++) {
                    list[i] = readValue(buff, columnTypes[i]);
                }
                return ValueRow.get(list);
            }
        case GEOMETRY:
            return ValueGeometry.get(readVarBytes(buff));
        case JSON:
            return ValueJson.getInternal(readVarBytes(buff));
        default:
            if (type >= INT_0_15 && type < INT_0_15 + 16) {
                int i = type - INT_0_15;
                if (columnType != null && columnType.getValueType() == Value.ENUM) {
                    return ((ExtTypeInfoEnum) columnType.getExtTypeInfo()).getValue(i, provider);
                }
                return ValueInteger.get(i);
            } else if (type >= BIGINT_0_7 && type < BIGINT_0_7 + 8) {
                return ValueBigint.get(type - BIGINT_0_7);
            } else if (type >= VARBINARY_0_31 && type < VARBINARY_0_31 + 32) {
                int len = type - VARBINARY_0_31;
                byte[] b = Utils.newBytes(len);
                buff.get(b, 0, len);
                return ValueVarbinary.getNoCopy(b);
            } else if (type >= VARCHAR_0_31 && type < VARCHAR_0_31 + 32) {
                return ValueVarchar.get(readString(buff, type - VARCHAR_0_31));
            }
            throw DbException.get(ErrorCode.FILE_CORRUPTED_1, "type: " + type);
    }
}
Also used : ExtTypeInfoEnum(org.h2.value.ExtTypeInfoEnum) ExtTypeInfoRow(org.h2.value.ExtTypeInfoRow) ValueBlob(org.h2.value.ValueBlob) Iterator(java.util.Iterator) BigInteger(java.math.BigInteger) ValueClob(org.h2.value.ValueClob) DataUtils.readString(org.h2.mvstore.DataUtils.readString) TypeInfo(org.h2.value.TypeInfo) ValueBigint(org.h2.value.ValueBigint) ValueTinyint(org.h2.value.ValueTinyint) ValueSmallint(org.h2.value.ValueSmallint) BigDecimal(java.math.BigDecimal)

Example 2 with ExtTypeInfoEnum

use of org.h2.value.ExtTypeInfoEnum in project apollo by salesforce.

the class StreamTransfer method readTypeInfoEnum.

private ExtTypeInfo readTypeInfoEnum(DataInputStream in) throws IOException {
    ExtTypeInfo ext;
    int c = readInt(in);
    if (c > 0) {
        String[] enumerators = new String[c];
        for (int i = 0; i < c; i++) {
            enumerators[i] = readString(in);
        }
        ext = new ExtTypeInfoEnum(enumerators);
    } else {
        ext = null;
    }
    return ext;
}
Also used : ExtTypeInfo(org.h2.value.ExtTypeInfo) ExtTypeInfoEnum(org.h2.value.ExtTypeInfoEnum) ByteString(com.google.protobuf.ByteString) ValueBigint(org.h2.value.ValueBigint) ValueTinyint(org.h2.value.ValueTinyint) ValueSmallint(org.h2.value.ValueSmallint)

Example 3 with ExtTypeInfoEnum

use of org.h2.value.ExtTypeInfoEnum in project apollo by salesforce.

the class StreamTransfer method writeTypeInfoEnum.

private void writeTypeInfoEnum(TypeInfo type, DataOutputStream out) throws IOException {
    ExtTypeInfoEnum ext = (ExtTypeInfoEnum) type.getExtTypeInfo();
    if (ext != null) {
        int c = ext.getCount();
        writeInt(c, out);
        for (int i = 0; i < c; i++) {
            writeString(ext.getEnumerator(i), out);
        }
    } else {
        writeInt(0, out);
    }
}
Also used : ExtTypeInfoEnum(org.h2.value.ExtTypeInfoEnum) ValueBigint(org.h2.value.ValueBigint) ValueTinyint(org.h2.value.ValueTinyint) ValueSmallint(org.h2.value.ValueSmallint)

Example 4 with ExtTypeInfoEnum

use of org.h2.value.ExtTypeInfoEnum in project SpringStudy by myounghaklee.

the class Parser method parseEnumType.

private TypeInfo parseEnumType() {
    read(OPEN_PAREN);
    ArrayList<String> enumeratorList = new ArrayList<>();
    do {
        enumeratorList.add(readString());
    } while (readIfMore());
    return TypeInfo.getTypeInfo(Value.ENUM, -1L, -1, new ExtTypeInfoEnum(enumeratorList.toArray(new String[0])));
}
Also used : ExtTypeInfoEnum(org.h2.value.ExtTypeInfoEnum) ArrayList(java.util.ArrayList)

Example 5 with ExtTypeInfoEnum

use of org.h2.value.ExtTypeInfoEnum in project 468H2Project by lukeunderwood42.

the class ValueDataType method readValue.

/**
 * Read a value.
 *
 * @param buff the source buffer
 * @param columnType the data type of value, or {@code null}
 * @return the value
 */
Value readValue(ByteBuffer buff, TypeInfo columnType) {
    int type = buff.get() & 255;
    switch(type) {
        case NULL:
            return ValueNull.INSTANCE;
        case BOOLEAN_TRUE:
            return ValueBoolean.TRUE;
        case BOOLEAN_FALSE:
            return ValueBoolean.FALSE;
        case INT_NEG:
            return ValueInteger.get(-readVarInt(buff));
        case INTEGER:
            return ValueInteger.get(readVarInt(buff));
        case BIGINT_NEG:
            return ValueBigint.get(-readVarLong(buff));
        case BIGINT:
            return ValueBigint.get(readVarLong(buff));
        case TINYINT:
            return ValueTinyint.get(buff.get());
        case SMALLINT:
            return ValueSmallint.get(buff.getShort());
        case NUMERIC_0_1:
            return ValueNumeric.ZERO;
        case NUMERIC_0_1 + 1:
            return ValueNumeric.ONE;
        case NUMERIC_SMALL_0:
            return ValueNumeric.get(BigDecimal.valueOf(readVarLong(buff)));
        case NUMERIC_SMALL:
            {
                int scale = readVarInt(buff);
                return ValueNumeric.get(BigDecimal.valueOf(readVarLong(buff), scale));
            }
        case NUMERIC:
            {
                int scale = readVarInt(buff);
                return ValueNumeric.get(new BigDecimal(new BigInteger(readVarBytes(buff)), scale));
            }
        case DECFLOAT:
            {
                int scale = readVarInt(buff), len = readVarInt(buff);
                switch(len) {
                    case -3:
                        return ValueDecfloat.NEGATIVE_INFINITY;
                    case -2:
                        return ValueDecfloat.POSITIVE_INFINITY;
                    case -1:
                        return ValueDecfloat.NAN;
                    default:
                        byte[] b = Utils.newBytes(len);
                        buff.get(b, 0, len);
                        return ValueDecfloat.get(new BigDecimal(new BigInteger(b), scale));
                }
            }
        case DATE:
            return ValueDate.fromDateValue(readVarLong(buff));
        case TIME:
            return ValueTime.fromNanos(readTimestampTime(buff));
        case TIME_TZ:
            return ValueTimeTimeZone.fromNanos(readVarInt(buff) * DateTimeUtils.NANOS_PER_SECOND + readVarInt(buff), readTimeZone(buff));
        case TIMESTAMP:
            return ValueTimestamp.fromDateValueAndNanos(readVarLong(buff), readTimestampTime(buff));
        case TIMESTAMP_TZ_OLD:
            return ValueTimestampTimeZone.fromDateValueAndNanos(readVarLong(buff), readTimestampTime(buff), readVarInt(buff) * 60);
        case TIMESTAMP_TZ:
            return ValueTimestampTimeZone.fromDateValueAndNanos(readVarLong(buff), readTimestampTime(buff), readTimeZone(buff));
        case VARBINARY:
            return ValueVarbinary.getNoCopy(readVarBytes(buff));
        case BINARY:
            return ValueBinary.getNoCopy(readVarBytes(buff));
        case JAVA_OBJECT:
            return ValueJavaObject.getNoCopy(readVarBytes(buff));
        case UUID:
            return ValueUuid.get(buff.getLong(), buff.getLong());
        case VARCHAR:
            return ValueVarchar.get(readString(buff));
        case VARCHAR_IGNORECASE:
            return ValueVarcharIgnoreCase.get(readString(buff));
        case CHAR:
            return ValueChar.get(readString(buff));
        case ENUM:
            {
                int ordinal = readVarInt(buff);
                if (columnType != null) {
                    return ((ExtTypeInfoEnum) columnType.getExtTypeInfo()).getValue(ordinal, provider);
                }
                return ValueInteger.get(ordinal);
            }
        case INTERVAL:
            {
                int ordinal = buff.get();
                boolean negative = ordinal < 0;
                if (negative) {
                    ordinal = ~ordinal;
                }
                return ValueInterval.from(IntervalQualifier.valueOf(ordinal), negative, readVarLong(buff), ordinal < 5 ? 0 : readVarLong(buff));
            }
        case REAL_0_1:
            return ValueReal.ZERO;
        case REAL_0_1 + 1:
            return ValueReal.ONE;
        case DOUBLE_0_1:
            return ValueDouble.ZERO;
        case DOUBLE_0_1 + 1:
            return ValueDouble.ONE;
        case DOUBLE:
            return ValueDouble.get(Double.longBitsToDouble(Long.reverse(readVarLong(buff))));
        case REAL:
            return ValueReal.get(Float.intBitsToFloat(Integer.reverse(readVarInt(buff))));
        case BLOB:
            {
                int smallLen = readVarInt(buff);
                if (smallLen >= 0) {
                    byte[] small = Utils.newBytes(smallLen);
                    buff.get(small, 0, smallLen);
                    return ValueBlob.createSmall(small);
                } else if (smallLen == -3) {
                    return new ValueBlob(readLobDataDatabase(buff), readVarLong(buff));
                } else {
                    throw DbException.get(ErrorCode.FILE_CORRUPTED_1, "lob type: " + smallLen);
                }
            }
        case CLOB:
            {
                int smallLen = readVarInt(buff);
                if (smallLen >= 0) {
                    byte[] small = Utils.newBytes(smallLen);
                    buff.get(small, 0, smallLen);
                    return ValueClob.createSmall(small, readVarLong(buff));
                } else if (smallLen == -3) {
                    return new ValueClob(readLobDataDatabase(buff), readVarLong(buff), readVarLong(buff));
                } else {
                    throw DbException.get(ErrorCode.FILE_CORRUPTED_1, "lob type: " + smallLen);
                }
            }
        case ARRAY:
            {
                if (columnType != null) {
                    TypeInfo elementType = (TypeInfo) columnType.getExtTypeInfo();
                    return ValueArray.get(elementType, readArrayElements(buff, elementType), provider);
                }
                return ValueArray.get(readArrayElements(buff, null), provider);
            }
        case ROW:
            {
                int len = readVarInt(buff);
                Value[] list = new Value[len];
                if (columnType != null) {
                    ExtTypeInfoRow extTypeInfoRow = (ExtTypeInfoRow) columnType.getExtTypeInfo();
                    Iterator<Entry<String, TypeInfo>> fields = extTypeInfoRow.getFields().iterator();
                    for (int i = 0; i < len; i++) {
                        list[i] = readValue(buff, fields.next().getValue());
                    }
                    return ValueRow.get(columnType, list);
                }
                TypeInfo[] columnTypes = rowFactory.getColumnTypes();
                for (int i = 0; i < len; i++) {
                    list[i] = readValue(buff, columnTypes[i]);
                }
                return ValueRow.get(list);
            }
        case GEOMETRY:
            return ValueGeometry.get(readVarBytes(buff));
        case JSON:
            return ValueJson.getInternal(readVarBytes(buff));
        default:
            if (type >= INT_0_15 && type < INT_0_15 + 16) {
                int i = type - INT_0_15;
                if (columnType != null && columnType.getValueType() == Value.ENUM) {
                    return ((ExtTypeInfoEnum) columnType.getExtTypeInfo()).getValue(i, provider);
                }
                return ValueInteger.get(i);
            } else if (type >= BIGINT_0_7 && type < BIGINT_0_7 + 8) {
                return ValueBigint.get(type - BIGINT_0_7);
            } else if (type >= VARBINARY_0_31 && type < VARBINARY_0_31 + 32) {
                int len = type - VARBINARY_0_31;
                byte[] b = Utils.newBytes(len);
                buff.get(b, 0, len);
                return ValueVarbinary.getNoCopy(b);
            } else if (type >= VARCHAR_0_31 && type < VARCHAR_0_31 + 32) {
                return ValueVarchar.get(readString(buff, type - VARCHAR_0_31));
            }
            throw DbException.get(ErrorCode.FILE_CORRUPTED_1, "type: " + type);
    }
}
Also used : ExtTypeInfoEnum(org.h2.value.ExtTypeInfoEnum) ExtTypeInfoRow(org.h2.value.ExtTypeInfoRow) ValueBlob(org.h2.value.ValueBlob) Iterator(java.util.Iterator) BigInteger(java.math.BigInteger) ValueClob(org.h2.value.ValueClob) DataUtils.readString(org.h2.mvstore.DataUtils.readString) TypeInfo(org.h2.value.TypeInfo) ValueBigint(org.h2.value.ValueBigint) ValueTinyint(org.h2.value.ValueTinyint) ValueSmallint(org.h2.value.ValueSmallint) BigDecimal(java.math.BigDecimal)

Aggregations

ExtTypeInfoEnum (org.h2.value.ExtTypeInfoEnum)8 ValueBigint (org.h2.value.ValueBigint)5 ValueSmallint (org.h2.value.ValueSmallint)5 ValueTinyint (org.h2.value.ValueTinyint)5 BigInteger (java.math.BigInteger)4 ArrayList (java.util.ArrayList)4 BigDecimal (java.math.BigDecimal)3 Iterator (java.util.Iterator)3 DataUtils.readString (org.h2.mvstore.DataUtils.readString)3 ExtTypeInfoRow (org.h2.value.ExtTypeInfoRow)3 TypeInfo (org.h2.value.TypeInfo)3 ValueBlob (org.h2.value.ValueBlob)3 ValueClob (org.h2.value.ValueClob)3 ByteString (com.google.protobuf.ByteString)1 IntervalQualifier (org.gridgain.internal.h2.api.IntervalQualifier)1 AlterTableAddConstraint (org.gridgain.internal.h2.command.ddl.AlterTableAddConstraint)1 AlterTableAlterColumn (org.gridgain.internal.h2.command.ddl.AlterTableAlterColumn)1 AlterTableDropConstraint (org.gridgain.internal.h2.command.ddl.AlterTableDropConstraint)1 AlterTableRenameColumn (org.gridgain.internal.h2.command.ddl.AlterTableRenameColumn)1 AlterTableRenameConstraint (org.gridgain.internal.h2.command.ddl.AlterTableRenameConstraint)1