diff --git a/google-cloud-spanner/clirr-ignored-differences.xml b/google-cloud-spanner/clirr-ignored-differences.xml index 12657dd15b1..10017fc8284 100644 --- a/google-cloud-spanner/clirr-ignored-differences.xml +++ b/google-cloud-spanner/clirr-ignored-differences.xml @@ -1033,4 +1033,14 @@ com/google/cloud/spanner/SpannerOptions$SpannerEnvironment boolean isEnableDirectAccess() + + 7012 + com/google/cloud/spanner/connection/Connection + void setReadLockMode(com.google.spanner.v1.TransactionOptions$ReadWrite$ReadLockMode) + + + 7012 + com/google/cloud/spanner/connection/Connection + com.google.spanner.v1.TransactionOptions$ReadWrite$ReadLockMode getReadLockMode() + diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java index 7418c88f68d..57916aae580 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java @@ -34,6 +34,7 @@ import com.google.common.base.Strings; import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.time.Duration; @@ -425,6 +426,36 @@ public TransactionOptions.IsolationLevel convert(String value) { } } + /** + * Converter for converting strings to {@link + * com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode} values. + */ + static class ReadLockModeConverter implements ClientSideStatementValueConverter { + static final ReadLockModeConverter INSTANCE = new ReadLockModeConverter(); + + private final CaseInsensitiveEnumMap values = + new CaseInsensitiveEnumMap<>(ReadLockMode.class); + + ReadLockModeConverter() {} + + /** Constructor needed for reflection. */ + public ReadLockModeConverter(String allowedValues) {} + + @Override + public Class getParameterClass() { + return ReadLockMode.class; + } + + @Override + public ReadLockMode convert(String value) { + if (value != null && value.equalsIgnoreCase("unspecified")) { + // Allow 'unspecified' to be used in addition to 'read_lock_mode_unspecified'. + value = ReadLockMode.READ_LOCK_MODE_UNSPECIFIED.name(); + } + return values.get(value); + } + } + /** Converter for converting strings to {@link AutocommitDmlMode} values. */ static class AutocommitDmlModeConverter implements ClientSideStatementValueConverter { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java index 42720e00bb3..31c9834bd8f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java @@ -43,6 +43,7 @@ import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ResultSetStats; import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.time.Duration; import java.util.Iterator; import java.util.Set; @@ -232,6 +233,12 @@ public interface Connection extends AutoCloseable { /** Returns the default isolation level for read/write transactions for this connection. */ IsolationLevel getDefaultIsolationLevel(); + /** Sets the read lock mode for read/write transactions for this connection. */ + void setReadLockMode(ReadLockMode readLockMode); + + /** Returns the read lock mode for read/write transactions for this connection. */ + ReadLockMode getReadLockMode(); + /** * Sets the duration the connection should wait before automatically aborting the execution of a * statement. The default is no timeout. Statement timeouts are applied all types of statements, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java index d610719caba..8ea1054173a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java @@ -38,6 +38,7 @@ import static com.google.cloud.spanner.connection.ConnectionProperties.OPTIMIZER_STATISTICS_PACKAGE; import static com.google.cloud.spanner.connection.ConnectionProperties.OPTIMIZER_VERSION; import static com.google.cloud.spanner.connection.ConnectionProperties.READONLY; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_LOCK_MODE; import static com.google.cloud.spanner.connection.ConnectionProperties.READ_ONLY_STALENESS; import static com.google.cloud.spanner.connection.ConnectionProperties.RETRY_ABORTS_INTERNALLY; import static com.google.cloud.spanner.connection.ConnectionProperties.RETURN_COMMIT_STATS; @@ -92,6 +93,7 @@ import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; import com.google.spanner.v1.ResultSetStats; import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; @@ -486,6 +488,7 @@ private void reset(Context context, boolean inTransaction) { this.connectionState.resetValue(AUTOCOMMIT, context, inTransaction); this.connectionState.resetValue(READONLY, context, inTransaction); this.connectionState.resetValue(DEFAULT_ISOLATION_LEVEL, context, inTransaction); + this.connectionState.resetValue(READ_LOCK_MODE, context, inTransaction); this.connectionState.resetValue(READ_ONLY_STALENESS, context, inTransaction); this.connectionState.resetValue(OPTIMIZER_VERSION, context, inTransaction); this.connectionState.resetValue(OPTIMIZER_STATISTICS_PACKAGE, context, inTransaction); @@ -668,6 +671,18 @@ private void clearLastTransactionAndSetDefaultTransactionOptions(IsolationLevel this.currentUnitOfWork = null; } + @Override + public void setReadLockMode(ReadLockMode readLockMode) { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + setConnectionPropertyValue(READ_LOCK_MODE, readLockMode); + } + + @Override + public ReadLockMode getReadLockMode() { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + return getConnectionPropertyValue(READ_LOCK_MODE); + } + @Override public void setAutocommitDmlMode(AutocommitDmlMode mode) { Preconditions.checkNotNull(mode); @@ -2255,6 +2270,7 @@ UnitOfWork createNewUnitOfWork( .setUseAutoSavepointsForEmulator(options.useAutoSavepointsForEmulator()) .setDatabaseClient(dbClient) .setIsolationLevel(transactionIsolationLevel) + .setReadLockMode(getConnectionPropertyValue(READ_LOCK_MODE)) .setDelayTransactionStartUntilFirstWrite( getConnectionPropertyValue(DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE)) .setKeepTransactionAlive(getConnectionPropertyValue(KEEP_TRANSACTION_ALIVE)) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java index ac53b800bb5..febccc3a15c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java @@ -115,6 +115,7 @@ import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.IsolationLevelConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.LongConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.NonNegativeIntegerConverter; +import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.ReadLockModeConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.ReadOnlyStalenessConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.RpcPriorityConverter; import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.SavepointSupportConverter; @@ -125,8 +126,10 @@ import com.google.common.collect.ImmutableMap; import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.time.Duration; import java.util.Arrays; +import java.util.stream.Collectors; /** Utility class that defines all known connection properties. */ public class ConnectionProperties { @@ -451,6 +454,38 @@ public class ConnectionProperties { }, IsolationLevelConverter.INSTANCE, Context.USER); + static final ConnectionProperty READ_LOCK_MODE = + create( + "read_lock_mode", + "This option controls the locking behavior for read operations and queries within a" + + " read/write transaction. It works in conjunction with the transaction's isolation" + + " level.\n\n" + + "PESSIMISTIC: Read locks are acquired immediately on read. This mode only applies" + + " to SERIALIZABLE isolation. This mode prevents concurrent modifications by locking" + + " data throughout the transaction. This reduces commit-time aborts due to" + + " conflicts, but can increase how long transactions wait for locks and the overall" + + " contention.\n\n" + + "OPTIMISTIC: Locks for reads within the transaction are not acquired on read." + + " Instead, the locks are acquired on commit to validate that read/queried data has" + + " not changed since the transaction started. If a conflict is detected, the" + + " transaction will fail. This mode only applies to SERIALIZABLE isolation. This" + + " mode defers locking until commit, which can reduce contention and improve" + + " throughput. However, be aware that this increases the risk of transaction aborts" + + " if there's significant write competition on the same data.\n\n" + + "READ_LOCK_MODE_UNSPECIFIED: This is the default if no mode is set. The locking" + + " behavior depends on the isolation level:\n\n" + + "REPEATABLE_READ: Locking semantics default to OPTIMISTIC. However, validation" + + " checks at commit are only performed for queries using SELECT FOR UPDATE," + + " statements with {@code LOCK_SCANNED_RANGES} hints, and DML statements.\n\n" + + "For all other isolation levels: If the read lock mode is not set, it defaults to" + + " PESSIMISTIC locking.", + ReadLockMode.READ_LOCK_MODE_UNSPECIFIED, + Arrays.stream(ReadLockMode.values()) + .filter(mode -> !mode.equals(ReadLockMode.UNRECOGNIZED)) + .collect(Collectors.toList()) + .toArray(new ReadLockMode[0]), + ReadLockModeConverter.INSTANCE, + Context.USER); static final ConnectionProperty AUTOCOMMIT_DML_MODE = create( "autocommit_dml_mode", diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java index b8f4676fa76..e8872a48f26 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java @@ -23,6 +23,7 @@ import com.google.cloud.spanner.connection.PgTransactionMode.IsolationLevel; import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.time.Duration; /** @@ -190,4 +191,8 @@ StatementResult statementSetPgSessionCharacteristicsTransactionMode( StatementResult statementSetAutoBatchDmlUpdateCountVerification(Boolean verification); StatementResult statementShowAutoBatchDmlUpdateCountVerification(); + + StatementResult statementSetReadLockMode(ReadLockMode readLockMode); + + StatementResult statementShowReadLockMode(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java index ae88bcc6ffe..0cce7490776 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java @@ -43,6 +43,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_PROTO_DESCRIPTORS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_PROTO_DESCRIPTORS_FILE_PATH; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_READONLY; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_READ_LOCK_MODE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_READ_ONLY_STALENESS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_RETRY_ABORTS_INTERNALLY; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_RETURN_COMMIT_STATS; @@ -73,6 +74,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_PROTO_DESCRIPTORS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_PROTO_DESCRIPTORS_FILE_PATH; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_READONLY; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_READ_LOCK_MODE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_READ_ONLY_STALENESS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_READ_TIMESTAMP; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_RETRY_ABORTS_INTERNALLY; @@ -113,6 +115,7 @@ import com.google.spanner.v1.QueryPlan; import com.google.spanner.v1.RequestOptions; import com.google.spanner.v1.TransactionOptions; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.time.Duration; import java.util.ArrayList; import java.util.Collections; @@ -607,6 +610,20 @@ public StatementResult statementShowSavepointSupport() { SHOW_SAVEPOINT_SUPPORT); } + @Override + public StatementResult statementSetReadLockMode(ReadLockMode readLockMode) { + getConnection().setReadLockMode(readLockMode); + return noResult(SET_READ_LOCK_MODE); + } + + @Override + public StatementResult statementShowReadLockMode() { + return resultSet( + String.format("%sREAD_LOCK_MODE", getNamespace(connection.getDialect())), + getConnection().getReadLockMode(), + SHOW_READ_LOCK_MODE); + } + @Override public StatementResult statementShowTransactionIsolationLevel() { return resultSet("transaction_isolation", "serializable", SHOW_TRANSACTION_ISOLATION_LEVEL); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java index 19e9d8e61c9..741e8e463b3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java @@ -61,6 +61,7 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.spanner.v1.SpannerGrpc; import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.context.Scope; import java.time.Duration; @@ -155,6 +156,7 @@ class ReadWriteTransaction extends AbstractMultiUseTransaction { private final ReentrantLock keepAliveLock; private final SavepointSupport savepointSupport; @Nonnull private final IsolationLevel isolationLevel; + private final ReadLockMode readLockMode; private int transactionRetryAttempts; private int successfulRetries; private volatile ApiFuture txContextFuture; @@ -207,6 +209,7 @@ static class Builder extends AbstractMultiUseTransaction.Builder data() { + List result = new ArrayList<>(); + for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + result.add(new Object[] {isolationLevel, readLockMode}); + } + } + return result; } @Override @@ -50,7 +66,8 @@ protected ITConnection createConnection() { return createConnection( Collections.emptyList(), Collections.emptyList(), - String.format(";default_isolation_level=%s", isolationLevel)); + String.format( + ";default_isolation_level=%s;read_lock_mode=%s", isolationLevel, readLockMode)); } @Test @@ -59,6 +76,8 @@ public void testQuery() { connection.setAutocommit(true); //noinspection EmptyTryBlock try (ResultSet ignore = connection.executeQuery(SELECT1_STATEMENT)) {} + try (ResultSet ignore = + connection.executeQuery(Statement.of("SHOW VARIABLE READ_LOCK_MODE"))) {} } assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); @@ -81,6 +100,8 @@ public void testDml() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertTrue(request.getLastStatement()); assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); } @@ -97,6 +118,8 @@ public void testDmlReturning() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertTrue(request.getLastStatement()); assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); } @@ -116,6 +139,8 @@ public void testBatchDml() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertTrue(request.getLastStatements()); assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); } @@ -152,6 +177,8 @@ public void testDmlAborted() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertTrue(request.getLastStatement()); } assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); @@ -170,6 +197,8 @@ public void testDmlReturningAborted() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertTrue(request.getLastStatement()); } assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); @@ -191,6 +220,8 @@ public void testBatchDmlAborted() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertTrue(request.getLastStatements()); } assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RunTransactionMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RunTransactionMockServerTest.java index 9d4d7f65bf7..bc0acca3255 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RunTransactionMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RunTransactionMockServerTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.connection; import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_ISOLATION_LEVEL; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_LOCK_MODE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThrows; @@ -26,11 +27,13 @@ import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.SpannerException; +import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.ExecuteSqlRequest; import com.google.spanner.v1.RollbackRequest; import com.google.spanner.v1.TransactionOptions; import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import io.grpc.Status; import java.util.concurrent.atomic.AtomicInteger; import org.junit.Test; @@ -43,46 +46,62 @@ public class RunTransactionMockServerTest extends AbstractMockServerTest { @Test public void testRunTransaction() { for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { - try (Connection connection = createConnection()) { - connection.setDefaultIsolationLevel(isolationLevel); - connection.runTransaction( - transaction -> { - assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); - assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); - return null; - }); - } - assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); - TransactionOptions transactionOptions = - mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0).getTransaction().getBegin(); - assertEquals(isolationLevel, transactionOptions.getIsolationLevel()); + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + try (Connection connection = createConnection()) { + connection.setDefaultIsolationLevel(isolationLevel); + connection.setReadLockMode(readLockMode); + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + return null; + }); + } + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + TransactionOptions transactionOptions = + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getTransaction() + .getBegin(); + assertEquals(isolationLevel, transactionOptions.getIsolationLevel()); + assertEquals(readLockMode, transactionOptions.getReadWrite().getReadLockMode()); - mockSpanner.clearRequests(); + mockSpanner.clearRequests(); + } } } @Test public void testRunTransactionInAutoCommit() { for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { - try (Connection connection = createConnection()) { - connection.setAutocommit(true); - connection.setDefaultIsolationLevel(isolationLevel); - - connection.runTransaction( - transaction -> { - assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); - assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); - return null; - }); - } - assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); - TransactionOptions transactionOptions = - mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0).getTransaction().getBegin(); - assertEquals(isolationLevel, transactionOptions.getIsolationLevel()); + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + connection.setDefaultIsolationLevel(isolationLevel); + connection.setReadLockMode(readLockMode); - mockSpanner.clearRequests(); + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + return null; + }); + } + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + TransactionOptions transactionOptions = + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getTransaction() + .getBegin(); + assertEquals(isolationLevel, transactionOptions.getIsolationLevel()); + assertEquals(readLockMode, transactionOptions.getReadWrite().getReadLockMode()); + + mockSpanner.clearRequests(); + } } } @@ -141,21 +160,39 @@ public void testRunTransaction_rollbacksAfterException() { @Test public void testRunTransactionCommitAborted() { - final AtomicInteger attempts = new AtomicInteger(); - try (Connection connection = createConnection()) { - connection.runTransaction( - transaction -> { - assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); - assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); - if (attempts.incrementAndGet() == 1) { - mockSpanner.abortNextStatement(); - } - return null; - }); + for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + final AtomicInteger attempts = new AtomicInteger(); + try (Connection connection = createConnection()) { + connection.setDefaultIsolationLevel(isolationLevel); + connection.setReadLockMode(readLockMode); + connection.runTransaction( + transaction -> { + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + assertEquals(1L, transaction.executeUpdate(INSERT_STATEMENT)); + if (attempts.incrementAndGet() == 1) { + mockSpanner.abortNextStatement(); + } + return null; + }); + } + assertEquals(2, attempts.get()); + assertEquals(4, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + + for (int i : new int[] {0, 2}) { + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(i); + assertTrue(request.hasTransaction()); + assertTrue(request.getTransaction().hasBegin()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + } + + mockSpanner.clearRequests(); + } } - assertEquals(2, attempts.get()); - assertEquals(4, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - assertEquals(2, mockSpanner.countRequestsOfType(CommitRequest.class)); } @Test diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionMockServerTest.java index 9f809dea4e4..c693781ab25 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionMockServerTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner.connection; import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_ISOLATION_LEVEL; +import static com.google.cloud.spanner.connection.ConnectionProperties.READ_LOCK_MODE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -30,7 +31,11 @@ import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ExecuteSqlRequest; import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -40,11 +45,21 @@ @RunWith(Parameterized.class) public class TransactionMockServerTest extends AbstractMockServerTest { - @Parameter public IsolationLevel isolationLevel; + @Parameter(0) + public IsolationLevel isolationLevel; - @Parameters(name = "isolationLevel = {0}") - public static Object[] data() { - return DEFAULT_ISOLATION_LEVEL.getValidValues(); + @Parameter(1) + public ReadLockMode readLockMode; + + @Parameters(name = "isolationLevel = {0}, readLockMode = {1}") + public static Collection data() { + List result = new ArrayList<>(); + for (IsolationLevel isolationLevel : DEFAULT_ISOLATION_LEVEL.getValidValues()) { + for (ReadLockMode readLockMode : READ_LOCK_MODE.getValidValues()) { + result.add(new Object[] {isolationLevel, readLockMode}); + } + } + return result; } @Override @@ -52,7 +67,8 @@ protected ITConnection createConnection() { return createConnection( Collections.emptyList(), Collections.emptyList(), - String.format(";default_isolation_level=%s", isolationLevel)); + String.format( + ";default_isolation_level=%s;read_lock_mode=%s", isolationLevel, readLockMode)); } @Test @@ -67,6 +83,8 @@ public void testQuery() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertFalse(request.getLastStatement()); assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); } @@ -82,6 +100,8 @@ public void testDml() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertFalse(request.getLastStatement()); assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); } @@ -98,6 +118,8 @@ public void testDmlReturning() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertFalse(request.getLastStatement()); assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); } @@ -117,6 +139,8 @@ public void testBatchDml() { assertTrue(request.getTransaction().hasBegin()); assertTrue(request.getTransaction().getBegin().hasReadWrite()); assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); assertFalse(request.getLastStatements()); assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); } @@ -131,28 +155,41 @@ public void testBeginTransactionIsolationLevel() { try (Connection connection = super.createConnection()) { for (IsolationLevel isolationLevel : new IsolationLevel[] {IsolationLevel.REPEATABLE_READ, IsolationLevel.SERIALIZABLE}) { - for (boolean useSql : new boolean[] {true, false}) { - if (useSql) { - connection.execute( - Statement.of( - "begin transaction isolation level " - + isolationLevel.name().replace("_", " "))); - } else { - connection.beginTransaction(isolationLevel); + for (ReadLockMode readLockMode : + new ReadLockMode[] {ReadLockMode.PESSIMISTIC, ReadLockMode.OPTIMISTIC}) { + for (boolean useSql : new boolean[] {true, false}) { + if (useSql) { + connection.execute( + Statement.of( + "begin transaction isolation level " + + isolationLevel.name().replace("_", " "))); + } else { + connection.beginTransaction(isolationLevel); + } + if (dialect == Dialect.POSTGRESQL) { + connection.execute( + Statement.of("set spanner.read_lock_mode = '" + readLockMode.name() + "'")); + } else { + connection.execute( + Statement.of("set read_lock_mode = '" + readLockMode.name() + "'")); + } + connection.executeUpdate(INSERT_STATEMENT); + connection.commit(); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = + mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, + request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertFalse(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + + mockSpanner.clearRequests(); } - connection.executeUpdate(INSERT_STATEMENT); - connection.commit(); - - assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - ExecuteSqlRequest request = - mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); - assertTrue(request.getTransaction().hasBegin()); - assertTrue(request.getTransaction().getBegin().hasReadWrite()); - assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); - assertFalse(request.getLastStatement()); - assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); - - mockSpanner.clearRequests(); } } } @@ -172,25 +209,33 @@ public void testSetTransactionIsolationLevel() { for (IsolationLevel isolationLevel : new IsolationLevel[] {IsolationLevel.REPEATABLE_READ, IsolationLevel.SERIALIZABLE}) { - // Manually start a transaction if autocommit is enabled. - if (autocommit) { - connection.execute(Statement.of("begin")); + for (ReadLockMode readLockMode : + new ReadLockMode[] {ReadLockMode.OPTIMISTIC, ReadLockMode.PESSIMISTIC}) { + // Manually start a transaction if autocommit is enabled. + if (autocommit) { + connection.execute(Statement.of("begin")); + } + connection.execute( + Statement.of( + "set transaction isolation level " + isolationLevel.name().replace("_", " "))); + connection.execute( + Statement.of("set spanner.read_lock_mode = '" + readLockMode.name() + "'")); + connection.executeUpdate(INSERT_STATEMENT); + connection.commit(); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = + mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertTrue(request.getTransaction().hasBegin()); + assertTrue(request.getTransaction().getBegin().hasReadWrite()); + assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); + assertEquals( + readLockMode, request.getTransaction().getBegin().getReadWrite().getReadLockMode()); + assertFalse(request.getLastStatement()); + assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + + mockSpanner.clearRequests(); } - connection.execute( - Statement.of( - "set transaction isolation level " + isolationLevel.name().replace("_", " "))); - connection.executeUpdate(INSERT_STATEMENT); - connection.commit(); - - assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); - ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); - assertTrue(request.getTransaction().hasBegin()); - assertTrue(request.getTransaction().getBegin().hasReadWrite()); - assertEquals(isolationLevel, request.getTransaction().getBegin().getIsolationLevel()); - assertFalse(request.getLastStatement()); - assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); - - mockSpanner.clearRequests(); } } } diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql index 957a28067ca..5f392e8d093 100644 --- a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql @@ -28077,6 +28077,799 @@ NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT set auto_batch_dml_update_count_verification =/-false; NEW_CONNECTION; +show variable read_lock_mode; +NEW_CONNECTION; +SHOW VARIABLE READ_LOCK_MODE; +NEW_CONNECTION; +show variable read_lock_mode; +NEW_CONNECTION; + show variable read_lock_mode; +NEW_CONNECTION; + show variable read_lock_mode; +NEW_CONNECTION; + + + +show variable read_lock_mode; +NEW_CONNECTION; +show variable read_lock_mode ; +NEW_CONNECTION; +show variable read_lock_mode ; +NEW_CONNECTION; +show variable read_lock_mode + +; +NEW_CONNECTION; +show variable read_lock_mode; +NEW_CONNECTION; +show variable read_lock_mode; +NEW_CONNECTION; +show +variable +read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable read_lock_mode/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-read_lock_mode; +NEW_CONNECTION; +set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +SET READ_LOCK_MODE='OPTIMISTIC'; +NEW_CONNECTION; +set read_lock_mode='optimistic'; +NEW_CONNECTION; + set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; + set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; + + + +set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +set read_lock_mode='OPTIMISTIC' ; +NEW_CONNECTION; +set read_lock_mode='OPTIMISTIC' ; +NEW_CONNECTION; +set read_lock_mode='OPTIMISTIC' + +; +NEW_CONNECTION; +set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +set +read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='OPTIMISTIC'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +SET READ_LOCK_MODE='PESSIMISTIC'; +NEW_CONNECTION; +set read_lock_mode='pessimistic'; +NEW_CONNECTION; + set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; + set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; + + + +set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +set read_lock_mode='PESSIMISTIC' ; +NEW_CONNECTION; +set read_lock_mode='PESSIMISTIC' ; +NEW_CONNECTION; +set read_lock_mode='PESSIMISTIC' + +; +NEW_CONNECTION; +set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +set +read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='PESSIMISTIC'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +SET READ_LOCK_MODE='UNSPECIFIED'; +NEW_CONNECTION; +set read_lock_mode='unspecified'; +NEW_CONNECTION; + set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; + set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; + + + +set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +set read_lock_mode='UNSPECIFIED' ; +NEW_CONNECTION; +set read_lock_mode='UNSPECIFIED' ; +NEW_CONNECTION; +set read_lock_mode='UNSPECIFIED' + +; +NEW_CONNECTION; +set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +set +read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set read_lock_mode='UNSPECIFIED'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; show variable data_boost_enabled; NEW_CONNECTION; SHOW VARIABLE DATA_BOOST_ENABLED; diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.sql index d79dd8bf6f5..126762551fd 100644 --- a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.sql +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.sql @@ -160,15 +160,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:38.900000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:38.900000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:35.964000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:35.964000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:38.900000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:35.964000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -506,15 +506,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.005000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.005000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.072000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.072000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.005000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.072000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -942,8 +942,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.100000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.100000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.160000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.160000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -953,7 +953,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.100000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.160000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1450,8 +1450,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.195000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.195000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.291000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.291000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -1461,7 +1461,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.195000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.291000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1860,15 +1860,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.290000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.290000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.360000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.360000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.290000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.360000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2223,14 +2223,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.365000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.425000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.365000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.425000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2576,13 +2576,13 @@ SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.444000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.497000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.444000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.497000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2882,14 +2882,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.539000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.539000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.562000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.562000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.539000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.562000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -3213,15 +3213,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.630000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.630000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.631000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.631000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.630000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.631000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -3626,8 +3626,8 @@ SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); RUN BATCH; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.702000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.702000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.697000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.697000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -3636,7 +3636,7 @@ START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); RUN BATCH; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.702000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.697000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4041,14 +4041,14 @@ SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.767000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.759000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.767000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.759000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4394,13 +4394,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.826000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.807000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.826000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.807000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4829,8 +4829,8 @@ SET TRANSACTION READ ONLY; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.888000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.888000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.862000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.862000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -4840,7 +4840,7 @@ SET TRANSACTION READ ONLY; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.888000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.862000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5236,15 +5236,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.960000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.960000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.921000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.921000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.960000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.921000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5585,15 +5585,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.018000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.018000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.968000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.968000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.018000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.968000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6028,8 +6028,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.091000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.091000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.021000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.021000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -6039,7 +6039,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.091000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.021000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6543,8 +6543,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.166000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.166000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.091000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.091000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -6554,7 +6554,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.166000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.091000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6955,15 +6955,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.255000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.255000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.160000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.160000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.255000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.160000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7322,14 +7322,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.372000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.211000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.372000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.211000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7680,13 +7680,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.441000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.267000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.441000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.267000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7995,14 +7995,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.535000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.535000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.323000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.323000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.535000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.323000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -8308,13 +8308,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.592000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.369000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.592000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.369000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -8665,8 +8665,8 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.651000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.651000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.414000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.414000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -8674,7 +8674,7 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.651000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.414000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9108,8 +9108,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.713000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.713000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.464000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.464000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -9117,8 +9117,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.713000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:40.713000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.464000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.464000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -9500,15 +9500,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.781000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.781000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.517000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.517000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.781000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.517000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9858,15 +9858,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.843000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.843000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.567000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.567000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.843000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:40.843000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.567000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.567000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -10225,15 +10225,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.905000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.905000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.618000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.618000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.905000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:40.905000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.618000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.618000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -10622,16 +10622,16 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.964000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.964000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.670000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.670000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.964000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:40.964000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.670000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.670000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11013,15 +11013,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.022000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.022000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.722000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.722000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.022000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.022000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.722000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.722000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11350,14 +11350,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.080000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.080000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.772000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.772000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.080000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.080000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.772000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.772000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11676,15 +11676,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.139000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.139000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.817000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.817000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.139000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.139000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.817000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.817000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -12087,8 +12087,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.195000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.195000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.864000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.864000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -12096,8 +12096,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.195000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.195000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.864000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.864000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -12476,15 +12476,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.253000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.253000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.914000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.914000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.253000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.914000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; @@ -12818,15 +12818,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.307000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.307000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.959000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.959000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.307000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.307000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.959000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.959000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -13169,15 +13169,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.364000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.364000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:38.009000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:38.009000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.364000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.364000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:38.009000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:38.009000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -13490,14 +13490,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.418000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.418000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:38.055000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:38.055000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.418000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.418000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:38.055000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:38.055000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql index 04b2c5286e0..504c9efdebe 100644 --- a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql @@ -8358,6 +8358,403 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable/-spanner.savepoint_support; NEW_CONNECTION; +show spanner.read_lock_mode; +NEW_CONNECTION; +SHOW SPANNER.READ_LOCK_MODE; +NEW_CONNECTION; +show spanner.read_lock_mode; +NEW_CONNECTION; + show spanner.read_lock_mode; +NEW_CONNECTION; + show spanner.read_lock_mode; +NEW_CONNECTION; + + + +show spanner.read_lock_mode; +NEW_CONNECTION; +show spanner.read_lock_mode ; +NEW_CONNECTION; +show spanner.read_lock_mode ; +NEW_CONNECTION; +show spanner.read_lock_mode + +; +NEW_CONNECTION; +show spanner.read_lock_mode; +NEW_CONNECTION; +show spanner.read_lock_mode; +NEW_CONNECTION; +show +spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show%spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show_spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show&spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show$spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show@spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show!spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show*spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show(spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show)spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show+spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-#spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show\spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show?spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show-/spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/#spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.read_lock_mode/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show/-spanner.read_lock_mode; +NEW_CONNECTION; +show variable spanner.read_lock_mode; +NEW_CONNECTION; +SHOW VARIABLE SPANNER.READ_LOCK_MODE; +NEW_CONNECTION; +show variable spanner.read_lock_mode; +NEW_CONNECTION; + show variable spanner.read_lock_mode; +NEW_CONNECTION; + show variable spanner.read_lock_mode; +NEW_CONNECTION; + + + +show variable spanner.read_lock_mode; +NEW_CONNECTION; +show variable spanner.read_lock_mode ; +NEW_CONNECTION; +show variable spanner.read_lock_mode ; +NEW_CONNECTION; +show variable spanner.read_lock_mode + +; +NEW_CONNECTION; +show variable spanner.read_lock_mode; +NEW_CONNECTION; +show variable spanner.read_lock_mode; +NEW_CONNECTION; +show +variable +spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable spanner.read_lock_mode; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.read_lock_mode/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-spanner.read_lock_mode; +NEW_CONNECTION; show spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; SHOW SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; @@ -88209,6 +88606,1200 @@ NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT set spanner.savepoint_support to/-'DISABLED'; NEW_CONNECTION; +set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +SET SPANNER.READ_LOCK_MODE='OPTIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode='optimistic'; +NEW_CONNECTION; + set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; + set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; + + + +set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode='OPTIMISTIC' ; +NEW_CONNECTION; +set spanner.read_lock_mode='OPTIMISTIC' ; +NEW_CONNECTION; +set spanner.read_lock_mode='OPTIMISTIC' + +; +NEW_CONNECTION; +set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +set +spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='OPTIMISTIC'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-spanner.read_lock_mode='OPTIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +SET SPANNER.READ_LOCK_MODE='PESSIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode='pessimistic'; +NEW_CONNECTION; + set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; + set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; + + + +set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode='PESSIMISTIC' ; +NEW_CONNECTION; +set spanner.read_lock_mode='PESSIMISTIC' ; +NEW_CONNECTION; +set spanner.read_lock_mode='PESSIMISTIC' + +; +NEW_CONNECTION; +set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +set +spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='PESSIMISTIC'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-spanner.read_lock_mode='PESSIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +SET SPANNER.READ_LOCK_MODE='UNSPECIFIED'; +NEW_CONNECTION; +set spanner.read_lock_mode='unspecified'; +NEW_CONNECTION; + set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; + set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; + + + +set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +set spanner.read_lock_mode='UNSPECIFIED' ; +NEW_CONNECTION; +set spanner.read_lock_mode='UNSPECIFIED' ; +NEW_CONNECTION; +set spanner.read_lock_mode='UNSPECIFIED' + +; +NEW_CONNECTION; +set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +set +spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode='UNSPECIFIED'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-spanner.read_lock_mode='UNSPECIFIED'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +SET SPANNER.READ_LOCK_MODE TO 'OPTIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'optimistic'; +NEW_CONNECTION; + set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; + set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; + + + +set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'OPTIMISTIC' ; +NEW_CONNECTION; +set spanner.read_lock_mode to 'OPTIMISTIC' ; +NEW_CONNECTION; +set spanner.read_lock_mode to 'OPTIMISTIC' + +; +NEW_CONNECTION; +set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +set +spanner.read_lock_mode +to +'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to%'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to_'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to&'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to$'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to@'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to!'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to*'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to('OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to)'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to+'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-#'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to\'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to?'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-/'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/#'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.read_lock_mode to 'OPTIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'OPTIMISTIC'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/-'OPTIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +SET SPANNER.READ_LOCK_MODE TO 'PESSIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'pessimistic'; +NEW_CONNECTION; + set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; + set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; + + + +set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'PESSIMISTIC' ; +NEW_CONNECTION; +set spanner.read_lock_mode to 'PESSIMISTIC' ; +NEW_CONNECTION; +set spanner.read_lock_mode to 'PESSIMISTIC' + +; +NEW_CONNECTION; +set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +set +spanner.read_lock_mode +to +'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to%'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to_'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to&'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to$'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to@'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to!'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to*'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to('PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to)'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to+'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-#'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to\'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to?'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-/'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/#'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.read_lock_mode to 'PESSIMISTIC'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'PESSIMISTIC'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/-'PESSIMISTIC'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +SET SPANNER.READ_LOCK_MODE TO 'UNSPECIFIED'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'unspecified'; +NEW_CONNECTION; + set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; + set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; + + + +set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'UNSPECIFIED' ; +NEW_CONNECTION; +set spanner.read_lock_mode to 'UNSPECIFIED' ; +NEW_CONNECTION; +set spanner.read_lock_mode to 'UNSPECIFIED' + +; +NEW_CONNECTION; +set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +set +spanner.read_lock_mode +to +'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to%'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to_'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to&'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to$'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to@'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to!'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to*'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to('UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to)'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to+'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-#'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to\'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to?'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to-/'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/#'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.read_lock_mode to 'UNSPECIFIED'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to 'UNSPECIFIED'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.read_lock_mode to/-'UNSPECIFIED'; +NEW_CONNECTION; set spanner.delay_transaction_start_until_first_write = true; NEW_CONNECTION; SET SPANNER.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = TRUE; diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql index 91c4ac3f394..b9dc9245164 100644 --- a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql +++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql @@ -160,15 +160,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:38.957000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:38.957000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.024000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.024000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:38.957000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.024000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -506,15 +506,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.052000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.052000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.115000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.115000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s'; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.052000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.115000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -942,8 +942,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.148000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.148000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.243000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.243000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -953,7 +953,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.148000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.243000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1450,8 +1450,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.239000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.239000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.328000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.328000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -1461,7 +1461,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.239000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.328000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1860,15 +1860,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.327000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.327000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.390000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.390000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.327000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.390000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2223,14 +2223,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.406000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.457000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.406000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.457000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2576,13 +2576,13 @@ SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.494000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.531000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.494000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.531000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2882,14 +2882,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.573000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.573000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.588000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.588000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.573000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.588000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -3213,15 +3213,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.666000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.666000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.661000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.661000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.666000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.661000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -3626,8 +3626,8 @@ SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); RUN BATCH; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.736000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.736000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.733000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.733000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -3636,7 +3636,7 @@ START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); RUN BATCH; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.736000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.733000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4041,14 +4041,14 @@ SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.798000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.783000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.798000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.783000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4394,13 +4394,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.854000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.833000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.854000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.833000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4829,8 +4829,8 @@ SET TRANSACTION READ ONLY; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.926000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.926000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.892000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.892000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -4840,7 +4840,7 @@ SET TRANSACTION READ ONLY; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.926000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.892000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5236,15 +5236,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:39.987000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:39.987000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.944000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.944000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:39.987000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.944000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5585,15 +5585,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.054000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.054000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:36.993000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:36.993000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s'; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.054000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:36.993000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6028,8 +6028,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.126000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.126000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.052000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.052000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -6039,7 +6039,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.126000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.052000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6543,8 +6543,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.209000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.209000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.133000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.133000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -6554,7 +6554,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.209000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.133000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6955,15 +6955,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.323000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.323000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.185000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.185000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.323000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.185000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7322,14 +7322,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.407000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.239000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.407000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.239000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7680,13 +7680,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.473000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.297000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.473000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.297000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7995,14 +7995,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.565000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.565000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.346000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.346000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.565000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.346000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -8308,13 +8308,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.621000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.391000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.621000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.391000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -8665,8 +8665,8 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.678000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.678000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.436000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.436000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -8674,7 +8674,7 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.678000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.436000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9108,8 +9108,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.749000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.749000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.492000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.492000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -9117,8 +9117,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.749000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:40.749000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.492000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.492000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -9500,15 +9500,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.812000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.812000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.541000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.541000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.812000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.541000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9858,15 +9858,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.876000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.876000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.592000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.592000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id); -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.876000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:40.876000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.592000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.592000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -10225,15 +10225,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.934000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.934000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.645000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.645000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.934000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:40.934000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.645000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.645000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -10622,16 +10622,16 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:40.992000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:40.992000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.696000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.696000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:40.992000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:40.992000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.696000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.696000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11013,15 +11013,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.052000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.052000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.747000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.747000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.052000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.052000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.747000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.747000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11350,14 +11350,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.108000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.108000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.794000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.794000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.108000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.108000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.794000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.794000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11676,15 +11676,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.166000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.166000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.840000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.840000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.166000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.166000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.840000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.840000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -12087,8 +12087,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.226000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.226000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.890000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.890000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -12096,8 +12096,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.226000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.226000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.890000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.890000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -12476,15 +12476,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.279000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.279000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.936000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.936000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.279000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.936000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; @@ -12818,15 +12818,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.336000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.336000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:37.984000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:37.984000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.336000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.336000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:37.984000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:37.984000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -13169,15 +13169,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.392000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.392000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:38.033000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:38.033000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.392000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.392000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:38.033000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:38.033000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -13490,14 +13490,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-06-12T08:45:41.442000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-06-12T08:45:41.442000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2025-09-03T15:23:38.077000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2025-09-03T15:23:38.077000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-06-12T08:45:41.442000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-06-12T08:45:41.442000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2025-09-03T15:23:38.077000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2025-09-03T15:23:38.077000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE;