Skip to content

Commit ab47d35

Browse files
committed
Add snippet for Repeatable Read configuration at client and transaction
level.
1 parent a956f4a commit ab47d35

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

samples/snippets/src/main/java/com/example/spanner/SpannerSample.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@
3232
import com.google.cloud.spanner.KeyRange;
3333
import com.google.cloud.spanner.KeySet;
3434
import com.google.cloud.spanner.Mutation;
35+
import com.google.cloud.spanner.Options;
3536
import com.google.cloud.spanner.ReadOnlyTransaction;
3637
import com.google.cloud.spanner.ResultSet;
3738
import com.google.cloud.spanner.Spanner;
3839
import com.google.cloud.spanner.SpannerBatchUpdateException;
3940
import com.google.cloud.spanner.SpannerException;
4041
import com.google.cloud.spanner.SpannerExceptionFactory;
4142
import com.google.cloud.spanner.SpannerOptions;
43+
import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions;
4244
import com.google.cloud.spanner.Statement;
4345
import com.google.cloud.spanner.Struct;
4446
import com.google.cloud.spanner.TimestampBound;
@@ -71,6 +73,7 @@
7173
import com.google.spanner.admin.database.v1.RestoreDatabaseRequest;
7274
import com.google.spanner.admin.database.v1.RestoreInfo;
7375
import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions;
76+
import com.google.spanner.v1.TransactionOptions.IsolationLevel;
7477
import java.math.BigDecimal;
7578
import java.time.Instant;
7679
import java.time.ZoneId;
@@ -1551,6 +1554,47 @@ static void queryWithQueryOptions(DatabaseClient dbClient) {
15511554
}
15521555
// [END spanner_query_with_query_options]
15531556

