From 46a5c2b0f622e3e497b7f83151b7e4c456bb94b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Mon, 10 Jun 2024 08:32:17 +0200 Subject: [PATCH] chore: add property for keep-transaction-alive Adds a property to the Connection API for keeping read/write transactions alive. This can be used in CLI-like applications that might wait a longer period of time for user input. The property is disabled by default, as enabling it can cause read/write transactions to hold on to locks for a longer period of time than intended. Updates https://github.com/GoogleCloudPlatform/pgadapter/issues/1826 --- .../clirr-ignored-differences.xml | 12 + .../cloud/spanner/connection/Connection.java | 19 + .../spanner/connection/ConnectionImpl.java | 17 + .../spanner/connection/ConnectionOptions.java | 37 + .../ConnectionStatementExecutor.java | 4 + .../ConnectionStatementExecutorImpl.java | 16 + .../connection/ReadWriteTransaction.java | 158 ++- .../spanner/connection/StatementResult.java | 2 + .../connection/ClientSideStatements.json | 24 + .../connection/PG_ClientSideStatements.json | 24 + .../spanner/connection/ConnectionTest.java | 5 + .../connection/SavepointMockServerTest.java | 77 ++ .../connection/ClientSideStatementsTest.sql | 599 +++++++++ .../ConnectionImplGeneratedSqlScriptTest.sql | 224 +-- .../postgresql/ClientSideStatementsTest.sql | 1197 +++++++++++++++++ .../ConnectionImplGeneratedSqlScriptTest.sql | 224 +-- 16 files changed, 2373 insertions(+), 266 deletions(-) diff --git a/google-cloud-spanner/clirr-ignored-differences.xml b/google-cloud-spanner/clirr-ignored-differences.xml index d7ce1c4f947..9433fcba5ad 100644 --- a/google-cloud-spanner/clirr-ignored-differences.xml +++ b/google-cloud-spanner/clirr-ignored-differences.xml @@ -732,4 +732,16 @@ com/google/cloud/spanner/connection/Connection void reset() + + + + 7012 + com/google/cloud/spanner/connection/Connection + void setKeepTransactionAlive(boolean) + + + 7012 + com/google/cloud/spanner/connection/Connection + boolean isKeepTransactionAlive() + 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 59c0d6ce16a..b2d4caa9df8 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 @@ -666,6 +666,25 @@ default boolean isDelayTransactionStartUntilFirstWrite() { throw new UnsupportedOperationException("Unimplemented"); } + /** + * Sets whether this connection should keep read/write transactions alive by executing a SELECT 1 + * once every 10 seconds during inactive read/write transactions. + * + *

