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);
}
}