@SuppressWarnings({ "rawtypes", "unchecked" }) private MetaResultSet createResultSet(List iterable, Class clazz, String... names) { final List<ColumnMetaData> columns = new ArrayList<ColumnMetaData>(); final List<Field> fields = new ArrayList<Field>(); final List<String> fieldNames = new ArrayList<String>(); for (String name : names) { final int index = fields.size(); final String fieldName = AvaticaUtils.toCamelCase(name); final Field field; try { field = clazz.getField(fieldName); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } columns.add(columnMetaData(name, index, field.getType(), true)); fields.add(field); fieldNames.add(fieldName); } CursorFactory cursorFactory = CursorFactory.record(clazz, fields, fieldNames); Signature signature = new Signature(columns, "", null, Collections.<String, Object> emptyMap(), cursorFactory, StatementType.SELECT); StatementHandle sh = this.createStatement(connection().handle); Frame frame = new Frame(0, true, iterable); return MetaResultSet.create(connection().id, sh.id, true, signature, frame); }
public Meta.Frame nextFrame(final long fetchOffset, final int fetchMaxRowCount) { synchronized (lock) { ensure(State.RUNNING); Preconditions.checkState(fetchOffset == offset, "fetchOffset[%,d] != offset[%,d]", fetchOffset, offset); try { final List<Object> rows = new ArrayList<>(); while (!yielder.isDone() && (fetchMaxRowCount < 0 || offset < fetchOffset + fetchMaxRowCount)) { rows.add(yielder.get()); yielder = yielder.next(null); offset++; } final boolean done = yielder.isDone(); if (done) { close(); } return new Meta.Frame(fetchOffset, done, rows); } catch (Throwable t) { this.throwable = t; try { close(); } catch (Throwable t1) { t.addSuppressed(t1); } throw t; } } }
@JsonCreator public static Frame create(@JsonProperty("offset") long offset, @JsonProperty("done") boolean done, @JsonProperty("rows") List<Object> rows) { if (offset == 0 && done && rows.isEmpty()) { return EMPTY; } return new Frame(offset, done, rows); }
@Override public Frame fetch(StatementHandle h, long offset, int fetchMaxRowCount) throws NoSuchStatementException { final CalciteConnectionImpl calciteConnection = getConnection(); CalciteServerStatement stmt = calciteConnection.server.getStatement(h); final Signature signature = stmt.getSignature(); final Iterator<Object> iterator; if (stmt.getResultSet() == null) { final Iterable<Object> iterable = _createIterable(h, signature, null, null); iterator = iterable.iterator(); stmt.setResultSet(iterator); } else { iterator = stmt.getResultSet(); } final List rows = MetaImpl.collect(signature.cursorFactory, LimitIterator.of(iterator, fetchMaxRowCount), new ArrayList<List<Object>>()); boolean done = fetchMaxRowCount == 0 || rows.size() < fetchMaxRowCount; @SuppressWarnings("unchecked") List<Object> rows1 = (List<Object>) rows; return new Meta.Frame(offset, done, rows1); }
private <E> MetaResultSet createResultSet(Enumerable<E> enumerable, Class clazz, String... names) { final List<ColumnMetaData> columns = new ArrayList<>(); final List<Field> fields = new ArrayList<>(); final List<String> fieldNames = new ArrayList<>(); for (String name : names) { final int index = fields.size(); final String fieldName = AvaticaUtils.toCamelCase(name); final Field field; try { field = clazz.getField(fieldName); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } columns.add(columnMetaData(name, index, field.getType(), false)); fields.add(field); fieldNames.add(fieldName); } //noinspection unchecked final Iterable<Object> iterable = (Iterable<Object>) (Iterable) enumerable; return createResultSet(Collections.emptyMap(), columns, CursorFactory.record(clazz, fields, fieldNames), new Frame(0, true, iterable)); }
@Override public ResultSet create(ColumnMetaData.AvaticaType elementType, Iterable<Object> iterable) throws SQLException { final List<ColumnMetaData> columnMetaDataList; if (elementType instanceof ColumnMetaData.StructType) { columnMetaDataList = ((ColumnMetaData.StructType) elementType).columns; } else { columnMetaDataList = ImmutableList.of(ColumnMetaData.dummy(elementType, false)); } final CalcitePrepare.CalciteSignature signature = (CalcitePrepare.CalciteSignature) this.signature; final CalcitePrepare.CalciteSignature<Object> newSignature = new CalcitePrepare.CalciteSignature<>(signature.sql, signature.parameters, signature.internalParameters, signature.rowType, columnMetaDataList, Meta.CursorFactory.ARRAY, signature.rootSchema, ImmutableList.of(), -1, null, statement.getStatementType()); ResultSetMetaData subResultSetMetaData = new AvaticaResultSetMetaData(statement, null, newSignature); final CalciteResultSet resultSet = new CalciteResultSet(statement, signature, subResultSetMetaData, localCalendar.getTimeZone(), new Meta.Frame(0, true, iterable)); final Cursor cursor = resultSet.createCursor(elementType, iterable); return resultSet.execute2(cursor, columnMetaDataList); }
@Override public Frame fetch(StatementHandle h, long offset, int fetchMaxRowCount) { final QuarkConnectionImpl calciteConnection = getConnection(); QuarkJdbcStatement stmt = calciteConnection.server.getStatement(h); final Signature signature = stmt.getSignature(); final Iterator<Object> iterator; if (stmt.getResultSet() == null) { final Iterable<Object> iterable = Linq4j.emptyEnumerable(); iterator = iterable.iterator(); stmt.setResultSet(iterator); } else { iterator = stmt.getResultSet(); } final List<List<Object>> list = new ArrayList<>(); List<List<Object>> rows = MetaImpl.collect(signature.cursorFactory, LimitIterator.of(iterator, fetchMaxRowCount), list); boolean done = fetchMaxRowCount == 0 || list.size() < fetchMaxRowCount; return new Meta.Frame(offset, done, (List<Object>) (List) rows); }
private <E> MetaResultSet createResultSet(Enumerable<E> enumerable, Class clazz, String... names) { final List<ColumnMetaData> columns = new ArrayList<>(); final List<Field> fields = new ArrayList<>(); final List<String> fieldNames = new ArrayList<>(); for (String name : names) { final int index = fields.size(); final String fieldName = AvaticaUtils.toCamelCase(name); final Field field; try { field = clazz.getField(fieldName); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } columns.add(columnMetaData(name, index, field.getType(), false)); fields.add(field); fieldNames.add(fieldName); } //noinspection unchecked final Iterable<Object> iterable = (Iterable<Object>) (Iterable) enumerable; return createResultSet(Collections.emptyMap(), columns, CursorFactory.record(clazz, fields, fieldNames), new Frame(0, true, iterable)); }
public static Frame fromProto(Common.Frame proto) { List<Object> parsedRows = new ArrayList<>(proto.getRowsCount()); for (Common.Row protoRow : proto.getRowsList()) { ArrayList<Object> row = new ArrayList<>(protoRow.getValueCount()); for (Common.ColumnValue protoColumn : protoRow.getValueList()) { final Object value; if (!isNewStyleColumn(protoColumn)) { // Backward compatibility value = parseOldStyleColumn(protoColumn); } else { // Current style parsing (separate scalar and array values) value = parseColumn(protoColumn); } row.add(value); } parsedRows.add(row); } return new Frame(proto.getOffset(), proto.getDone(), parsedRows); }
@Override public Frame fetch(StatementHandle h, long offset, int fetchMaxRowCount) throws NoSuchStatementException { final CalciteConnectionImpl calciteConnection = getConnection(); CalciteServerStatement stmt = calciteConnection.server.getStatement(h); final Signature signature = stmt.getSignature(); final Iterator<Object> iterator; if (stmt.getResultSet() == null) { final Iterable<Object> iterable = _createIterable(h, signature, null, null); iterator = iterable.iterator(); stmt.setResultSet(iterator); } else { iterator = stmt.getResultSet(); } final List rows = MetaImpl.collect(signature.cursorFactory, LimitIterator.of(iterator, fetchMaxRowCount), new ArrayList<List<Object>>()); boolean done = fetchMaxRowCount == 0 || rows.size() < fetchMaxRowCount; @SuppressWarnings("unchecked") List<Object> rows1 = (List<Object>) rows; return new Meta.Frame(offset, done, rows1); }
public static Frame fromProto(Common.Frame proto) { List<Object> parsedRows = new ArrayList<>(proto.getRowsCount()); for (Common.Row protoRow : proto.getRowsList()) { ArrayList<Object> row = new ArrayList<>(protoRow.getValueCount()); for (Common.ColumnValue protoColumn : protoRow.getValueList()) { final Object value; if (!isNewStyleColumn(protoColumn)) { // Backward compatibility value = parseOldStyleColumn(protoColumn); } else { // Current style parsing (separate scalar and array values) value = parseColumn(protoColumn); } row.add(value); } parsedRows.add(row); } return new Frame(proto.getOffset(), proto.getDone(), parsedRows); }
public static Frame fromProto(Common.Frame proto) { List<Object> parsedRows = new ArrayList<>(proto.getRowsCount()); for (Common.Row protoRow : proto.getRowsList()) { ArrayList<Object> row = new ArrayList<>(protoRow.getValueCount()); for (Common.ColumnValue protoColumn : protoRow.getValueList()) { final Object value; if (!isNewStyleColumn(protoColumn)) { // Backward compatibility value = parseOldStyleColumn(protoColumn); } else { // Current style parsing (separate scalar and array values) value = parseColumn(protoColumn); } row.add(value); } parsedRows.add(row); } return new Frame(proto.getOffset(), proto.getDone(), parsedRows); }
@Test public void testMultipleRows() { ArrayList<Object> rows = new ArrayList<>(); rows.add(new Object[] {"string", Integer.MAX_VALUE, new Date().getTime()}); rows.add(new Object[] {"gnirts", 0, Long.MIN_VALUE}); rows.add(new Object[] {"", null, Long.MAX_VALUE}); Frame singleRow = new Frame(0, true, rows); serializeAndTestEquality(singleRow); }
@Test public void testSingleRow() { ArrayList<Object> rows = new ArrayList<>(); rows.add(new Object[] {"string", Integer.MAX_VALUE, new Date().getTime()}); Frame singleRow = new Frame(0, true, rows); serializeAndTestEquality(singleRow); }
@Test public void testSingleRow() { ArrayList<Object> rows = new ArrayList<>(); rows.add(new Object[] {"string", Integer.MAX_VALUE, new Date().getTime()}); Frame singleRow = new Frame(0, true, rows); serializeAndTestEquality(singleRow); }
@JsonCreator public static Frame create(@JsonProperty("offset") int offset, @JsonProperty("done") boolean done, @JsonProperty("rows") List<Object> rows) { if (offset == 0 && done && rows.isEmpty()) { return EMPTY; } return new Frame(offset, done, rows); }
@Test public void testMultipleRows() { ArrayList<Object> rows = new ArrayList<>(); rows.add(new Object[] {"string", Integer.MAX_VALUE, new Date().getTime()}); rows.add(new Object[] {"gnirts", 0, Long.MIN_VALUE}); rows.add(new Object[] {"", null, Long.MAX_VALUE}); Frame singleRow = new Frame(0, true, rows); serializeAndTestEquality(singleRow); }
@Test public void testSingleRow() { ArrayList<Object> rows = new ArrayList<>(); rows.add(new Object[] {"string", Integer.MAX_VALUE, new Date().getTime()}); Frame singleRow = new Frame(0, true, rows); serializeAndTestEquality(singleRow); }
@JsonCreator public static Frame create(@JsonProperty("offset") long offset, @JsonProperty("done") boolean done, @JsonProperty("rows") List<Object> rows) { if (offset == 0 && done && rows.isEmpty()) { return EMPTY; } return new Frame(offset, done, rows); }
@Test public void testMultipleRows() { ArrayList<Object> rows = new ArrayList<>(); rows.add(new Object[] {"string", Integer.MAX_VALUE, new Date().getTime()}); rows.add(new Object[] {"gnirts", 0, Long.MIN_VALUE}); rows.add(new Object[] {"", null, Long.MAX_VALUE}); Frame singleRow = new Frame(0, true, rows); serializeAndTestEquality(singleRow); }