NOTE: This will keep read/write transactions alive and hold on to locks until it is + * explicitly committed or rolled back. + */ + default void setKeepTransactionAlive(boolean keepTransactionAlive) { + throw new UnsupportedOperationException("Unimplemented"); + } + + /** + * @return true if this connection keeps read/write transactions alive by executing a SELECT 1 + * once every 10 seconds during inactive read/write transactions. + */ + default boolean isKeepTransactionAlive() { + throw new UnsupportedOperationException("Unimplemented"); + } + /** * Commits the current transaction of this connection. All mutations that have been buffered * during the current transaction will be written to the database. 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 745188c17fb..e0eee23e67c 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 @@ -220,6 +220,7 @@ static UnitOfWorkType of(TransactionMode transactionMode) { private boolean readOnly; private boolean returnCommitStats; private boolean delayTransactionStartUntilFirstWrite; + private boolean keepTransactionAlive; private UnitOfWork currentUnitOfWork = null; /** @@ -439,6 +440,7 @@ public void reset() { this.ddlInTransactionMode = options.getDdlInTransactionMode(); this.returnCommitStats = options.isReturnCommitStats(); this.delayTransactionStartUntilFirstWrite = options.isDelayTransactionStartUntilFirstWrite(); + this.keepTransactionAlive = options.isKeepTransactionAlive(); this.dataBoostEnabled = options.isDataBoostEnabled(); this.autoPartitionMode = options.isAutoPartitionMode(); this.maxPartitions = options.getMaxPartitions(); @@ -988,6 +990,20 @@ public boolean isDelayTransactionStartUntilFirstWrite() { return this.delayTransactionStartUntilFirstWrite; } + @Override + public void setKeepTransactionAlive(boolean keepTransactionAlive) { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + ConnectionPreconditions.checkState( + !isTransactionStarted(), "Cannot set KeepTransactionAlive while a transaction is active"); + this.keepTransactionAlive = keepTransactionAlive; + } + + @Override + public boolean isKeepTransactionAlive() { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + return this.keepTransactionAlive; + } + /** Resets this connection to its default transaction options. */ private void setDefaultTransactionOptions() { if (transactionStack.isEmpty()) { @@ -1909,6 +1925,7 @@ UnitOfWork createNewUnitOfWork( .setUseAutoSavepointsForEmulator(options.useAutoSavepointsForEmulator()) .setDatabaseClient(dbClient) .setDelayTransactionStartUntilFirstWrite(delayTransactionStartUntilFirstWrite) + .setKeepTransactionAlive(keepTransactionAlive) .setRetryAbortsInternally(retryAbortsInternally) .setSavepointSupport(savepointSupport) .setReturnCommitStats(returnCommitStats) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java index 24b2f64bd85..27f77710cac 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java @@ -192,6 +192,7 @@ public String[] getValidValues() { private static final boolean DEFAULT_LENIENT = false; private static final boolean DEFAULT_ROUTE_TO_LEADER = true; private static final boolean DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = false; + private static final boolean DEFAULT_KEEP_TRANSACTION_ALIVE = false; private static final boolean DEFAULT_TRACK_SESSION_LEAKS = true; private static final boolean DEFAULT_TRACK_CONNECTION_LEAKS = true; private static final boolean DEFAULT_DATA_BOOST_ENABLED = false; @@ -268,6 +269,8 @@ public String[] getValidValues() { /** Name of the 'delay transaction start until first write' property. */ public static final String DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE_NAME = "delayTransactionStartUntilFirstWrite"; + /** Name of the 'keep transaction alive' property. */ + public static final String KEEP_TRANSACTION_ALIVE_PROPERTY_NAME = "keepTransactionAlive"; /** Name of the 'trackStackTraceOfSessionCheckout' connection property. */ public static final String TRACK_SESSION_LEAKS_PROPERTY_NAME = "trackSessionLeaks"; /** Name of the 'trackStackTraceOfConnectionCreation' connection property. */ @@ -403,6 +406,12 @@ private static String generateGuardedConnectionPropertyError( + "the first write operation in a read/write transaction will be executed using the read/write transaction. Enabling this mode can reduce locking " + "and improve performance for applications that can handle the lower transaction isolation semantics.", DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE), + ConnectionProperty.createBooleanProperty( + KEEP_TRANSACTION_ALIVE_PROPERTY_NAME, + "Enabling this option will trigger the connection to keep read/write transactions alive by executing a SELECT 1 query once every 10 seconds " + + "if no other statements are being executed. This option should be used with caution, as it can keep transactions alive and hold on to locks " + + "longer than intended. This option should typically be used for CLI-type application that might wait for user input for a longer period of time.", + DEFAULT_KEEP_TRANSACTION_ALIVE), ConnectionProperty.createBooleanProperty( TRACK_SESSION_LEAKS_PROPERTY_NAME, "Capture the call stack of the thread that checked out a session of the session pool. This will " @@ -726,6 +735,7 @@ public static Builder newBuilder() { private final RpcPriority rpcPriority; private final DdlInTransactionMode ddlInTransactionMode; private final boolean delayTransactionStartUntilFirstWrite; + private final boolean keepTransactionAlive; private final boolean trackSessionLeaks; private final boolean trackConnectionLeaks; @@ -789,6 +799,7 @@ private ConnectionOptions(Builder builder) { this.rpcPriority = parseRPCPriority(this.uri); this.ddlInTransactionMode = parseDdlInTransactionMode(this.uri); this.delayTransactionStartUntilFirstWrite = parseDelayTransactionStartUntilFirstWrite(this.uri); + this.keepTransactionAlive = parseKeepTransactionAlive(this.uri); this.trackSessionLeaks = parseTrackSessionLeaks(this.uri); this.trackConnectionLeaks = parseTrackConnectionLeaks(this.uri); @@ -1168,6 +1179,12 @@ static boolean parseDelayTransactionStartUntilFirstWrite(String uri) { : DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; } + @VisibleForTesting + static boolean parseKeepTransactionAlive(String uri) { + String value = parseUriProperty(uri, KEEP_TRANSACTION_ALIVE_PROPERTY_NAME); + return value != null ? Boolean.parseBoolean(value) : DEFAULT_KEEP_TRANSACTION_ALIVE; + } + @VisibleForTesting static boolean parseTrackSessionLeaks(String uri) { String value = parseUriProperty(uri, TRACK_SESSION_LEAKS_PROPERTY_NAME); @@ -1298,6 +1315,14 @@ static List parseProperties(String uri) { return res; } + static long tryParseLong(String value, long defaultValue) { + try { + return Long.parseLong(value); + } catch (NumberFormatException ignore) { + return defaultValue; + } + } + /** * Create a new {@link Connection} from this {@link ConnectionOptions}. Calling this method * multiple times for the same {@link ConnectionOptions} will return multiple instances of {@link @@ -1534,6 +1559,18 @@ boolean isDelayTransactionStartUntilFirstWrite() { return delayTransactionStartUntilFirstWrite; } + /** + * Whether connections created by this {@link ConnectionOptions} should keep read/write + * transactions alive by executing a SELECT 1 once every 10 seconds if no other statements are + * executed. This option should be used with caution, as enabling it can keep transactions alive + * for a very long time, which will hold on to any locks that have been taken by the transaction. + * This option should typically only be enabled for CLI-type applications or other user-input + * applications that might wait for a longer period of time on user input. + */ + boolean isKeepTransactionAlive() { + return keepTransactionAlive; + } + boolean isTrackConnectionLeaks() { return this.trackConnectionLeaks; } 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 c098ddf15d7..93415de3cab 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 @@ -91,6 +91,10 @@ StatementResult statementSetDelayTransactionStartUntilFirstWrite( StatementResult statementShowDelayTransactionStartUntilFirstWrite(); + StatementResult statementSetKeepTransactionAlive(Boolean keepTransactionAlive); + + StatementResult statementShowKeepTransactionAlive(); + StatementResult statementSetStatementTag(String tag); StatementResult statementShowStatementTag(); 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 84ebeec1a50..f99cb764cb2 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 @@ -31,6 +31,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DIRECTED_READ; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_EXCLUDE_TXN_FROM_CHANGE_STREAMS; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_KEEP_TRANSACTION_ALIVE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_MAX_COMMIT_DELAY; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_MAX_PARTITIONED_PARALLELISM; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_MAX_PARTITIONS; @@ -57,6 +58,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_DIRECTED_READ; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_EXCLUDE_TXN_FROM_CHANGE_STREAMS; +import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_KEEP_TRANSACTION_ALIVE; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_MAX_COMMIT_DELAY; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_MAX_PARTITIONED_PARALLELISM; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_MAX_PARTITIONS; @@ -388,6 +390,20 @@ public StatementResult statementShowDelayTransactionStartUntilFirstWrite() { SHOW_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE); } + @Override + public StatementResult statementSetKeepTransactionAlive(Boolean keepTransactionAlive) { + getConnection().setKeepTransactionAlive(keepTransactionAlive); + return noResult(SET_KEEP_TRANSACTION_ALIVE); + } + + @Override + public StatementResult statementShowKeepTransactionAlive() { + return resultSet( + String.format("%sKEEP_TRANSACTION_ALIVE", getNamespace(connection.getDialect())), + getConnection().isKeepTransactionAlive(), + SHOW_KEEP_TRANSACTION_ALIVE); + } + @Override public StatementResult statementSetStatementTag(String tag) { getConnection().setStatementTag("".equals(tag) ? null : tag); 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 0c55d90a9a3..431dfe27b69 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 @@ -21,6 +21,7 @@ import static com.google.cloud.spanner.connection.AbstractStatementParser.COMMIT_STATEMENT; import static com.google.cloud.spanner.connection.AbstractStatementParser.ROLLBACK_STATEMENT; import static com.google.cloud.spanner.connection.AbstractStatementParser.RUN_BATCH_STATEMENT; +import static com.google.cloud.spanner.connection.ConnectionOptions.tryParseLong; import static com.google.common.base.Preconditions.checkNotNull; import com.google.api.core.ApiFuture; @@ -33,6 +34,7 @@ import com.google.cloud.spanner.AbortedException; import com.google.cloud.spanner.CommitResponse; import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.Mutation; import com.google.cloud.spanner.Options; @@ -45,6 +47,7 @@ import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.ThreadFactoryUtil; import com.google.cloud.spanner.TransactionContext; import com.google.cloud.spanner.TransactionManager; import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; @@ -64,7 +67,12 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -81,6 +89,16 @@ */ class ReadWriteTransaction extends AbstractMultiUseTransaction { private static final Logger logger = Logger.getLogger(ReadWriteTransaction.class.getName()); + private static final ThreadFactory KEEP_ALIVE_THREAD_FACTORY = + ThreadFactoryUtil.createVirtualOrPlatformDaemonThreadFactory( + "read-write-transaction-keep-alive", true); + private static final ScheduledExecutorService KEEP_ALIVE_SERVICE = + Executors.newSingleThreadScheduledExecutor(KEEP_ALIVE_THREAD_FACTORY); + private static final ParsedStatement SELECT1_STATEMENT = + AbstractStatementParser.getInstance(Dialect.GOOGLE_STANDARD_SQL) + .parse(Statement.of("SELECT 1")); + private static final long DEFAULT_KEEP_ALIVE_INTERVAL_MILLIS = 8000L; + private static final AtomicLong ID_GENERATOR = new AtomicLong(); private static final String MAX_INTERNAL_RETRIES_EXCEEDED = "Internal transaction retry maximum exceeded"; @@ -123,6 +141,9 @@ class ReadWriteTransaction extends AbstractMultiUseTransaction { private TransactionManager txManager; private final boolean retryAbortsInternally; private final boolean delayTransactionStartUntilFirstWrite; + private final boolean keepTransactionAlive; + private final long keepAliveIntervalMillis; + private final ReentrantLock keepAliveLock; private final SavepointSupport savepointSupport; private int transactionRetryAttempts; private int successfulRetries; @@ -137,6 +158,7 @@ class ReadWriteTransaction extends AbstractMultiUseTransaction { private final List statements = new ArrayList<>(); private final List mutations = new ArrayList<>(); private Timestamp transactionStarted; + private ScheduledFuture keepAliveFuture; private static final class RollbackToSavepointException extends Exception { private final Savepoint savepoint; @@ -150,11 +172,27 @@ Savepoint getSavepoint() { } } + private final class StatementResultCallback implements ApiFutureCallback { + @Override + public void onFailure(Throwable t) { + if (t instanceof SpannerException) { + handlePossibleInvalidatingException((SpannerException) t); + } + maybeScheduleKeepAlivePing(); + } + + @Override + public void onSuccess(V result) { + maybeScheduleKeepAlivePing(); + } + } + static class Builder extends AbstractMultiUseTransaction.Builder { private boolean useAutoSavepointsForEmulator; private DatabaseClient dbClient; private Boolean retryAbortsInternally; private boolean delayTransactionStartUntilFirstWrite; + private boolean keepTransactionAlive; private boolean returnCommitStats; private Duration maxCommitDelay; private SavepointSupport savepointSupport; @@ -178,6 +216,11 @@ Builder setDelayTransactionStartUntilFirstWrite(boolean delayTransactionStartUnt return this; } + Builder setKeepTransactionAlive(boolean keepTransactionAlive) { + this.keepTransactionAlive = keepTransactionAlive; + return this; + } + Builder setRetryAbortsInternally(boolean retryAbortsInternally) { this.retryAbortsInternally = retryAbortsInternally; return this; @@ -234,6 +277,16 @@ private ReadWriteTransaction(Builder builder) { : DEFAULT_MAX_INTERNAL_RETRIES; this.dbClient = builder.dbClient; this.delayTransactionStartUntilFirstWrite = builder.delayTransactionStartUntilFirstWrite; + this.keepTransactionAlive = builder.keepTransactionAlive; + this.keepAliveIntervalMillis = + this.keepTransactionAlive + ? tryParseLong( + System.getProperty( + "spanner.connection.keep_alive_interval_millis", + String.valueOf(DEFAULT_KEEP_ALIVE_INTERVAL_MILLIS)), + DEFAULT_KEEP_ALIVE_INTERVAL_MILLIS) + : 0L; + this.keepAliveLock = this.keepTransactionAlive ? new ReentrantLock() : null; this.retryAbortsInternally = builder.retryAbortsInternally; this.savepointSupport = builder.savepointSupport; this.transactionRetryListeners = builder.transactionRetryListeners; @@ -354,6 +407,64 @@ private void checkValidStateAndMarkStarted() { } } + private boolean shouldPing() { + return isActive() + && keepAliveLock != null + && keepTransactionAlive + && !timedOutOrCancelled + && rolledBackToSavepointException == null; + } + + private void maybeScheduleKeepAlivePing() { + if (shouldPing()) { + keepAliveLock.lock(); + try { + if (keepAliveFuture == null || keepAliveFuture.isDone()) { + keepAliveFuture = + KEEP_ALIVE_SERVICE.schedule( + new KeepAliveRunnable(), + keepAliveIntervalMillis > 0 + ? keepAliveIntervalMillis + : DEFAULT_KEEP_ALIVE_INTERVAL_MILLIS, + TimeUnit.MILLISECONDS); + } + } finally { + keepAliveLock.unlock(); + } + } + } + + private void cancelScheduledKeepAlivePing() { + if (keepAliveLock != null) { + keepAliveLock.lock(); + try { + if (keepAliveFuture != null) { + keepAliveFuture.cancel(false); + } + } finally { + keepAliveLock.unlock(); + } + } + } + + private class KeepAliveRunnable implements Runnable { + @Override + public void run() { + if (shouldPing()) { + // Do a shoot-and-forget ping and schedule a new ping over 8 seconds after this ping has + // finished. + ApiFuture future = + executeQueryAsync( + CallType.SYNC, + SELECT1_STATEMENT, + AnalyzeMode.NONE, + Options.tag("connection.transaction-keep-alive")); + future.addListener( + ReadWriteTransaction.this::maybeScheduleKeepAlivePing, MoreExecutors.directExecutor()); + } + } + } + private void checkTimedOut() { ConnectionPreconditions.checkState( !timedOutOrCancelled, @@ -529,20 +640,7 @@ public ApiFuture executeQueryAsync( } else { res = super.executeQueryAsync(callType, statement, analyzeMode, options); } - ApiFutures.addCallback( - res, - new ApiFutureCallback() { - @Override - public void onFailure(Throwable t) { - if (t instanceof SpannerException) { - handlePossibleInvalidatingException((SpannerException) t); - } - } - - @Override - public void onSuccess(ResultSet result) {} - }, - MoreExecutors.directExecutor()); + ApiFutures.addCallback(res, new StatementResultCallback<>(), MoreExecutors.directExecutor()); return res; } } @@ -653,20 +751,7 @@ private ApiFuture> internalExecuteUpdateAsync( }, SpannerGrpc.getExecuteSqlMethod()); } - ApiFutures.addCallback( - res, - new ApiFutureCallback>() { - @Override - public void onFailure(Throwable t) { - if (t instanceof SpannerException) { - handlePossibleInvalidatingException((SpannerException) t); - } - } - - @Override - public void onSuccess(Tuple result) {} - }, - MoreExecutors.directExecutor()); + ApiFutures.addCallback(res, new StatementResultCallback<>(), MoreExecutors.directExecutor()); return res; } @@ -727,20 +812,7 @@ public ApiFuture executeBatchUpdateAsync( }, SpannerGrpc.getExecuteBatchDmlMethod()); } - ApiFutures.addCallback( - res, - new ApiFutureCallback() { - @Override - public void onFailure(Throwable t) { - if (t instanceof SpannerException) { - handlePossibleInvalidatingException((SpannerException) t); - } - } - - @Override - public void onSuccess(long[] result) {} - }, - MoreExecutors.directExecutor()); + ApiFutures.addCallback(res, new StatementResultCallback<>(), MoreExecutors.directExecutor()); return res; } } @@ -778,6 +850,7 @@ public Void call() { public ApiFuture commitAsync(CallType callType) { try (Scope ignore = span.makeCurrent()) { checkOrCreateValidTransaction(COMMIT_STATEMENT, callType); + cancelScheduledKeepAlivePing(); state = UnitOfWorkState.COMMITTING; commitResponseFuture = SettableApiFuture.create(); ApiFuture res; @@ -1142,6 +1215,7 @@ private ApiFuture rollbackAsync(CallType callType, boolean updateStatus) { ConnectionPreconditions.checkState( state == UnitOfWorkState.STARTED || state == UnitOfWorkState.ABORTED, "This transaction has status " + state.name()); + cancelScheduledKeepAlivePing(); if (updateStatus) { state = UnitOfWorkState.ROLLED_BACK; asyncEndUnitOfWorkSpan(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java index 345956a4750..23c5d792a77 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java @@ -75,6 +75,8 @@ enum ClientSideStatementType { SET_MAX_COMMIT_DELAY, SHOW_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE, SET_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE, + SHOW_KEEP_TRANSACTION_ALIVE, + SET_KEEP_TRANSACTION_ALIVE, SHOW_STATEMENT_TAG, SET_STATEMENT_TAG, SHOW_TRANSACTION_TAG, diff --git a/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json b/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json index c1453915a57..76ad4e4e921 100644 --- a/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json +++ b/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json @@ -185,6 +185,15 @@ "method": "statementShowDelayTransactionStartUntilFirstWrite", "exampleStatements": ["show variable delay_transaction_start_until_first_write"] }, + { + "name": "SHOW VARIABLE KEEP_TRANSACTION_ALIVE", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_KEEP_TRANSACTION_ALIVE", + "regex": "(?is)\\A\\s*show\\s+variable\\s+keep_transaction_alive\\s*\\z", + "method": "statementShowKeepTransactionAlive", + "exampleStatements": ["show variable keep_transaction_alive"] + }, { "name": "PARTITION ", "executorName": "ClientSideStatementPartitionExecutor", @@ -583,6 +592,21 @@ "converterName": "ClientSideStatementValueConverters$BooleanConverter" } }, + { + "name": "SET KEEP_TRANSACTION_ALIVE = TRUE|FALSE", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_KEEP_TRANSACTION_ALIVE", + "regex": "(?is)\\A\\s*set\\s+keep_transaction_alive\\s*(?:=)\\s*(.*)\\z", + "method": "statementSetKeepTransactionAlive", + "exampleStatements": ["set keep_transaction_alive = true", "set keep_transaction_alive = false"], + "setStatement": { + "propertyName": "KEEP_TRANSACTION_ALIVE", + "separator": "=", + "allowedValues": "(TRUE|FALSE)", + "converterName": "ClientSideStatementValueConverters$BooleanConverter" + } + }, { "name": "SHOW VARIABLE DATA_BOOST_ENABLED", "executorName": "ClientSideStatementNoParamExecutor", diff --git a/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/PG_ClientSideStatements.json b/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/PG_ClientSideStatements.json index a5ca7cf07df..cd5f492ca3c 100644 --- a/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/PG_ClientSideStatements.json +++ b/google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/PG_ClientSideStatements.json @@ -185,6 +185,15 @@ "method": "statementShowDelayTransactionStartUntilFirstWrite", "exampleStatements": ["show spanner.delay_transaction_start_until_first_write","show variable spanner.delay_transaction_start_until_first_write"] }, + { + "name": "SHOW [VARIABLE] SPANNER.KEEP_TRANSACTION_ALIVE", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_KEEP_TRANSACTION_ALIVE", + "regex": "(?is)\\A\\s*show\\s+(?:variable\\s+)?spanner\\.keep_transaction_alive\\s*\\z", + "method": "statementShowKeepTransactionAlive", + "exampleStatements": ["show spanner.keep_transaction_alive","show variable spanner.keep_transaction_alive"] + }, { "name": "SHOW [VARIABLE] TRANSACTION ISOLATION LEVEL", "executorName": "ClientSideStatementNoParamExecutor", @@ -773,6 +782,21 @@ "converterName": "ClientSideStatementValueConverters$BooleanConverter" } }, + { + "name": "SET SPANNER.KEEP_TRANSACTION_ALIVE = TRUE|FALSE", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_KEEP_TRANSACTION_ALIVE", + "regex": "(?is)\\A\\s*set\\s+spanner\\.keep_transaction_alive(?:\\s*=\\s*|\\s+to\\s+)(.*)\\z", + "method": "statementSetKeepTransactionAlive", + "exampleStatements": ["set spanner.keep_transaction_alive = true", "set spanner.keep_transaction_alive = false", "set spanner.keep_transaction_alive to true", "set spanner.keep_transaction_alive to false"], + "setStatement": { + "propertyName": "SPANNER.KEEP_TRANSACTION_ALIVE", + "separator": "(?:=|\\s+TO\\s+)", + "allowedValues": "(TRUE|FALSE)", + "converterName": "ClientSideStatementValueConverters$BooleanConverter" + } + }, { "name": "SHOW [VARIABLE] SPANNER.DATA_BOOST_ENABLED", "executorName": "ClientSideStatementNoParamExecutor", diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java index 3cf70ed2124..c5b34982255 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java @@ -257,6 +257,11 @@ public void testReset() { false, connection::setDelayTransactionStartUntilFirstWrite, connection::isDelayTransactionStartUntilFirstWrite); + assertResetBooleanProperty( + connection, + false, + connection::setKeepTransactionAlive, + connection::isKeepTransactionAlive); assertResetBooleanProperty( connection, false, connection::setDataBoostEnabled, connection::isDataBoostEnabled); assertResetBooleanProperty( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SavepointMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SavepointMockServerTest.java index e2ab63b3213..e615b78e9de 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SavepointMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SavepointMockServerTest.java @@ -39,6 +39,7 @@ import com.google.spanner.v1.RollbackRequest; import java.util.Collection; import java.util.List; +import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; import org.junit.After; import org.junit.Before; @@ -678,4 +679,80 @@ public void testRollbackToSavepointWithoutInternalRetriesInReadOnlyTransaction() } } } + + @Test + public void testKeepAlive() throws InterruptedException, TimeoutException { + System.setProperty("spanner.connection.keep_alive_interval_millis", "1"); + try (Connection connection = createConnection()) { + connection.setSavepointSupport(SavepointSupport.ENABLED); + connection.setKeepTransactionAlive(true); + // Start a transaction by executing a statement. + connection.execute(INSERT_STATEMENT); + // Verify that we get a keep-alive request. + verifyHasKeepAliveRequest(); + // Set a savepoint, execute another statement, and rollback to the savepoint. + // The keep-alive should not be sent after the transaction has been rolled back to the + // savepoint. + connection.savepoint("s1"); + connection.execute(INSERT_STATEMENT); + connection.rollbackToSavepoint("s1"); + mockSpanner.waitForRequestsToContain(RollbackRequest.class, 1000L); + // Wait for up to 2 milliseconds to make sure that any keep-alive requests that were in flight + // have finished. + try { + mockSpanner.waitForRequestsToContain( + r -> { + if (!(r instanceof ExecuteSqlRequest)) { + return false; + } + ExecuteSqlRequest request = (ExecuteSqlRequest) r; + return request.getSql().equals("SELECT 1") + && request + .getRequestOptions() + .getRequestTag() + .equals("connection.transaction-keep-alive"); + }, + 2L); + } catch (TimeoutException ignore) { + } + + // Verify that we don't get any keep-alive requests from this point. + mockSpanner.clearRequests(); + Thread.sleep(2L); + assertEquals(0, countKeepAliveRequest()); + // Resume the transaction and verify that we get a keep-alive again. + connection.execute(INSERT_STATEMENT); + verifyHasKeepAliveRequest(); + } finally { + System.clearProperty("spanner.connection.keep_alive_interval_millis"); + } + } + + private void verifyHasKeepAliveRequest() throws InterruptedException, TimeoutException { + mockSpanner.waitForRequestsToContain( + r -> { + if (!(r instanceof ExecuteSqlRequest)) { + return false; + } + ExecuteSqlRequest request = (ExecuteSqlRequest) r; + return request.getSql().equals("SELECT 1") + && request + .getRequestOptions() + .getRequestTag() + .equals("connection.transaction-keep-alive"); + }, + 1000L); + } + + private long countKeepAliveRequest() { + return mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).stream() + .filter( + request -> + request.getSql().equals("SELECT 1") + && request + .getRequestOptions() + .getRequestTag() + .equals("connection.transaction-keep-alive")) + .count(); + } } 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 efe96032c61..92dc3a67e8f 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 @@ -4387,6 +4387,205 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable/-delay_transaction_start_until_first_write; NEW_CONNECTION; +show variable keep_transaction_alive; +NEW_CONNECTION; +SHOW VARIABLE KEEP_TRANSACTION_ALIVE; +NEW_CONNECTION; +show variable keep_transaction_alive; +NEW_CONNECTION; + show variable keep_transaction_alive; +NEW_CONNECTION; + show variable keep_transaction_alive; +NEW_CONNECTION; + + + +show variable keep_transaction_alive; +NEW_CONNECTION; +show variable keep_transaction_alive ; +NEW_CONNECTION; +show variable keep_transaction_alive ; +NEW_CONNECTION; +show variable keep_transaction_alive + +; +NEW_CONNECTION; +show variable keep_transaction_alive; +NEW_CONNECTION; +show variable keep_transaction_alive; +NEW_CONNECTION; +show +variable +keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable keep_transaction_alive/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-keep_transaction_alive; +NEW_CONNECTION; partition select col1, col2 from my_table; NEW_CONNECTION; PARTITION SELECT COL1, COL2 FROM MY_TABLE; @@ -20999,6 +21198,406 @@ NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT set delay_transaction_start_until_first_write =/-false; NEW_CONNECTION; +set keep_transaction_alive = true; +NEW_CONNECTION; +SET KEEP_TRANSACTION_ALIVE = TRUE; +NEW_CONNECTION; +set keep_transaction_alive = true; +NEW_CONNECTION; + set keep_transaction_alive = true; +NEW_CONNECTION; + set keep_transaction_alive = true; +NEW_CONNECTION; + + + +set keep_transaction_alive = true; +NEW_CONNECTION; +set keep_transaction_alive = true ; +NEW_CONNECTION; +set keep_transaction_alive = true ; +NEW_CONNECTION; +set keep_transaction_alive = true + +; +NEW_CONNECTION; +set keep_transaction_alive = true; +NEW_CONNECTION; +set keep_transaction_alive = true; +NEW_CONNECTION; +set +keep_transaction_alive += +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =/-true; +NEW_CONNECTION; +set keep_transaction_alive = false; +NEW_CONNECTION; +SET KEEP_TRANSACTION_ALIVE = FALSE; +NEW_CONNECTION; +set keep_transaction_alive = false; +NEW_CONNECTION; + set keep_transaction_alive = false; +NEW_CONNECTION; + set keep_transaction_alive = false; +NEW_CONNECTION; + + + +set keep_transaction_alive = false; +NEW_CONNECTION; +set keep_transaction_alive = false ; +NEW_CONNECTION; +set keep_transaction_alive = false ; +NEW_CONNECTION; +set keep_transaction_alive = false + +; +NEW_CONNECTION; +set keep_transaction_alive = false; +NEW_CONNECTION; +set keep_transaction_alive = false; +NEW_CONNECTION; +set +keep_transaction_alive += +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive = false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set keep_transaction_alive =/-false; +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 22e1470063a..d15677ae693 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 2024-05-31T10:07:25.155000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.155000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:01.652000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:01.652000000Z' 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 2024-05-31T10:07:25.155000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:01.652000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -510,15 +510,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.270000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.270000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:01.795000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:01.795000000Z' 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 2024-05-31T10:07:25.270000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:01.795000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -950,8 +950,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.375000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.375000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:01.900000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:01.900000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -961,7 +961,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:25.375000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:01.900000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1462,8 +1462,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.500000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.500000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:01.998000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:01.998000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -1473,7 +1473,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:25.500000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:01.998000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1876,15 +1876,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.591000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.591000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.090000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.090000000Z' 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 2024-05-31T10:07:25.591000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.090000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2243,14 +2243,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.661000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.158000000Z'; 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 2024-05-31T10:07:25.661000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.158000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2600,13 +2600,13 @@ SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.749000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.237000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:25.749000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.237000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2910,14 +2910,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.820000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.820000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.309000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.309000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:25.820000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.309000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -3245,15 +3245,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.911000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.911000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.392000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.392000000Z' 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 2024-05-31T10:07:25.911000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.392000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -3662,8 +3662,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 2024-05-31T10:07:25.981000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.981000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.473000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.473000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -3672,7 +3672,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 2024-05-31T10:07:25.981000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.473000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4081,14 +4081,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 2024-05-31T10:07:26.049000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.543000000Z'; 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 2024-05-31T10:07:26.049000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.543000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4438,13 +4438,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.107000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.601000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.107000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.601000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4877,8 +4877,8 @@ SET TRANSACTION READ ONLY; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.173000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.173000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.663000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.663000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -4888,7 +4888,7 @@ SET TRANSACTION READ ONLY; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.173000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.663000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5288,15 +5288,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.244000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.244000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.730000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.730000000Z' 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 2024-05-31T10:07:26.244000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.730000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5641,15 +5641,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.301000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.301000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.792000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.792000000Z' 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 2024-05-31T10:07:26.301000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.792000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6088,8 +6088,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.367000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.367000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.852000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.852000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -6099,7 +6099,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.367000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.852000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6607,8 +6607,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.470000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.470000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.938000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.938000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -6618,7 +6618,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.470000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.938000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7023,15 +7023,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.542000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.542000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.010000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.010000000Z' 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 2024-05-31T10:07:26.542000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.010000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7394,14 +7394,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.607000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.066000000Z'; 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 2024-05-31T10:07:26.607000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.066000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7756,13 +7756,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.675000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.136000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.675000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.136000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -8075,14 +8075,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.736000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.736000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.199000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.199000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.736000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.199000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -8392,13 +8392,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.791000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.256000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.791000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.256000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -8753,8 +8753,8 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.841000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.841000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.308000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.308000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -8762,7 +8762,7 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.841000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.308000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9197,8 +9197,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.899000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.899000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.368000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.368000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -9206,8 +9206,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.899000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:26.899000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.368000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.368000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -9593,15 +9593,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.961000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.961000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.454000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.454000000Z' 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 2024-05-31T10:07:26.961000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.454000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9952,15 +9952,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 2024-05-31T10:07:27.018000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.018000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.506000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.506000000Z' 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 2024-05-31T10:07:27.018000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.018000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.506000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.506000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -10320,15 +10320,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.078000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.078000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.566000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.566000000Z' 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 2024-05-31T10:07:27.078000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.078000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.566000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.566000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -10718,16 +10718,16 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.139000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.139000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.625000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.625000000Z' 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 2024-05-31T10:07:27.139000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.139000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.625000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.625000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11110,15 +11110,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.203000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.203000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.685000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.685000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.203000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.203000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.685000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.685000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11448,14 +11448,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.264000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.264000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.745000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.745000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.264000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.264000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.745000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.745000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11778,15 +11778,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.315000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.315000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.802000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.802000000Z' 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 2024-05-31T10:07:27.315000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.315000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.802000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.802000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -12193,8 +12193,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.368000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.368000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.862000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.862000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -12202,8 +12202,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.368000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.368000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.862000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.862000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -12586,15 +12586,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.432000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.432000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.925000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.925000000Z' 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 2024-05-31T10:07:27.432000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.925000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; @@ -12932,15 +12932,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.484000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.484000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.976000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.976000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.484000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.484000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.976000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.976000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -13287,15 +13287,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.563000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.563000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:04.031000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:04.031000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.563000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.563000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:04.031000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:04.031000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -13612,14 +13612,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.621000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.621000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:04.087000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:04.087000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.621000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.621000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:04.087000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:04.087000000Z' 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 907a9bff50c..e107990cfd6 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 @@ -8755,6 +8755,403 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable/-spanner.delay_transaction_start_until_first_write; NEW_CONNECTION; +show spanner.keep_transaction_alive; +NEW_CONNECTION; +SHOW SPANNER.KEEP_TRANSACTION_ALIVE; +NEW_CONNECTION; +show spanner.keep_transaction_alive; +NEW_CONNECTION; + show spanner.keep_transaction_alive; +NEW_CONNECTION; + show spanner.keep_transaction_alive; +NEW_CONNECTION; + + + +show spanner.keep_transaction_alive; +NEW_CONNECTION; +show spanner.keep_transaction_alive ; +NEW_CONNECTION; +show spanner.keep_transaction_alive ; +NEW_CONNECTION; +show spanner.keep_transaction_alive + +; +NEW_CONNECTION; +show spanner.keep_transaction_alive; +NEW_CONNECTION; +show spanner.keep_transaction_alive; +NEW_CONNECTION; +show +spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show%spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show_spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show&spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show$spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show@spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show!spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show*spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show(spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show)spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show-spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show+spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show-#spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show/spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show\spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show?spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show-/spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show/#spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.keep_transaction_alive/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show/-spanner.keep_transaction_alive; +NEW_CONNECTION; +show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +SHOW VARIABLE SPANNER.KEEP_TRANSACTION_ALIVE; +NEW_CONNECTION; +show variable spanner.keep_transaction_alive; +NEW_CONNECTION; + show variable spanner.keep_transaction_alive; +NEW_CONNECTION; + show variable spanner.keep_transaction_alive; +NEW_CONNECTION; + + + +show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +show variable spanner.keep_transaction_alive ; +NEW_CONNECTION; +show variable spanner.keep_transaction_alive ; +NEW_CONNECTION; +show variable spanner.keep_transaction_alive + +; +NEW_CONNECTION; +show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +show +variable +spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable spanner.keep_transaction_alive; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.keep_transaction_alive/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-spanner.keep_transaction_alive; +NEW_CONNECTION; show transaction isolation level; NEW_CONNECTION; SHOW TRANSACTION ISOLATION LEVEL; @@ -75764,6 +76161,806 @@ NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT set spanner.delay_transaction_start_until_first_write to/-false; NEW_CONNECTION; +set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +SET SPANNER.KEEP_TRANSACTION_ALIVE = TRUE; +NEW_CONNECTION; +set spanner.keep_transaction_alive = true; +NEW_CONNECTION; + set spanner.keep_transaction_alive = true; +NEW_CONNECTION; + set spanner.keep_transaction_alive = true; +NEW_CONNECTION; + + + +set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +set spanner.keep_transaction_alive = true ; +NEW_CONNECTION; +set spanner.keep_transaction_alive = true ; +NEW_CONNECTION; +set spanner.keep_transaction_alive = true + +; +NEW_CONNECTION; +set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +set +spanner.keep_transaction_alive += +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.keep_transaction_alive = true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =/-true; +NEW_CONNECTION; +set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +SET SPANNER.KEEP_TRANSACTION_ALIVE = FALSE; +NEW_CONNECTION; +set spanner.keep_transaction_alive = false; +NEW_CONNECTION; + set spanner.keep_transaction_alive = false; +NEW_CONNECTION; + set spanner.keep_transaction_alive = false; +NEW_CONNECTION; + + + +set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +set spanner.keep_transaction_alive = false ; +NEW_CONNECTION; +set spanner.keep_transaction_alive = false ; +NEW_CONNECTION; +set spanner.keep_transaction_alive = false + +; +NEW_CONNECTION; +set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +set +spanner.keep_transaction_alive += +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.keep_transaction_alive = false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive = false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive =/-false; +NEW_CONNECTION; +set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +SET SPANNER.KEEP_TRANSACTION_ALIVE TO TRUE; +NEW_CONNECTION; +set spanner.keep_transaction_alive to true; +NEW_CONNECTION; + set spanner.keep_transaction_alive to true; +NEW_CONNECTION; + set spanner.keep_transaction_alive to true; +NEW_CONNECTION; + + + +set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +set spanner.keep_transaction_alive to true ; +NEW_CONNECTION; +set spanner.keep_transaction_alive to true ; +NEW_CONNECTION; +set spanner.keep_transaction_alive to true + +; +NEW_CONNECTION; +set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +set +spanner.keep_transaction_alive +to +true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to%true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to_true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to&true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to$true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to@true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to!true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to*true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to(true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to)true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to-true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to+true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to-#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to\true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to?true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to-/true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to/#true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.keep_transaction_alive to true; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to true/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to/-true; +NEW_CONNECTION; +set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +SET SPANNER.KEEP_TRANSACTION_ALIVE TO FALSE; +NEW_CONNECTION; +set spanner.keep_transaction_alive to false; +NEW_CONNECTION; + set spanner.keep_transaction_alive to false; +NEW_CONNECTION; + set spanner.keep_transaction_alive to false; +NEW_CONNECTION; + + + +set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +set spanner.keep_transaction_alive to false ; +NEW_CONNECTION; +set spanner.keep_transaction_alive to false ; +NEW_CONNECTION; +set spanner.keep_transaction_alive to false + +; +NEW_CONNECTION; +set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +set +spanner.keep_transaction_alive +to +false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to%false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to_false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to&false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to$false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to@false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to!false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to*false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to(false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to)false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to-false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to+false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to-#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to\false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to?false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to-/false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to/#false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.keep_transaction_alive to false; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to false/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.keep_transaction_alive to/-false; +NEW_CONNECTION; show spanner.data_boost_enabled; NEW_CONNECTION; SHOW SPANNER.DATA_BOOST_ENABLED; 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 135598adb76..f1649809313 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 2024-05-31T10:07:25.218000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.218000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:01.733000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:01.733000000Z' 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 2024-05-31T10:07:25.218000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:01.733000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -510,15 +510,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 2024-05-31T10:07:25.324000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.324000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:01.851000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:01.851000000Z' 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 2024-05-31T10:07:25.324000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:01.851000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -950,8 +950,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.450000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.450000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:01.953000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:01.953000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -961,7 +961,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:25.450000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:01.953000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1462,8 +1462,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.552000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.552000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.049000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.049000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -1473,7 +1473,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:25.552000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.049000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -1876,15 +1876,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.624000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.624000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.123000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.123000000Z' 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 2024-05-31T10:07:25.624000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.123000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2243,14 +2243,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.706000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.196000000Z'; 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 2024-05-31T10:07:25.706000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.196000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2600,13 +2600,13 @@ SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.786000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.273000000Z'; 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 2024-05-31T10:07:25.786000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.273000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2910,14 +2910,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.851000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.851000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.339000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.339000000Z' 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 2024-05-31T10:07:25.851000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.339000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -3245,15 +3245,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:25.947000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:25.947000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.430000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.430000000Z' 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 2024-05-31T10:07:25.947000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.430000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -3662,8 +3662,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 2024-05-31T10:07:26.016000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.016000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.511000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.511000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -3672,7 +3672,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 2024-05-31T10:07:26.016000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.511000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4081,14 +4081,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 2024-05-31T10:07:26.078000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.574000000Z'; 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 2024-05-31T10:07:26.078000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.574000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4438,13 +4438,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.139000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.628000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.139000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.628000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -4877,8 +4877,8 @@ SET TRANSACTION READ ONLY; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.211000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.211000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.699000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.699000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -4888,7 +4888,7 @@ SET TRANSACTION READ ONLY; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.211000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.699000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5288,15 +5288,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.272000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.272000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.760000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.760000000Z' 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 2024-05-31T10:07:26.272000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.760000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -5641,15 +5641,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 2024-05-31T10:07:26.333000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.333000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.820000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.820000000Z' 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 2024-05-31T10:07:26.333000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.820000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6088,8 +6088,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.405000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.405000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.892000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.892000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -6099,7 +6099,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.405000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.892000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -6607,8 +6607,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.508000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.508000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:02.976000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:02.976000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -6618,7 +6618,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.508000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:02.976000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7023,15 +7023,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.575000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.575000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.036000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.036000000Z' 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 2024-05-31T10:07:26.575000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.036000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7394,14 +7394,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.642000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.099000000Z'; 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 2024-05-31T10:07:26.642000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.099000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -7756,13 +7756,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.707000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.170000000Z'; 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 2024-05-31T10:07:26.707000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.170000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -8075,14 +8075,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.762000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.762000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.227000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.227000000Z' 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 2024-05-31T10:07:26.762000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.227000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -8392,13 +8392,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.816000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.282000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.816000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.282000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -8753,8 +8753,8 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.865000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.865000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.333000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.333000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -8762,7 +8762,7 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.865000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.333000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9197,8 +9197,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.932000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.932000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.406000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.406000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -9206,8 +9206,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:26.932000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:26.932000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.406000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.406000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -9593,15 +9593,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:26.987000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:26.987000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.479000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.479000000Z' 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 2024-05-31T10:07:26.987000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.479000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -9952,15 +9952,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 2024-05-31T10:07:27.047000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.047000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.536000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.536000000Z' 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 2024-05-31T10:07:27.047000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.047000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.536000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.536000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -10320,15 +10320,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.109000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.109000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.596000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.596000000Z' 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 2024-05-31T10:07:27.109000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.109000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.596000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.596000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -10718,16 +10718,16 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.169000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.169000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.656000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.656000000Z' 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 2024-05-31T10:07:27.169000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.169000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.656000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.656000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11110,15 +11110,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.235000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.235000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.716000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.716000000Z' 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 2024-05-31T10:07:27.235000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.235000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.716000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.716000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11448,14 +11448,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.290000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.290000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.772000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.772000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.290000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.290000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.772000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.772000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11778,15 +11778,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 2024-05-31T10:07:27.340000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.340000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.830000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.830000000Z' 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 2024-05-31T10:07:27.340000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.340000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.830000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.830000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -12193,8 +12193,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.399000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.399000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.896000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.896000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -12202,8 +12202,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.399000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.399000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.896000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:03.896000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -12586,15 +12586,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.456000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.456000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:03.950000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:03.950000000Z' 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 2024-05-31T10:07:27.456000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:03.950000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; @@ -12932,15 +12932,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.532000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.532000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:04.003000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:04.003000000Z' 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 2024-05-31T10:07:27.532000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.532000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:04.003000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:04.003000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -13287,15 +13287,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.592000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.592000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:04.059000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:04.059000000Z' 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 2024-05-31T10:07:27.592000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.592000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:04.059000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:04.059000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -13612,14 +13612,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-05-31T10:07:27.645000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-05-31T10:07:27.645000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-06-10T06:28:04.111000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-06-10T06:28:04.111000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-05-31T10:07:27.645000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-05-31T10:07:27.645000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-06-10T06:28:04.111000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-06-10T06:28:04.111000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE;