@Override public Struct getCurrentRowAsStruct() { return delegate.getCurrentRowAsStruct(); }
private Struct consumeSingleRow(ResultSet resultSet) { if (!resultSet.next()) { return null; } Struct row = resultSet.getCurrentRowAsStruct(); if (resultSet.next()) { throw newSpannerException(ErrorCode.INTERNAL, "Multiple rows returned for single key"); } return row; } }
ResultSetStats analyzeQuery() { // [START read_context_analyze_query] ReadContext rc = dbClient.singleUse(); ResultSet resultSet = rc.analyzeQuery( Statement.of("SELECT SingerId, AlbumId, MarketingBudget FROM Albums"), ReadContext.QueryAnalyzeMode.PROFILE); while (resultSet.next()) { // Discard the results. We're only processing because getStats() below requires it. resultSet.getCurrentRowAsStruct(); } ResultSetStats stats = resultSet.getStats(); // [END read_context_analyze_query] return stats; } }
private List<Struct> resultRows(Statement statement, Type expectedRowType) { ArrayList<Struct> results = new ArrayList<>(); ResultSet resultSet = statement.executeQuery(client.singleUse(TimestampBound.strong())); while (resultSet.next()) { Struct row = resultSet.getCurrentRowAsStruct(); results.add(row); } assertThat(resultSet.getType()).isEqualTo(expectedRowType); assertThat(resultSet.next()).isFalse(); return results; }
private static Struct queryRow(ReadContext ctx) { ResultSet resultSet = Statement.of("SELECT StringValue FROM TestTable").executeQuery(ctx); // TODO(user): Consider a library routine to consume a single row from a query. assertThat(resultSet.next()).isTrue(); Struct row = resultSet.getCurrentRowAsStruct(); assertThat(resultSet.next()).isFalse(); return row; }
private Struct executeWithRowResultType(Statement statement, Type expectedRowType) { ResultSet resultSet = statement.executeQuery(client.singleUse(TimestampBound.strong())); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getType()).isEqualTo(expectedRowType); Struct row = resultSet.getCurrentRowAsStruct(); assertThat(resultSet.next()).isFalse(); return row; }
@Override public Struct read(ReadContext ctx, String key) { ResultSet resultSet = ctx.executeQuery( Statement.newBuilder("SELECT V FROM T WHERE K = @key") .bind("key") .to(key) .build()); assertThat(resultSet.next()).isTrue(); Struct row = resultSet.getCurrentRowAsStruct(); assertThat(resultSet.next()).isFalse(); return row; } });
@Test public void rowsAreSnapshots() { List<Struct> rows = new ArrayList<>(); ResultSet resultSet = client .singleUse(TimestampBound.strong()) .read( TABLE_NAME, KeySet.newBuilder() .addKey(Key.of("k2")) .addKey(Key.of("k3")) .addKey(Key.of("k4")) .build(), ALL_COLUMNS); while (resultSet.next()) { rows.add(resultSet.getCurrentRowAsStruct()); } assertThat(rows.size()).isEqualTo(3); assertThat(rows.get(0).getString(0)).isEqualTo("k2"); assertThat(rows.get(0).getString(1)).isEqualTo("v2"); assertThat(rows.get(1).getString(0)).isEqualTo("k3"); assertThat(rows.get(1).getString(1)).isEqualTo("v3"); assertThat(rows.get(2).getString(0)).isEqualTo("k4"); assertThat(rows.get(2).getString(1)).isEqualTo("v4"); }
@Test public void exceptionIfNextIsNotCalled() { ResultSet rs = ResultSets.forRows( Type.struct(Type.StructField.of("f1", Type.string())), Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); expected.expect(IllegalStateException.class); rs.getCurrentRowAsStruct(); } }
@Test public void closeResultSet() { ResultSet rs = ResultSets.forRows( Type.struct(Type.StructField.of("f1", Type.string())), Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); rs.close(); expected.expect(IllegalStateException.class); rs.getCurrentRowAsStruct(); }
assertThat(rs.getColumnType(1)).isEqualTo(Type.int64()); assertThat(rs.getCurrentRowAsStruct()).isEqualTo(struct1); assertThat(rs.getCurrentRowAsStruct()).isEqualTo(struct2);
assertThat(rs.getColumnType("f3")).isEqualTo(Type.bool()); assertThat(rs.getColumnType(2)).isEqualTo(Type.bool()); assertThat(rs.getCurrentRowAsStruct()).isEqualTo(struct1); assertThat(rs.getString(0)).isEqualTo("x"); assertThat(rs.getLong(1)).isEqualTo(2L); assertThat(rs.getCurrentRowAsStruct()).isEqualTo(struct2); assertThat(rs.getString(0)).isEqualTo("y"); assertThat(rs.getLong(1)).isEqualTo(3L);
@Override public Struct getCurrentRowAsStruct() { return delegate.getCurrentRowAsStruct(); }
@Override public <A> List<A> query(Function<Struct, A> rowFunc, Statement statement, SpannerQueryOptions options) { ArrayList<A> result = new ArrayList<>(); try (ResultSet resultSet = executeQuery(statement, options)) { while (resultSet.next()) { result.add(rowFunc.apply(resultSet.getCurrentRowAsStruct())); } } return result; }
@Override public <A> List<A> query(Function<Struct, A> rowFunc, Statement statement, SpannerQueryOptions options) { ArrayList<A> result = new ArrayList<>(); try (ResultSet resultSet = executeQuery(statement, options)) { while (resultSet.next()) { result.add(rowFunc.apply(resultSet.getCurrentRowAsStruct())); } } return result; }
@Override public <T> List<T> mapToList(ResultSet resultSet, Class<T> entityClass, Set<String> includeColumns, boolean allowMissingColumns) { ArrayList<T> result = new ArrayList<>(); while (resultSet.next()) { result.add(this.entityReader.read(entityClass, resultSet.getCurrentRowAsStruct(), includeColumns, allowMissingColumns)); } resultSet.close(); return result; }
@Override public <T> List<T> mapToList(ResultSet resultSet, Class<T> entityClass, Set<String> includeColumns, boolean allowMissingColumns) { ArrayList<T> result = new ArrayList<>(); while (resultSet.next()) { result.add(this.entityReader.read(entityClass, resultSet.getCurrentRowAsStruct(), includeColumns, allowMissingColumns)); } resultSet.close(); return result; }
private Struct consumeSingleRow(ResultSet resultSet) { if (!resultSet.next()) { return null; } Struct row = resultSet.getCurrentRowAsStruct(); if (resultSet.next()) { throw newSpannerException(ErrorCode.INTERNAL, "Multiple rows returned for single key"); } return row; } }
@ProcessElement public void processElement(ProcessContext c) throws Exception { Transaction tx = c.sideInput(txView); ReadOperation op = c.element(); BatchReadOnlyTransaction context = spannerAccessor.getBatchClient().batchReadOnlyTransaction(tx.transactionId()); try (ResultSet resultSet = execute(op, context)) { while (resultSet.next()) { c.output(resultSet.getCurrentRowAsStruct()); } } }
@ProcessElement public void processElement(ProcessContext c) throws Exception { Transaction tx = c.sideInput(txView); BatchReadOnlyTransaction batchTx = spannerAccessor.getBatchClient().batchReadOnlyTransaction(tx.transactionId()); Partition p = c.element(); try (ResultSet resultSet = batchTx.execute(p)) { while (resultSet.next()) { Struct s = resultSet.getCurrentRowAsStruct(); c.output(s); } } } }