private void readRow()

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