in asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBResultSet.java [185:260]
private void readRow() throws SQLException {
rowStore.reset();
columnIndexOfLatestGet = -1;
if (rowParser.currentToken() != JsonToken.START_OBJECT) {
throw new IllegalStateException();
}
try {
while (rowParser.nextToken() == JsonToken.FIELD_NAME) {
String fieldName = rowParser.getCurrentName();
int columnIndex = metadata.findColumnIndexByName(fieldName);
boolean isKnownColumn = columnIndex >= 0;
ADBColumn column = isKnownColumn ? metadata.getColumnByIndex(columnIndex) : null;
switch (rowParser.nextToken()) {
case VALUE_NULL:
if (isKnownColumn) {
typeCheck(column, ADBDatatype.NULL);
rowStore.putNullColumn(columnIndex);
}
break;
case VALUE_TRUE:
if (isKnownColumn) {
typeCheck(column, ADBDatatype.BOOLEAN);
rowStore.putBooleanColumn(columnIndex, true);
}
break;
case VALUE_FALSE:
if (isKnownColumn) {
typeCheck(column, ADBDatatype.BOOLEAN);
rowStore.putBooleanColumn(columnIndex, false);
}
break;
case VALUE_NUMBER_INT:
if (isKnownColumn) {
typeCheck(column, ADBDatatype.BIGINT);
long v = rowParser.getLongValue();
rowStore.putInt64Column(columnIndex, v);
}
break;
case VALUE_STRING:
if (isKnownColumn) {
typeCheck(column, ADBDatatype.STRING);
char[] textChars = rowParser.getTextCharacters();
int textOffset = rowParser.getTextOffset();
int textLength = rowParser.getTextLength();
rowStore.putColumn(columnIndex, textChars, textOffset, textLength);
}
break;
case START_OBJECT:
if (isKnownColumn) {
typeCheck(column, ADBDatatype.OBJECT);
Map<?, ?> valueMap = getComplexColumnReader().readValue(rowParser, Map.class);
rowStore.putRecordColumn(columnIndex, valueMap);
} else {
rowParser.skipChildren();
}
break;
case START_ARRAY:
if (isKnownColumn) {
typeCheck(column, ADBDatatype.ARRAY);
List<?> valueList = getComplexColumnReader().readValue(rowParser, List.class);
rowStore.putArrayColumn(columnIndex, valueList);
} else {
rowParser.skipChildren();
}
break;
default:
throw getErrorReporter().errorInProtocol(String.valueOf(rowParser.currentToken()));
}
}
} catch (JsonProcessingException e) {
throw getErrorReporter().errorInProtocol(e);
} catch (IOException e) {
throw getErrorReporter().errorInConnection(e);
}
}