1557+
// [START spanner_isolation_level_settings]
1558+
static void isolationLevelSetting(DatabaseId db) {
1559+
// The isolation level specified at the client-level will be applied to all
1560+
// RW transactions.
1561+
DefaultReadWriteTransactionOptions transactionOptions =
1562+
DefaultReadWriteTransactionOptions.newBuilder()
1563+
.setIsolationLevel(IsolationLevel.SERIALIZABLE)
1564+
.build();
1565+
SpannerOptions options =
1566+
SpannerOptions.newBuilder()
1567+
.setDefaultTransactionOptions(transactionOptions)
1568+
.build();
1569+
Spanner spanner = options.getService();
1570+
DatabaseClient dbClient = spanner.getDatabaseClient(db);
1571+
dbClient
1572+
// The isolation level specified at the transaction-level takes precedence
1573+
// over the isolation level configured at the client-level.
1574+
.readWriteTransaction(Options.isolationLevel(IsolationLevel.REPEATABLE_READ))
1575+
.run(transaction -> {
1576+
// Read an AlbumTitle.
1577+
String select_sql =
1578+
"SELECT AlbumTitle from Albums WHERE SingerId = 1 and AlbumId = 1";
1579+
ResultSet resultSet = transaction.executeQuery(Statement.of(select_sql));
1580+
String title = null;
1581+
while (resultSet.next()) {
1582+
title = resultSet.getString("AlbumTitle");
1583+
}
1584+
System.out.printf("Current album title: %s\n", title);
1585+
1586+
// Update the title.
1587+
String update_sql =
1588+
"UPDATE Albums "
1589+
+ "SET AlbumTitle = 'New Album Title' "
1590+
+ "WHERE SingerId = 1 and AlbumId = 1";
1591+
long rowCount = transaction.executeUpdate(Statement.of(update_sql));
1592+
System.out.printf("%d record updated.\n", rowCount);
1593+
return null;
1594+
});
1595+
}
1596+
// [END spanner_isolation_level_settings]
1597+
15541598
// [START spanner_create_backup]
15551599
static void createBackup(DatabaseAdminClient dbAdminClient, String projectId, String instanceId,
15561600
String databaseId, String backupId, Timestamp versionTime) {
@@ -2107,6 +2151,9 @@ static void run(
21072151
case "querywithqueryoptions":
21082152
queryWithQueryOptions(dbClient);
21092153
break;
2154+
case "isolationlevelsettings":
2155+
isolationLevelSetting(database);
2156+
break;
21102157
case "createbackup":
21112158
createBackup(dbAdminClient, database.getInstanceId().getProject(),
21122159
database.getInstanceId().getInstance(), database.getDatabase(),
@@ -2217,6 +2264,7 @@ static void printUsageAndExit() {
22172264
System.err.println(" SpannerExample querywithtimestampparameter my-instance example-db");
22182265
System.err.println(" SpannerExample clientwithqueryoptions my-instance example-db");
22192266
System.err.println(" SpannerExample querywithqueryoptions my-instance example-db");
2267+
System.err.println(" SpannerExample isolationlevelsettings my-instance example-db");
22202268
System.err.println(" SpannerExample createbackup my-instance example-db");
22212269
System.err.println(" SpannerExample listbackups my-instance example-db");
22222270
System.err.println(" SpannerExample listbackupoperations my-instance example-db backup-id");

samples/snippets/src/main/java/com/example/spanner/admin/archived/SpannerSample.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.google.cloud.spanner.SpannerException;
4949
import com.google.cloud.spanner.SpannerExceptionFactory;
5050
import com.google.cloud.spanner.SpannerOptions;
51+
import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions;
5152
import com.google.cloud.spanner.Statement;
5253
import com.google.cloud.spanner.Struct;
5354
import com.google.cloud.spanner.TimestampBound;
@@ -63,6 +64,7 @@
6364
import com.google.spanner.admin.database.v1.RestoreDatabaseMetadata;
6465
import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata;
6566
import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions;
67+
import com.google.spanner.v1.TransactionOptions.IsolationLevel;
6668
import java.math.BigDecimal;
6769
import java.time.Instant;
6870
import java.util.ArrayList;
@@ -1569,6 +1571,47 @@ static void queryWithQueryOptions(DatabaseClient dbClient) {
15691571
}
15701572
// [END spanner_query_with_query_options]
15711573

1574+
// [START spanner_isolation_level_settings]
1575+
static void isolationLevelSetting(DatabaseId db) {
1576+
// The isolation level specified at the client-level will be applied to all
1577+
// RW transactions.
1578+
DefaultReadWriteTransactionOptions transactionOptions =
1579+
DefaultReadWriteTransactionOptions.newBuilder()
1580+
.setIsolationLevel(IsolationLevel.SERIALIZABLE)
1581+
.build();
1582+
SpannerOptions options =
1583+
SpannerOptions.newBuilder()
1584+
.setDefaultTransactionOptions(transactionOptions)
1585+
.build();
1586+
Spanner spanner = options.getService();
1587+
DatabaseClient dbClient = spanner.getDatabaseClient(db);
1588+
dbClient
1589+
// The isolation level specified at the transaction-level takes precedence
1590+
// over the isolation level configured at the client-level.
1591+
.readWriteTransaction(Options.isolationLevel(IsolationLevel.REPEATABLE_READ))
1592+
.run(transaction -> {
1593+
// Read an AlbumTitle.
1594+
String select_sql =
1595+
"SELECT AlbumTitle from Albums WHERE SingerId = 1 and AlbumId = 1";
1596+
ResultSet resultSet = transaction.executeQuery(Statement.of(select_sql));
1597+
String title = null;
1598+
while (resultSet.next()) {
1599+
title = resultSet.getString("AlbumTitle");
1600+
}
1601+
System.out.printf("Current album title: %s\n", title);
1602+
1603+
// Update the title.
1604+
String update_sql =
1605+
"UPDATE Albums "
1606+
+ "SET AlbumTitle = 'New Album Title' "
1607+
+ "WHERE SingerId = 1 and AlbumId = 1";
1608+
long rowCount = transaction.executeUpdate(Statement.of(update_sql));
1609+
System.out.printf("%d record updated.\n", rowCount);
1610+
return null;
1611+
});
1612+
}
1613+
// [END spanner_isolation_level_settings]
1614+
15721615
// [START spanner_create_backup]
15731616
static void createBackup(DatabaseAdminClient dbAdminClient, DatabaseId databaseId,
15741617
BackupId backupId, Timestamp versionTime) {
@@ -2073,6 +2116,9 @@ static void run(
20732116
case "querywithqueryoptions":
20742117
queryWithQueryOptions(dbClient);
20752118
break;
2119+
case "isolationlevelsettings":
2120+
isolationLevelSetting(database);
2121+
break;
20762122
case "createbackup":
20772123
createBackup(dbAdminClient, database, backup, getVersionTime(dbClient));
20782124
break;
@@ -2177,6 +2223,7 @@ static void printUsageAndExit() {
21772223
System.err.println(" SpannerExample querywithtimestampparameter my-instance example-db");
21782224
System.err.println(" SpannerExample clientwithqueryoptions my-instance example-db");
21792225
System.err.println(" SpannerExample querywithqueryoptions my-instance example-db");
2226+
System.err.println(" SpannerExample isolationlevelsettings my-instance example-db");
21802227
System.err.println(" SpannerExample createbackup my-instance example-db");
21812228
System.err.println(" SpannerExample listbackups my-instance example-db");
21822229
System.err.println(" SpannerExample listbackupoperations my-instance example-db backup-id");

0 commit comments

Comments
 (0)