@Test public void insertOrUpdateEmpty() { Mutation m = Mutation.newInsertOrUpdateBuilder("T2").build(); assertThat(m.getTable()).isEqualTo("T2"); assertThat(m.getOperation()).isEqualTo(Mutation.Op.INSERT_OR_UPDATE); assertThat(m.getColumns()).isEmpty(); assertThat(m.getValues()).isEmpty(); assertThat(m.toString()).isEqualTo("insert_or_update(T2{})"); }
@Test public void replaceEmpty() { Mutation m = Mutation.newReplaceBuilder("T2").build(); assertThat(m.getTable()).isEqualTo("T2"); assertThat(m.getOperation()).isEqualTo(Mutation.Op.REPLACE); assertThat(m.getColumns()).isEmpty(); assertThat(m.getValues()).isEmpty(); assertThat(m.toString()).isEqualTo("replace(T2{})"); }
@Test public void insertEmpty() { Mutation m = Mutation.newInsertBuilder("T1").build(); assertThat(m.getTable()).isEqualTo("T1"); assertThat(m.getOperation()).isEqualTo(Mutation.Op.INSERT); assertThat(m.getColumns()).isEmpty(); assertThat(m.getValues()).isEmpty(); assertThat(m.toString()).isEqualTo("insert(T1{})"); }
@Test public void updateEmpty() { Mutation m = Mutation.newUpdateBuilder("T2").build(); assertThat(m.getTable()).isEqualTo("T2"); assertThat(m.getOperation()).isEqualTo(Mutation.Op.UPDATE); assertThat(m.getColumns()).isEmpty(); assertThat(m.getValues()).isEmpty(); assertThat(m.toString()).isEqualTo("update(T2{})"); }
@Test public void insertOrUpdate() { Mutation m = Mutation.newInsertOrUpdateBuilder("T1").set("C1").to(true).build(); assertThat(m.getTable()).isEqualTo("T1"); assertThat(m.getOperation()).isEqualTo(Mutation.Op.INSERT_OR_UPDATE); assertThat(m.getColumns()).containsExactly("C1"); assertThat(m.getValues()).containsExactly(Value.bool(true)); assertThat(m.toString()).isEqualTo("insert_or_update(T1{C1=true})"); }
@Test public void insert() { Mutation m = Mutation.newInsertBuilder("T1").set("C1").to(true).set("C2").to(1234).build(); assertThat(m.getTable()).isEqualTo("T1"); assertThat(m.getOperation()).isEqualTo(Mutation.Op.INSERT); assertThat(m.getColumns()).containsExactly("C1", "C2").inOrder(); assertThat(m.getValues()).containsExactly(Value.bool(true), Value.int64(1234)).inOrder(); assertThat(m.toString()).isEqualTo("insert(T1{C1=true,C2=1234})"); }
@Test public void update() { Mutation m = Mutation.newUpdateBuilder("T1").set("C1").to(true).set("C2").to(1234).build(); assertThat(m.getTable()).isEqualTo("T1"); assertThat(m.getOperation()).isEqualTo(Mutation.Op.UPDATE); assertThat(m.getColumns()).containsExactly("C1", "C2").inOrder(); assertThat(m.getValues()).containsExactly(Value.bool(true), Value.int64(1234)).inOrder(); assertThat(m.toString()).isEqualTo("update(T1{C1=true,C2=1234})"); }
@Test public void replace() { Mutation m = Mutation.newReplaceBuilder("T1").set("C1").to(true).set("C2").to(1234).build(); assertThat(m.getTable()).isEqualTo("T1"); assertThat(m.getOperation()).isEqualTo(Mutation.Op.REPLACE); assertThat(m.getColumns()).containsExactly("C1", "C2").inOrder(); assertThat(m.getValues()).containsExactly(Value.bool(true), Value.int64(1234)).inOrder(); assertThat(m.toString()).isEqualTo("replace(T1{C1=true,C2=1234})"); }
/** * Builds a lexicographically sortable binary key based on a primary key descriptor. * * @param m a spanner mutation. * @return a binary string that preserves the ordering of the primary key. */ public byte[] encodeTableNameAndKey(Mutation m) { OrderedCode orderedCode = new OrderedCode(); orderedCode.writeBytes(m.getTable().getBytes(StandardCharsets.UTF_8)); if (m.getOperation() == Op.DELETE) { if (isPointDelete(m)) { Key next = m.getKeySet().getKeys().iterator().next(); encodeKey(orderedCode, m.getTable(), next); } else { // The key is left empty for non-point deletes, since there is no general way to batch them. } } else { encodeKey(orderedCode, m); } return orderedCode.getEncodedBytes(); }
/** Count the number of cells modified by {@link MutationGroup}. */ public static long countOf(SpannerSchema spannerSchema, MutationGroup mutationGroup) { long mutatedCells = 0L; for (Mutation mutation : mutationGroup) { if (mutation.getOperation() == Op.DELETE) { // For single key deletes sum up all the columns in the schema. // There is no clear way to estimate range deletes, so they are ignored. if (isPointDelete(mutation)) { final KeySet keySet = mutation.getKeySet(); final long rows = Iterables.size(keySet.getKeys()); mutatedCells += rows * spannerSchema.getCellsMutatedPerRow(mutation.getTable()); } } else { // sum the cells of the columns included in the mutation for (String column : mutation.getColumns()) { mutatedCells += spannerSchema.getCellsMutatedPerColumn(mutation.getTable(), column); } } } return mutatedCells; } }
private void encodeKey(OrderedCode orderedCode, Mutation m) { Map<String, Value> mutationMap = mutationAsMap(m); for (SpannerSchema.KeyPart part : schema.getKeyParts(m.getTable())) { Value val = mutationMap.get(part.getField()); if (val.isNull()) {