void putColumn()

in asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBRowStore.java [119:178]


    void putColumn(int columnIndex, char[] textChars, int textOffset, int textLength) throws SQLException {
        byte valueTypeTag = parseTypeTag(textChars, textOffset, textLength);
        ADBDatatype valueType = ADBDatatype.findByTypeTag(valueTypeTag);
        if (valueType == null) {
            throw getErrorReporter().errorUnexpectedType(valueTypeTag);
        }

        int nonTaggedOffset = textOffset + parsedLength;
        int nonTaggedLength = textLength - parsedLength;
        int nonTaggedEnd = nonTaggedOffset + nonTaggedLength; // = textOffset + textLength

        setColumnType(columnIndex, valueType);

        // NULL, BOOLEAN, BIGINT shouldn't normally happen. only handle here for completeness

        switch (valueType) {
            case MISSING:
            case NULL:
                // no content
                break;
            case BOOLEAN:
            case TINYINT:
            case SMALLINT:
            case INTEGER:
            case BIGINT:
            case FLOAT:
            case DOUBLE:
            case DATE:
            case TIME:
            case DATETIME:
            case YEARMONTHDURATION:
            case DAYTIMEDURATION:
                long r0 = parseInt64(textChars, nonTaggedOffset, nonTaggedEnd);
                setColumnRegisters(columnIndex, r0, 0);
                break;
            case STRING:
                objectStore[columnIndex] = new String(textChars, nonTaggedOffset, nonTaggedLength);
                break;
            case DURATION:
                int delimiterOffset = indexOf(TEXT_DELIMITER, textChars, nonTaggedOffset, nonTaggedEnd);
                if (delimiterOffset < 0 || delimiterOffset == nonTaggedEnd - 1) {
                    throw getErrorReporter().errorInProtocol();
                }
                r0 = parseInt64(textChars, nonTaggedOffset, delimiterOffset);
                long r1 = parseInt64(textChars, delimiterOffset + 1, nonTaggedEnd);
                setColumnRegisters(columnIndex, r0, r1);
                break;
            case UUID:
                // TODO: better encoding as 2 longs?
                objectStore[columnIndex] = UUID.fromString(new String(textChars, nonTaggedOffset, nonTaggedLength));
                break;
            case OBJECT:
            case ARRAY:
            case MULTISET:
                // Unexpected (shouldn't be called)
                throw new IllegalArgumentException(String.valueOf(valueType));
            default:
                throw getErrorReporter().errorUnexpectedType(valueType);
        }
    }