@Override public Void run(TransactionContext transaction) throws Exception { String column = "FirstName"; Struct row = transaction.readRow("Singers", Key.of(singerId), Collections.singleton(column)); String name = row.getString(column); transaction.buffer( Mutation.newUpdateBuilder("Singers").set(column).to(name.toUpperCase()).build()); return null; } });
@Override public Void run(TransactionContext transaction) throws UserException { long rowCount = transaction.executeUpdate(Statement.of(INSERT_DML)); assertThat(rowCount).isEqualTo(DML_COUNT); throw new UserException("failing to commit"); } };
@Override public Long run(TransactionContext transaction) { long rowCount = 0; for (final String stmt : stmts) { ResultSet resultSet = transaction.executeQuery(Statement.of(stmt)); assertThat(resultSet.next()).isFalse(); assertThat(resultSet.getStats()).isNotNull(); rowCount += resultSet.getStats().getRowCountExact(); } return rowCount; } };
@Override public Void run(TransactionContext transaction) { long rowCount = transaction.executeUpdate(Statement.of("UPDATE T SET v = v * 2 WHERE k = 'boo2';")); assertThat(rowCount).isEqualTo(1); assertThat(transaction.readRow("T", Key.of("boo2"), Arrays.asList("v")).getLong(0)) .isEqualTo(2 * 2); return null; } };
@Override public Void run(TransactionContext transaction) { // DML long rowCount = transaction.executeUpdate( Statement.of("INSERT INTO T (k, v) VALUES ('" + key1 + "', 1)")); assertThat(rowCount).isEqualTo(1); // Mutations transaction.buffer( Mutation.newInsertOrUpdateBuilder("T").set("K").to(key2).set("V").to(2).build()); return null; } };
@Override public Void run(TransactionContext transaction) throws UserException { transaction.buffer(Mutation.newInsertOrUpdateBuilder("T").set("K").to(key).build()); throw new UserException("User failure"); } };
@Override public Void run(TransactionContext transaction) throws Exception { // Insert record. String sql = "INSERT INTO Singers (SingerId, FirstName, LastName) " + " VALUES (11, 'Timothy', 'Campbell')"; long rowCount = transaction.executeUpdate(Statement.of(sql)); System.out.printf("%d record inserted.\n", rowCount); // Read newly inserted record. sql = "SELECT FirstName, LastName FROM Singers WHERE SingerId = 11"; ResultSet resultSet = transaction.executeQuery(Statement.of(sql)); while (resultSet.next()) { System.out.printf( "%s %s\n", resultSet.getString("FirstName"), resultSet.getString("LastName")); } return null; } });
@Override public Void run(TransactionContext transaction) { transaction.buffer(Mutation.newInsertOrUpdateBuilder("T").set("K").to(key).build()); throw newSpannerException(ErrorCode.OUT_OF_RANGE, "User failure"); } };
ResultSet resultSet = transaction.executeQuery(Statement.of(sql1)); long album1Budget = 0; while (resultSet.next()) { String sql2 = "SELECT MarketingBudget from Albums WHERE SingerId = 2 and AlbumId = 2"; ResultSet resultSet2 = transaction.executeQuery(Statement.of(sql2)); long album2Budget = 0; while (resultSet.next()) { .to(album1Budget) .build(); transaction.executeUpdate(updateStatement); Statement updateStatement2 = Statement.newBuilder( .to(album2Budget) .build(); transaction.executeUpdate(updateStatement2);
/** Example of using {@link TransactionManager}. */ // [TARGET transactionManager()] // [VARIABLE my_singer_id] public void transactionManager(final long singerId) throws InterruptedException { // [START transactionManager] try (TransactionManager manager = dbClient.transactionManager()) { TransactionContext txn = manager.begin(); while (true) { String column = "FirstName"; Struct row = txn.readRow("Singers", Key.of(singerId), Collections.singleton(column)); String name = row.getString(column); txn.buffer(Mutation.newUpdateBuilder("Singers").set(column).to(name.toUpperCase()).build()); try { manager.commit(); break; } catch (AbortedException e) { Thread.sleep(e.getRetryDelayInMillis() / 1000); txn = manager.resetForRetry(); } } } // [END transactionManager] } }
@Override public Long run(TransactionContext transaction) throws SpannerException { Struct row = strategy.read(transaction, key); long newValue = row.getLong(0) + 1; transaction.buffer( Mutation.newUpdateBuilder("T").set("K").to(key).set("V").to(newValue).build()); commitBarrier.countDown(); // Synchronize so that all threads attempt to commit at the same time. Uninterruptibles.awaitUninterruptibly(commitBarrier); return newValue; } };
@Override public Long run(TransactionContext transaction) { long rowCount = 0; for (String stmt : stmts) { if (throwAbortOnce) { throwAbortOnce = false; throw SpannerExceptionFactory.newSpannerException( ErrorCode.ABORTED, "Abort in test"); } rowCount += transaction.executeUpdate(Statement.of(stmt)); } return rowCount; } };
TransactionManager manager1 = client.transactionManager(); TransactionContext txn1 = manager1.begin(); txn1.readRow("T", Key.of("Key3"), Arrays.asList("K", "BoolValue")); TransactionManager manager2 = client.transactionManager(); TransactionContext txn2 = manager2.begin(); txn2.readRow("T", Key.of("Key3"), Arrays.asList("K", "BoolValue")); txn1.buffer( Mutation.newUpdateBuilder("T").set("K").to("Key3").set("BoolValue").to(false).build()); manager1.commit(); txn2 = manager2.resetForRetry(); txn2.buffer( Mutation.newUpdateBuilder("T").set("K").to("Key3").set("BoolValue").to(true).build()); manager2.commit();
@Test public void rollback() { TransactionManager manager = client.transactionManager(); TransactionContext txn = manager.begin(); txn.buffer( Mutation.newInsertBuilder("T").set("K").to("Key2").set("BoolValue").to(true).build()); manager.rollback(); assertThat(manager.getState()).isEqualTo(TransactionState.ROLLED_BACK); // Row should not have been inserted. assertThat(client.singleUse().readRow("T", Key.of("Key2"), Arrays.asList("K", "BoolValue"))) .isNull(); }
@Override public Void run(TransactionContext transaction) throws Exception { long rowCount = transaction.executeUpdate(s); System.out.printf("%d record updated.\n", rowCount); return null; } });
transaction.readRow("Albums", Key.of(2, 2), Arrays.asList("MarketingBudget")); long album2Budget = row.getLong(0); long album1Budget = transaction .readRow("Albums", Key.of(1, 1), Arrays.asList("MarketingBudget")) .getLong(0); long transfer = 200000; album1Budget += transfer; album2Budget -= transfer; transaction.buffer( Mutation.newUpdateBuilder("Albums") .set("SingerId") .to(album1Budget) .build()); transaction.buffer( Mutation.newUpdateBuilder("Albums") .set("SingerId")
@Test public void simpleInsert() { TransactionManager manager = client.transactionManager(); TransactionContext txn = manager.begin(); assertThat(manager.getState()).isEqualTo(TransactionState.STARTED); txn.buffer( Mutation.newInsertBuilder("T").set("K").to("Key1").set("BoolValue").to(true).build()); manager.commit(); assertThat(manager.getState()).isEqualTo(TransactionState.COMMITTED); Struct row = client.singleUse().readRow("T", Key.of("Key1"), Arrays.asList("K", "BoolValue")); assertThat(row.getString(0)).isEqualTo("Key1"); assertThat(row.getBoolean(1)).isTrue(); }
@Override public Void run(TransactionContext transaction) throws Exception { String sql = "UPDATE Albums " + "SET LastUpdateTime = PENDING_COMMIT_TIMESTAMP() WHERE SingerId = 1"; long rowCount = transaction.executeUpdate(Statement.of(sql)); System.out.printf("%d records updated.\n", rowCount); return null; } });
@Test public void invalidInsert() { TransactionManager manager = client.transactionManager(); TransactionContext txn = manager.begin(); txn.buffer( Mutation.newInsertBuilder("InvalidTable") .set("K") .to("Key1") .set("BoolValue") .to(true) .build()); try { manager.commit(); fail("Expected exception"); } catch (SpannerException e) { // expected } assertThat(manager.getState()).isEqualTo(TransactionState.COMMIT_FAILED); // We cannot retry for non aborted errors. expectedException.expect(IllegalStateException.class); manager.resetForRetry(); }
@Override public Void run(TransactionContext transaction) throws Exception { String sql = "INSERT INTO Singers (SingerId, FirstName, LastName) " + " VALUES (10, 'Virginia', 'Watson')"; long rowCount = transaction.executeUpdate(Statement.of(sql)); System.out.printf("%d record inserted.\n", rowCount); return null; } });