@Override public Status scan( String table, String startKey, int recordCount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { if (queriesForReads) { return scanUsingQuery(table, startKey, recordCount, fields, result); } Iterable<String> columns = fields == null ? STANDARD_FIELDS : fields; KeySet keySet = KeySet.newBuilder().addRange(KeyRange.closedClosed(Key.of(startKey), Key.of())).build(); try (ResultSet resultSet = dbClient.singleUse(timestampBound) .read(table, keySet, columns, Options.limit(recordCount))) { while (resultSet.next()) { HashMap<String, ByteIterator> row = new HashMap<>(); decodeStruct(columns, resultSet, row); result.add(row); } return Status.OK; } catch (Exception e) { LOGGER.log(Level.INFO, "scan()", e); return Status.ERROR; } }
@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"); }
KeySet.Builder keys = KeySet.newBuilder(); for (String key : expected.keySet()) { keys.addKey(Key.of(key));
@Test public void equalsAndHashCode() { EqualsTester tester = new EqualsTester(); tester.addEqualityGroup(KeySet.newBuilder().build()); tester.addEqualityGroup(KeySet.all(), KeySet.newBuilder().setAll().build()); tester.addEqualityGroup( KeySet.singleKey(Key.of("a")), KeySet.newBuilder().addKey(Key.of("a")).build()); tester.addEqualityGroup( KeySet.range(KeyRange.closedOpen(Key.of("a"), Key.of("b"))), KeySet.newBuilder().addRange(KeyRange.closedOpen(Key.of("a"), Key.of("b"))).build()); tester.addEqualityGroup(KeySet.newBuilder().addKey(Key.of(1)).addKey(Key.of(2)).build()); // We currently consider order, although this doesn't affect visible results. tester.addEqualityGroup(KeySet.newBuilder().addKey(Key.of(2)).addKey(Key.of(1)).build()); tester.addEqualityGroup(KeySet.newBuilder().setAll().addKey(Key.of("a")).build()); tester.addEqualityGroup( KeySet.newBuilder() .addKey(Key.of("a")) .addRange(KeyRange.closedOpen(Key.of("a"), Key.of("b"))) .build()); tester.testEquals(); }
@Test public void indexMultiPointRead() { KeySet keys = KeySet.newBuilder().addKey(Key.of("v3")).addKey(Key.of("v5")).addKey(Key.of("v7")).build(); checkRange(Source.INDEX, keys, 3, 5, 7); }
@Test public void multiPointRead() { KeySet keys = KeySet.newBuilder().addKey(Key.of("k3")).addKey(Key.of("k5")).addKey(Key.of("k7")).build(); checkRange(Source.BASE_TABLE, keys, 3, 5, 7); }
runner.run(callable); KeySet.Builder keys = KeySet.newBuilder(); keys.addKey(Key.of(key1)).addKey(Key.of(key2)); ResultSet resultSet =
@Test public void builder() { KeySet set = KeySet.newBuilder() .addKey(Key.of("k1")) .addKey(Key.of("k2")) .addRange(KeyRange.closedOpen(Key.of("r1"), Key.of("rr1"))) .addRange(KeyRange.closedOpen(Key.of("r2"), Key.of("rr2"))) .build(); assertThat(set.isAll()).isFalse(); // Order isn't strictly important to the API, but it's helpful to preserve it. assertThat(set.getKeys()).containsExactly(Key.of("k1"), Key.of("k2")).inOrder(); assertThat(set.getRanges()) .containsExactly( KeyRange.closedOpen(Key.of("r1"), Key.of("rr1")), KeyRange.closedOpen(Key.of("r2"), Key.of("rr2"))) .inOrder(); assertThat(set.toString()).isEqualTo("{[k1],[k2],[[r1],[rr1]),[[r2],[rr2])}"); }
@Test public void serializationMulti() { KeySet keySet = KeySet.newBuilder() .addKey(Key.of("d", 1)) .addRange(KeyRange.closedOpen(Key.of("m"), Key.of("p"))) .addKey(Key.of("a", 1)) .addRange(KeyRange.closedClosed(Key.of("a"), Key.of("d"))) .build(); checkProto( keySet, "keys { values { string_value: 'd' } values { string_value: '1' } }" + " keys { values { string_value: 'a' } values { string_value:'1' } }" + " ranges { start_closed { values { string_value: 'm' } }" + " end_open { values { string_value: 'p' } } }" + " ranges { start_closed { values { string_value: 'a' } }" + " end_closed { values { string_value: 'd' } } }"); }
Mutation.delete( "test", KeySet.newBuilder() .addRange(KeyRange.closedClosed(Key.of("one", 2, null), Key.of("two", 3, null))) .build())); Mutation.delete( "test", KeySet.newBuilder() .addRange(KeyRange.closedOpen(Key.of("one", 2, null), Key.of("two", 3, null))) .build())); Mutation.delete( "test", KeySet.newBuilder() .addRange(KeyRange.openClosed(Key.of("one", 2, null), Key.of("two", 3, null))) .build())); Mutation.delete( "test", KeySet.newBuilder() .addRange(KeyRange.openOpen(Key.of("one", 2, null), Key.of("two", 3, null))) .build()));
@Override public Iterable<T> findAllById(Iterable<ID> iterable) { KeySet.Builder builder = KeySet.newBuilder(); for (Object id : iterable) { doIfKey(id, builder::addKey); } return this.spannerTemplate.read(this.entityType, builder.build()); }
@Override public Iterable<T> findAllById(Iterable<ID> iterable) { KeySet.Builder builder = KeySet.newBuilder(); for (Object id : iterable) { doIfKey(id, builder::addKey); } return this.spannerTemplate.read(this.entityType, builder.build()); }
@Override public <T> Mutation delete(Class<T> entityClass, Iterable<? extends T> entities) { SpannerPersistentEntity<?> persistentEntity = this.spannerMappingContext .getPersistentEntity(entityClass); KeySet.Builder builder = KeySet.newBuilder(); for (T entity : entities) { PersistentPropertyAccessor accessor = persistentEntity .getPropertyAccessor(entity); PersistentProperty idProperty = persistentEntity.getIdProperty(); Key value = (Key) accessor.getProperty(idProperty); builder.addKey(value); } return delete(entityClass, builder.build()); }
@Override public <T> Mutation delete(Class<T> entityClass, Iterable<? extends T> entities) { SpannerPersistentEntity<?> persistentEntity = this.spannerMappingContext .getPersistentEntity(entityClass); KeySet.Builder builder = KeySet.newBuilder(); for (T entity : entities) { PersistentPropertyAccessor accessor = persistentEntity .getPropertyAccessor(entity); PersistentProperty idProperty = persistentEntity.getIdProperty(); Key value = (Key) accessor.getProperty(idProperty); builder.addKey(value); } return delete(entityClass, builder.build()); }
private static Mutation del(Long... keys) { KeySet.Builder builder = KeySet.newBuilder(); for (Long key : keys) { builder.addKey(Key.of(key)); } return Mutation.delete("test", builder.build()); }