diff --git a/google-cloud-spanner/clirr-ignored-differences.xml b/google-cloud-spanner/clirr-ignored-differences.xml index 56e946eb3d..76d2aa7c79 100644 --- a/google-cloud-spanner/clirr-ignored-differences.xml +++ b/google-cloud-spanner/clirr-ignored-differences.xml @@ -540,4 +540,17 @@ com/google/cloud/spanner/Dialect java.lang.String getDefaultSchema() + + + + 7012 + com/google/cloud/spanner/connection/Connection + com.google.spanner.v1.DirectedReadOptions getDirectedRead() + + + 7012 + com/google/cloud/spanner/connection/Connection + void setDirectedRead(com.google.spanner.v1.DirectedReadOptions) + + diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java index a477a664ec..6be277777a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java @@ -18,6 +18,7 @@ import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.Options.RpcPriority; +import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.TimestampBound; import com.google.cloud.spanner.TimestampBound.Mode; @@ -27,6 +28,7 @@ import com.google.common.base.Preconditions; import com.google.protobuf.Duration; import com.google.protobuf.util.Durations; +import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.RequestOptions.Priority; import java.util.EnumSet; import java.util.HashMap; @@ -306,6 +308,48 @@ public TimestampBound convert(String value) { return null; } } + /** + * Converter from string to possible values for {@link com.google.spanner.v1.DirectedReadOptions}. + */ + static class DirectedReadOptionsConverter + implements ClientSideStatementValueConverter { + private final Pattern allowedValues; + + public DirectedReadOptionsConverter(String allowedValues) { + // Remove the single quotes at the beginning and end. + this.allowedValues = + Pattern.compile( + "(?is)\\A" + allowedValues.substring(1, allowedValues.length() - 1) + "\\z"); + } + + @Override + public Class getParameterClass() { + return DirectedReadOptions.class; + } + + @Override + public DirectedReadOptions convert(String value) { + Matcher matcher = allowedValues.matcher(value); + if (matcher.find()) { + try { + return DirectedReadOptionsUtil.parse(value); + } catch (SpannerException spannerException) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, + String.format( + "Failed to parse '%s' as a valid value for DIRECTED_READ.\n" + + "The value should be a JSON string like this: '%s'.\n" + + "You can generate a valid JSON string from a DirectedReadOptions instance by calling %s.%s", + value, + "{\"includeReplicas\":{\"replicaSelections\":[{\"location\":\"eu-west1\",\"type\":\"READ_ONLY\"}]}}", + DirectedReadOptionsUtil.class.getName(), + "toString(DirectedReadOptions directedReadOptions)"), + spannerException); + } + } + return null; + } + } /** Converter for converting strings to {@link AutocommitDmlMode} values. */ static class AutocommitDmlModeConverter 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 e58610b7d0..ffcef91d9c 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 @@ -38,6 +38,7 @@ import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.TimestampBound; import com.google.cloud.spanner.connection.StatementResult.ResultType; +import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ResultSetStats; import java.util.Iterator; @@ -489,6 +490,22 @@ default String getStatementTag() { */ TimestampBound getReadOnlyStaleness(); + /** + * Sets the {@link DirectedReadOptions} to use for both single-use and multi-use read-only + * transactions on this connection. + */ + default void setDirectedRead(DirectedReadOptions directedReadOptions) { + throw new UnsupportedOperationException("Unimplemented"); + } + + /** + * Returns the {@link DirectedReadOptions} that are used for both single-use and multi-use + * read-only transactions on this connection. + */ + default DirectedReadOptions getDirectedRead() { + throw new UnsupportedOperationException("Unimplemented"); + } + /** * Sets the query optimizer version to use for this connection. * 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 3e524e4fe9..e9aed66b6b 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 @@ -53,6 +53,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.MoreExecutors; +import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions; import com.google.spanner.v1.ResultSetStats; import java.util.ArrayList; @@ -236,6 +237,7 @@ static UnitOfWorkType of(TransactionMode transactionMode) { */ private int maxPartitionedParallelism; + private DirectedReadOptions directedReadOptions = null; private QueryOptions queryOptions = QueryOptions.getDefaultInstance(); private RpcPriority rpcPriority = null; private SavepointSupport savepointSupport = SavepointSupport.FAIL_AFTER_ROLLBACK; @@ -510,6 +512,21 @@ public TimestampBound getReadOnlyStaleness() { return this.readOnlyStaleness; } + @Override + public void setDirectedRead(DirectedReadOptions directedReadOptions) { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + ConnectionPreconditions.checkState( + !isTransactionStarted(), + "Cannot set directed read options when a transaction has been started"); + this.directedReadOptions = directedReadOptions; + } + + @Override + public DirectedReadOptions getDirectedRead() { + ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG); + return this.directedReadOptions; + } + @Override public void setOptimizerVersion(String optimizerVersion) { Preconditions.checkNotNull(optimizerVersion); @@ -1131,7 +1148,8 @@ public ResultSet partitionQuery( CallType.SYNC, parsedStatement, getEffectivePartitionOptions(partitionOptions), - mergeDataBoost(mergeQueryRequestOptions(mergeQueryStatementTag(options))))); + mergeDataBoost( + mergeQueryRequestOptions(parsedStatement, mergeQueryStatementTag(options))))); } private PartitionOptions getEffectivePartitionOptions( @@ -1427,41 +1445,38 @@ private List parseUpdateStatements(Iterable updates) private QueryOption[] mergeDataBoost(QueryOption... options) { if (this.dataBoostEnabled) { - - // Shortcut for the most common scenario. - if (options == null || options.length == 0) { - options = new QueryOption[] {Options.dataBoostEnabled(true)}; - } else { - options = Arrays.copyOf(options, options.length + 1); - options[options.length - 1] = Options.dataBoostEnabled(true); - } + options = appendQueryOption(options, Options.dataBoostEnabled(true)); } return options; } private QueryOption[] mergeQueryStatementTag(QueryOption... options) { if (this.statementTag != null) { - // Shortcut for the most common scenario. - if (options == null || options.length == 0) { - options = new QueryOption[] {Options.tag(statementTag)}; - } else { - options = Arrays.copyOf(options, options.length + 1); - options[options.length - 1] = Options.tag(statementTag); - } + options = appendQueryOption(options, Options.tag(statementTag)); this.statementTag = null; } return options; } - private QueryOption[] mergeQueryRequestOptions(QueryOption... options) { + private QueryOption[] mergeQueryRequestOptions( + ParsedStatement parsedStatement, QueryOption... options) { if (this.rpcPriority != null) { - // Shortcut for the most common scenario. - if (options == null || options.length == 0) { - options = new QueryOption[] {Options.priority(this.rpcPriority)}; - } else { - options = Arrays.copyOf(options, options.length + 1); - options[options.length - 1] = Options.priority(this.rpcPriority); - } + options = appendQueryOption(options, Options.priority(this.rpcPriority)); + } + if (this.directedReadOptions != null + && currentUnitOfWork != null + && currentUnitOfWork.supportsDirectedReads(parsedStatement)) { + options = appendQueryOption(options, Options.directedRead(this.directedReadOptions)); + } + return options; + } + + private QueryOption[] appendQueryOption(QueryOption[] options, QueryOption append) { + if (options == null || options.length == 0) { + options = new QueryOption[] {append}; + } else { + options = Arrays.copyOf(options, options.length + 1); + options[options.length - 1] = append; } return options; } @@ -1516,7 +1531,7 @@ private ResultSet internalExecuteQuery( callType, statement, analyzeMode, - mergeQueryRequestOptions(mergeQueryStatementTag(options)))); + mergeQueryRequestOptions(statement, mergeQueryStatementTag(options)))); } private AsyncResultSet internalExecuteQueryAsync( @@ -1538,7 +1553,7 @@ private AsyncResultSet internalExecuteQueryAsync( callType, statement, analyzeMode, - mergeQueryRequestOptions(mergeQueryStatementTag(options))), + mergeQueryRequestOptions(statement, mergeQueryStatementTag(options))), spanner.getAsyncExecutorProvider(), options); } 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 eb31779097..3fbc3e7a8d 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 @@ -20,6 +20,7 @@ import com.google.cloud.spanner.TimestampBound; import com.google.cloud.spanner.connection.PgTransactionMode.IsolationLevel; import com.google.protobuf.Duration; +import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.RequestOptions.Priority; /** @@ -65,6 +66,10 @@ interface ConnectionStatementExecutor { StatementResult statementShowReadOnlyStaleness(); + StatementResult statementSetDirectedRead(DirectedReadOptions directedReadOptions); + + StatementResult statementShowDirectedRead(); + StatementResult statementSetOptimizerVersion(String optimizerVersion); StatementResult statementShowOptimizerVersion(); 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 a3b4f92f14..0e8bdada22 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 @@ -28,6 +28,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DATA_BOOST_ENABLED; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DEFAULT_TRANSACTION_ISOLATION; 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_MAX_PARTITIONED_PARALLELISM; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_MAX_PARTITIONS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_OPTIMIZER_STATISTICS_PACKAGE; @@ -49,6 +50,7 @@ import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_COMMIT_TIMESTAMP; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_DATA_BOOST_ENABLED; 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_MAX_PARTITIONED_PARALLELISM; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_MAX_PARTITIONS; import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_OPTIMIZER_STATISTICS_PACKAGE; @@ -91,6 +93,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.protobuf.Duration; +import com.google.spanner.v1.DirectedReadOptions; import com.google.spanner.v1.PlanNode; import com.google.spanner.v1.QueryPlan; import com.google.spanner.v1.RequestOptions; @@ -283,6 +286,21 @@ public StatementResult statementShowReadOnlyStaleness() { SHOW_READ_ONLY_STALENESS); } + @Override + public StatementResult statementSetDirectedRead(DirectedReadOptions directedReadOptions) { + getConnection().setDirectedRead(directedReadOptions); + return noResult(SET_DIRECTED_READ); + } + + @Override + public StatementResult statementShowDirectedRead() { + DirectedReadOptions directedReadOptions = getConnection().getDirectedRead(); + return resultSet( + String.format("%sDIRECTED_READ", getNamespace(connection.getDialect())), + DirectedReadOptionsUtil.toString(directedReadOptions), + SHOW_DIRECTED_READ); + } + @Override public StatementResult statementSetOptimizerVersion(String optimizerVersion) { getConnection().setOptimizerVersion(optimizerVersion); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DirectedReadOptionsUtil.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DirectedReadOptionsUtil.java new file mode 100644 index 0000000000..8b1f8a9019 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DirectedReadOptionsUtil.java @@ -0,0 +1,55 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import com.google.cloud.spanner.SpannerExceptionFactory; +import com.google.common.base.Strings; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.util.JsonFormat; +import com.google.spanner.v1.DirectedReadOptions; + +public class DirectedReadOptionsUtil { + + /** + * Generates a valid JSON string for the given {@link DirectedReadOptions} that can be used with + * the JDBC driver. + */ + public static String toString(DirectedReadOptions directedReadOptions) { + if (directedReadOptions == null + || DirectedReadOptions.getDefaultInstance().equals(directedReadOptions)) { + return ""; + } + try { + return JsonFormat.printer().omittingInsignificantWhitespace().print(directedReadOptions); + } catch (InvalidProtocolBufferException invalidProtocolBufferException) { + throw SpannerExceptionFactory.asSpannerException(invalidProtocolBufferException); + } + } + + static DirectedReadOptions parse(String json) { + if (Strings.isNullOrEmpty(json)) { + return DirectedReadOptions.getDefaultInstance(); + } + DirectedReadOptions.Builder builder = DirectedReadOptions.newBuilder(); + try { + JsonFormat.parser().merge(json, builder); + return builder.build(); + } catch (InvalidProtocolBufferException invalidProtocolBufferException) { + throw SpannerExceptionFactory.asSpannerException(invalidProtocolBufferException); + } + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadOnlyTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadOnlyTransaction.java index 5a005ff805..63e5221362 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadOnlyTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadOnlyTransaction.java @@ -107,6 +107,11 @@ public boolean isReadOnly() { return true; } + @Override + public boolean supportsDirectedReads(ParsedStatement ignore) { + return true; + } + @Override void checkAborted() { // No-op for read-only transactions as they cannot abort. diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java index 52486ed43e..56ddc16322 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java @@ -188,6 +188,11 @@ public boolean isReadOnly() { return readOnly; } + @Override + public boolean supportsDirectedReads(ParsedStatement parsedStatement) { + return parsedStatement.isQuery(); + } + private void checkAndMarkUsed() { Preconditions.checkState(!used, "This single-use transaction has already been used"); used = true; 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 1452d906a9..d180423266 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 @@ -63,6 +63,8 @@ enum ClientSideStatementType { SHOW_COMMIT_RESPONSE, SHOW_READ_ONLY_STALENESS, SET_READ_ONLY_STALENESS, + SHOW_DIRECTED_READ, + SET_DIRECTED_READ, SHOW_OPTIMIZER_VERSION, SET_OPTIMIZER_VERSION, SHOW_OPTIMIZER_STATISTICS_PACKAGE, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java index ea315e94c0..1c8bc6a29c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java @@ -128,6 +128,14 @@ public boolean isActive() { /** @return true if this unit of work is read-only. */ boolean isReadOnly(); + /** + * @return true if this unit of work supports {@link + * com.google.spanner.v1.DirectedReadOptions} + */ + default boolean supportsDirectedReads(ParsedStatement parsedStatement) { + return false; + } + /** * Executes a query with the given options. If {@link AnalyzeMode} is set to {@link * AnalyzeMode#PLAN} or {@link AnalyzeMode#PROFILE}, the returned {@link ResultSet} will include 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 576991b8e0..20d7522961 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 @@ -76,6 +76,15 @@ "method": "statementShowReadOnlyStaleness", "exampleStatements": ["show variable read_only_staleness"] }, + { + "name": "SHOW VARIABLE DIRECTED_READ", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_DIRECTED_READ", + "regex": "(?is)\\A\\s*show\\s+variable\\s+directed_read\\s*\\z", + "method": "statementShowDirectedRead", + "exampleStatements": ["show variable directed_read"] + }, { "name": "SHOW VARIABLE OPTIMIZER_VERSION", "executorName": "ClientSideStatementNoParamExecutor", @@ -373,6 +382,21 @@ "converterName": "ClientSideStatementValueConverters$ReadOnlyStalenessConverter" } }, + { + "name": "SET DIRECTED_READ = ''|''", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_DIRECTED_READ", + "regex": "(?is)\\A\\s*set\\s+directed_read\\s*(?:=)\\s*(.*)\\z", + "method": "statementSetDirectedRead", + "exampleStatements": ["set directed_read='{\"includeReplicas\":{\"replicaSelections\":[{\"location\":\"eu-west1\",\"type\":\"READ_ONLY\"}]}}'", "set directed_read=''"], + "setStatement": { + "propertyName": "DIRECTED_READ", + "separator": "=", + "allowedValues": "'((\\S+)|())'", + "converterName": "ClientSideStatementValueConverters$DirectedReadOptionsConverter" + } + }, { "name": "SET OPTIMIZER_VERSION = ''|'LATEST'|''", "executorName": "ClientSideStatementSetExecutor", 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 cb601d7277..bd04b725c2 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 @@ -76,6 +76,15 @@ "method": "statementShowReadOnlyStaleness", "exampleStatements": ["show spanner.read_only_staleness","show variable spanner.read_only_staleness"] }, + { + "name": "SHOW [VARIABLE] SPANNER.DIRECTED_READ", + "executorName": "ClientSideStatementNoParamExecutor", + "resultType": "RESULT_SET", + "statementType": "SHOW_DIRECTED_READ", + "regex": "(?is)\\A\\s*show\\s+(?:variable\\s+)?spanner\\.directed_read\\s*\\z", + "method": "statementShowDirectedRead", + "exampleStatements": ["show spanner.directed_read", "show variable spanner.directed_read"] + }, { "name": "SHOW [VARIABLE] SPANNER.OPTIMIZER_VERSION", "executorName": "ClientSideStatementNoParamExecutor", @@ -525,6 +534,21 @@ "converterName": "ClientSideStatementValueConverters$ReadOnlyStalenessConverter" } }, + { + "name": "SET SPANNER.DIRECTED_READ =|TO ''|''", + "executorName": "ClientSideStatementSetExecutor", + "resultType": "NO_RESULT", + "statementType": "SET_DIRECTED_READ", + "regex": "(?is)\\A\\s*set\\s+spanner\\.directed_read(?:\\s*=\\s*|\\s+to\\s+)(.*)\\z", + "method": "statementSetDirectedRead", + "exampleStatements": ["set spanner.directed_read='{\"includeReplicas\":{\"replicaSelections\":[{\"location\":\"eu-west1\",\"type\":\"READ_ONLY\"}]}}'", "set spanner.directed_read=''"], + "setStatement": { + "propertyName": "SPANNER.DIRECTED_READ", + "separator": "(?:=|\\s+TO\\s+)", + "allowedValues": "'((\\S+)|())'", + "converterName": "ClientSideStatementValueConverters$DirectedReadOptionsConverter" + } + }, { "name": "SET SPANNER.OPTIMIZER_VERSION =|TO ''|'LATEST'|''", "executorName": "ClientSideStatementSetExecutor", diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java index 2c59439ce7..453535ee09 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java @@ -210,7 +210,7 @@ static boolean isRetryableResourceExhaustedException(SpannerException exception) } private void cleanUpOldDatabases(InstanceId instanceId) { - long OLD_DB_THRESHOLD_SECS = TimeUnit.SECONDS.convert(24L, TimeUnit.HOURS); + long OLD_DB_THRESHOLD_SECS = TimeUnit.SECONDS.convert(6L, TimeUnit.HOURS); Timestamp currentTimestamp = Timestamp.now(); int numDropped = 0; Page page = databaseAdminClient.listDatabases(instanceId.getInstance()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientSideStatementsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientSideStatementsTest.java index c0b1e3a58d..51503fd456 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientSideStatementsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ClientSideStatementsTest.java @@ -167,8 +167,10 @@ private static void generateTestStatements( AbstractStatementParser parser, ClientSideStatementImpl statement) { for (String sql : statement.getExampleStatements()) { log(statement.getExamplePrerequisiteStatements(), sql); - if (statement.getStatementType() != ClientSideStatementType.RUN_PARTITION) { + if (statement.getStatementType() != ClientSideStatementType.RUN_PARTITION + && statement.getStatementType() != ClientSideStatementType.SET_DIRECTED_READ) { // Partition ids are case-sensitive. + // DirectedReadOptions are case-sensitive. log(statement.getExamplePrerequisiteStatements(), upper(sql)); log(statement.getExamplePrerequisiteStatements(), lower(sql)); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadOptionsUtilTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadOptionsUtilTest.java new file mode 100644 index 0000000000..0669cb5aad --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadOptionsUtilTest.java @@ -0,0 +1,77 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static junit.framework.TestCase.assertEquals; + +import com.google.spanner.v1.DirectedReadOptions; +import com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas; +import com.google.spanner.v1.DirectedReadOptions.IncludeReplicas; +import com.google.spanner.v1.DirectedReadOptions.ReplicaSelection; +import com.google.spanner.v1.DirectedReadOptions.ReplicaSelection.Type; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Tests converting {@link DirectedReadOptions} to/from JSON. The test cases here are not very + * extensive, as it a very simple wrapper around the {@link com.google.protobuf.util.JsonFormat} + * class, which has its own test suite. The tests in this class only serve as a simple verification + * that the formatter works as expected. + */ +@RunWith(JUnit4.class) +public class DirectedReadOptionsUtilTest { + + @Test + public void testToString() { + assertRoundTrip("", DirectedReadOptions.newBuilder().build()); + assertRoundTrip( + "{\"includeReplicas\":{}}", + DirectedReadOptions.newBuilder() + .setIncludeReplicas(IncludeReplicas.newBuilder().build()) + .build()); + assertRoundTrip( + "{\"includeReplicas\":{\"replicaSelections\":[{\"location\":\"eu-west1\",\"type\":\"READ_ONLY\"}]}}", + DirectedReadOptions.newBuilder() + .setIncludeReplicas( + IncludeReplicas.newBuilder() + .addReplicaSelections( + ReplicaSelection.newBuilder() + .setType(Type.READ_ONLY) + .setLocation("eu-west1") + .build()) + .build()) + .build()); + assertRoundTrip( + "{\"excludeReplicas\":{\"replicaSelections\":[{\"location\":\"eu-west1\",\"type\":\"READ_ONLY\"}]}}", + DirectedReadOptions.newBuilder() + .setExcludeReplicas( + ExcludeReplicas.newBuilder() + .addReplicaSelections( + ReplicaSelection.newBuilder() + .setType(Type.READ_ONLY) + .setLocation("eu-west1") + .build()) + .build()) + .build()); + } + + private void assertRoundTrip(String json, DirectedReadOptions options) { + assertEquals(json, DirectedReadOptionsUtil.toString(options)); + assertEquals(options, DirectedReadOptionsUtil.parse(json)); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadTest.java new file mode 100644 index 0000000000..099c5d1047 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DirectedReadTest.java @@ -0,0 +1,317 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static junit.framework.TestCase.assertEquals; + +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.MockSpannerServiceImpl; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Statement; +import com.google.common.collect.ImmutableList; +import com.google.protobuf.ListValue; +import com.google.protobuf.Value; +import com.google.spanner.v1.*; +import com.google.spanner.v1.DirectedReadOptions.ExcludeReplicas; +import com.google.spanner.v1.DirectedReadOptions.IncludeReplicas; +import com.google.spanner.v1.DirectedReadOptions.ReplicaSelection; +import com.google.spanner.v1.StructType.Field; +import java.util.Collection; +import java.util.List; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class DirectedReadTest extends AbstractMockServerTest { + private static final Statement READ_STATEMENT = Statement.of("SELECT 1 AS C"); + + private static final Statement GOOGLESQL_DML_STATEMENT = + Statement.of("INSERT INTO T (id) VALUES (1) THEN RETURN ID"); + private static final Statement POSTGRESQL_DML_STATEMENT = + Statement.of("INSERT INTO T (id) VALUES (1) RETURNING ID"); + + @Parameters(name = "dialect = {0}") + public static Collection data() { + ImmutableList.Builder builder = ImmutableList.builder(); + for (Dialect dialect : Dialect.values()) { + builder.add(new Object[] {dialect}); + } + return builder.build(); + } + + @Parameter public Dialect dialect; + + private Dialect currentDialect; + + @BeforeClass + public static void setupQueryResults() { + com.google.spanner.v1.ResultSet resultSet = + com.google.spanner.v1.ResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setRowType( + StructType.newBuilder() + .addFields( + Field.newBuilder() + .setName("C") + .setType(Type.newBuilder().setCode(TypeCode.INT64).build()) + .build()) + .build()) + .build()) + .addRows( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("1").build()) + .build()) + .build(); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.query(READ_STATEMENT, resultSet)); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.query( + GOOGLESQL_DML_STATEMENT, + resultSet + .toBuilder() + .setStats(ResultSetStats.newBuilder().setRowCountExact(1L).build()) + .build())); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.query( + POSTGRESQL_DML_STATEMENT, + resultSet + .toBuilder() + .setStats(ResultSetStats.newBuilder().setRowCountExact(1L).build()) + .build())); + } + + @Before + public void setupDialect() { + if (currentDialect != dialect) { + // Reset the dialect result. + SpannerPool.closeSpannerPool(); + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.detectDialectResult(dialect)); + currentDialect = dialect; + } + } + + private String getVariablePrefix() { + return dialect == Dialect.POSTGRESQL ? "spanner." : ""; + } + + private Statement getDmlStatement() { + return dialect == Dialect.POSTGRESQL ? POSTGRESQL_DML_STATEMENT : GOOGLESQL_DML_STATEMENT; + } + + @After + public void clearRequests() { + mockSpanner.clearRequests(); + } + + @Test + public void testNoDirectedReadByDefault() { + try (Connection connection = createConnection()) { + for (boolean readOnly : new boolean[] {true, false}) { + for (boolean autocommit : new boolean[] {true, false}) { + connection.setAutocommit(autocommit); + connection.setReadOnly(readOnly); + + executeReadQuery(connection); + assertDirectedReadOptions(DirectedReadOptions.getDefaultInstance()); + + if (!autocommit) { + connection.commit(); + } + mockSpanner.clearRequests(); + } + } + } + } + + @Test + public void testSetDirectedRead() { + for (DirectedReadOptions expected : + new DirectedReadOptions[] { + DirectedReadOptions.newBuilder() + .setIncludeReplicas( + IncludeReplicas.newBuilder() + .addReplicaSelections( + ReplicaSelection.newBuilder() + .setLocation("eu-west1") + .setType(ReplicaSelection.Type.READ_ONLY) + .build()) + .build()) + .build(), + DirectedReadOptions.newBuilder() + .setExcludeReplicas( + ExcludeReplicas.newBuilder() + .addReplicaSelections( + ReplicaSelection.newBuilder() + .setLocation("eu-west1") + .setType(ReplicaSelection.Type.READ_ONLY) + .build()) + .build()) + .build(), + DirectedReadOptions.newBuilder().build() + }) { + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + connection.execute( + Statement.of( + String.format( + "set %sdirected_read='%s'", + getVariablePrefix(), DirectedReadOptionsUtil.toString(expected)))); + Repeat.twice( + () -> { + executeReadQuery(connection); + assertDirectedReadOptions(expected); + mockSpanner.clearRequests(); + }); + + // Reset to default. + connection.execute( + Statement.of(String.format("set %sdirected_read=''", getVariablePrefix()))); + executeReadQuery(connection); + assertDirectedReadOptions(DirectedReadOptions.getDefaultInstance()); + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testDirectedReadIsIgnoredForDmlInAutoCommit() { + DirectedReadOptions options = + DirectedReadOptions.newBuilder() + .setExcludeReplicas( + ExcludeReplicas.newBuilder() + .addReplicaSelections( + ReplicaSelection.newBuilder() + .setLocation("eu-west1") + .setType(ReplicaSelection.Type.READ_ONLY) + .build()) + .build()) + .build(); + + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + connection.execute( + Statement.of( + String.format( + "set %sdirected_read='%s'", + getVariablePrefix(), DirectedReadOptionsUtil.toString(options)))); + // DML should not use directed read. + executeDmlQuery(connection); + assertDirectedReadOptions(DirectedReadOptions.getDefaultInstance()); + } + } + + @Test + public void testDirectedReadIsIgnoredInReadWriteTransaction() { + try (Connection connection = createConnection()) { + connection.setAutocommit(false); + connection.setReadOnly(false); + + for (Statement statement : new Statement[] {READ_STATEMENT, getDmlStatement()}) { + connection.execute( + Statement.of( + String.format( + "set %sdirected_read='%s'", + getVariablePrefix(), + DirectedReadOptionsUtil.toString( + DirectedReadOptions.newBuilder() + .setIncludeReplicas( + IncludeReplicas.newBuilder() + .addReplicaSelections( + ReplicaSelection.newBuilder() + .setType(ReplicaSelection.Type.READ_WRITE) + .setLocation("us-west1") + .build()) + .build()) + .build())))); + // This uses a read/write transaction, which will ignore any DirectedReadOptions. + executeQuery(connection, statement); + assertDirectedReadOptions(DirectedReadOptions.getDefaultInstance()); + + connection.commit(); + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testDirectedReadIsUsedInReadOnlyTransaction() { + DirectedReadOptions expected = + DirectedReadOptions.newBuilder() + .setIncludeReplicas( + IncludeReplicas.newBuilder() + .addReplicaSelections( + ReplicaSelection.newBuilder() + .setType(ReplicaSelection.Type.READ_WRITE) + .setLocation("us-west1") + .build()) + .build()) + .build(); + + try (Connection connection = createConnection()) { + connection.setAutocommit(false); + connection.setReadOnly(true); + + connection.execute( + Statement.of( + String.format( + "set %sdirected_read='%s'", + getVariablePrefix(), DirectedReadOptionsUtil.toString(expected)))); + // This uses a read-only transaction, which will use the DirectedReadOptions. + // Repeatedly executing a query on the same connection will also continue to use the + // DirectedReadOptions that have been set for the connection. + Repeat.twice( + () -> { + executeReadQuery(connection); + assertDirectedReadOptions(expected); + mockSpanner.clearRequests(); + }); + } + } + + private void executeReadQuery(Connection connection) { + executeQuery(connection, READ_STATEMENT); + } + + private void executeDmlQuery(Connection connection) { + executeQuery(connection, getDmlStatement()); + } + + private void executeQuery(Connection connection, Statement statement) { + try (ResultSet resultSet = connection.executeQuery(statement)) { + //noinspection StatementWithEmptyBody + while (resultSet.next()) { + // ignore + } + } + } + + private void assertDirectedReadOptions(DirectedReadOptions expected) { + List requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class); + assertEquals(1, requests.size()); + ExecuteSqlRequest request = requests.get(0); + assertEquals(expected, request.getDirectedReadOptions()); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/Repeat.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/Repeat.java new file mode 100644 index 0000000000..b1a4559d8c --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/Repeat.java @@ -0,0 +1,33 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +/** Simple util class for repeating (test) functions. */ +class Repeat { + + /** Repeat the given {@link Runnable} twice. */ + static void twice(Runnable runnable) { + repeat(runnable, 2); + } + + /** Repeat the given {@link Runnable} n times. */ + static void repeat(Runnable runnable, int n) { + for (int ignore = 0; ignore < n; ignore++) { + runnable.run(); + } + } +} 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 0c15e5462d..878408a5fa 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 @@ -1931,6 +1931,205 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable/-read_only_staleness; NEW_CONNECTION; +show variable directed_read; +NEW_CONNECTION; +SHOW VARIABLE DIRECTED_READ; +NEW_CONNECTION; +show variable directed_read; +NEW_CONNECTION; + show variable directed_read; +NEW_CONNECTION; + show variable directed_read; +NEW_CONNECTION; + + + +show variable directed_read; +NEW_CONNECTION; +show variable directed_read ; +NEW_CONNECTION; +show variable directed_read ; +NEW_CONNECTION; +show variable directed_read + +; +NEW_CONNECTION; +show variable directed_read; +NEW_CONNECTION; +show variable directed_read; +NEW_CONNECTION; +show +variable +directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable directed_read/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-directed_read; +NEW_CONNECTION; show variable optimizer_version; NEW_CONNECTION; SHOW VARIABLE OPTIMIZER_VERSION; @@ -13196,6 +13395,394 @@ NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT set read_only_staleness='EXACT_STALENESS/-9999ns'; NEW_CONNECTION; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; + set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; + set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; + + + +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; +NEW_CONNECTION; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; +NEW_CONNECTION; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' + +; +NEW_CONNECTION; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +set +directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +set directed_read=''; +NEW_CONNECTION; + set directed_read=''; +NEW_CONNECTION; + set directed_read=''; +NEW_CONNECTION; + + + +set directed_read=''; +NEW_CONNECTION; +set directed_read='' ; +NEW_CONNECTION; +set directed_read='' ; +NEW_CONNECTION; +set directed_read='' + +; +NEW_CONNECTION; +set directed_read=''; +NEW_CONNECTION; +set directed_read=''; +NEW_CONNECTION; +set +directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read='' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set directed_read=''/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-directed_read=''; +NEW_CONNECTION; set optimizer_version='1'; NEW_CONNECTION; SET OPTIMIZER_VERSION='1'; 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 03102fd607..087b2a9aca 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 @@ -162,15 +162,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SET READ_ONLY_STALENESS='MAX_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:47.919000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:47.919000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:19.121000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:19.121000000Z' 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 2023-11-21T11:20:47.919000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:47.919000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:19.121000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:19.121000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -577,8 +577,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:48.217000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:48.217000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:19.478000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:19.478000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -586,8 +586,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:48.217000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:48.217000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:19.478000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:19.478000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -970,15 +970,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:48.474000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:48.474000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:19.808000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:19.808000000Z' 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 2023-11-21T11:20:48.475000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:19.808000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; @@ -1316,15 +1316,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:48.698000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:48.698000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:20.055000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:20.055000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:48.698000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:48.698000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:20.055000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:20.055000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -1671,15 +1671,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:48.991000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:48.991000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:20.470000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:20.470000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:48.991000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:48.991000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:20.470000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:20.470000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -1996,14 +1996,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.241000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.241000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:20.734000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:20.734000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:49.241000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:49.241000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:20.734000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:20.734000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -2325,15 +2325,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.397000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.397000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:20.932000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:20.932000000Z' 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 2023-11-21T11:20:49.397000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:20.932000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2675,15 +2675,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.565000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.565000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.099000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.099000000Z' 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 2023-11-21T11:20:49.565000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.099000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -3115,8 +3115,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.735000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.735000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.259000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.259000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -3126,7 +3126,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:49.735000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.259000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -3627,8 +3627,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.919000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.919000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.436000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.436000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; @@ -3638,7 +3638,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:49.919000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.436000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -4041,15 +4041,15 @@ NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.090000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.090000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.587000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.587000000Z' 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 2023-11-21T11:20:50.090000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.587000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -4408,14 +4408,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.216000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.769000000Z'; 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 2023-11-21T11:20:50.216000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.769000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -4765,13 +4765,13 @@ SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.371000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.960000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.371000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.960000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -5075,14 +5075,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.519000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.519000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.101000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.101000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.519000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.101000000Z'; NEW_CONNECTION; SET READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -5394,13 +5394,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.625000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.206000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.625000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.206000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -5755,8 +5755,8 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.719000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.719000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.306000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.306000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -5764,7 +5764,7 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.719000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.306000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -6199,8 +6199,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.893000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.893000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.480000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.480000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -6208,8 +6208,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.893000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:50.893000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.480000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:22.480000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -6595,15 +6595,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.087000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.087000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.662000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.662000000Z' 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 2023-11-21T11:20:51.087000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.662000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -6954,15 +6954,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 2023-11-21T11:20:51.238000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.238000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.808000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.808000000Z' 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 2023-11-21T11:20:51.238000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.238000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.808000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:22.808000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -7322,15 +7322,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.430000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.430000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.962000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.962000000Z' 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 2023-11-21T11:20:51.430000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.430000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.962000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:22.962000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -7720,16 +7720,16 @@ SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.584000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.584000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.132000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.132000000Z' 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 2023-11-21T11:20:51.584000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.584000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.132000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:23.132000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -8112,15 +8112,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.737000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.737000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.314000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.314000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:51.737000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.737000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.314000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:23.314000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -8450,14 +8450,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.883000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.883000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.477000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.477000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:51.883000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.883000000Z' +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.477000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:23.477000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -8788,15 +8788,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.014000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.014000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.602000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.602000000Z' 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 2023-11-21T11:20:52.014000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.602000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -9206,8 +9206,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 2023-11-21T11:20:52.137000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.137000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.741000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.741000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -9216,7 +9216,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 2023-11-21T11:20:52.137000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.741000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -9625,14 +9625,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 2023-11-21T11:20:52.325000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.906000000Z'; 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 2023-11-21T11:20:52.325000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.906000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -9982,13 +9982,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.433000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.025000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:52.433000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.025000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -10422,8 +10422,8 @@ SET TRANSACTION READ ONLY; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.570000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.570000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.143000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.143000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -10433,7 +10433,7 @@ SET TRANSACTION READ ONLY; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:52.570000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.143000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -10833,15 +10833,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.741000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.741000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.282000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.282000000Z' 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 2023-11-21T11:20:52.741000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.282000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -11187,15 +11187,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET READ_ONLY_STALENESS='EXACT_STALENESS 10s'; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.859000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.859000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.383000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.383000000Z' 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 2023-11-21T11:20:52.859000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.383000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -11635,8 +11635,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:53.021000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:53.021000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.512000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.512000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -11646,7 +11646,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:53.021000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.512000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -12155,8 +12155,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:53.401000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:53.401000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.703000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.703000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; @@ -12166,7 +12166,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:53.401000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.703000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -12571,15 +12571,15 @@ NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:53.677000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:53.677000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.875000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.875000000Z' 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 2023-11-21T11:20:53.677000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.875000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -12942,14 +12942,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:54.023000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.992000000Z'; 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 2023-11-21T11:20:54.024000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.992000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -13304,13 +13304,13 @@ SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:54.361000000Z'; +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:25.198000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:54.361000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:25.198000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -13624,14 +13624,14 @@ SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; -SET READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:54.579000000Z'; -@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:54.579000000Z' +SET READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:25.346000000Z'; +@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:25.346000000Z' SHOW VARIABLE READ_ONLY_STALENESS; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; @EXPECT EXCEPTION FAILED_PRECONDITION -SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:54.579000000Z'; +SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:25.346000000Z'; NEW_CONNECTION; SET READONLY=FALSE; SET AUTOCOMMIT=FALSE; 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 9c66ea40b1..e8843ab6aa 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 @@ -3855,6 +3855,403 @@ NEW_CONNECTION; @EXPECT EXCEPTION UNIMPLEMENTED show variable/-spanner.read_only_staleness; NEW_CONNECTION; +show spanner.directed_read; +NEW_CONNECTION; +SHOW SPANNER.DIRECTED_READ; +NEW_CONNECTION; +show spanner.directed_read; +NEW_CONNECTION; + show spanner.directed_read; +NEW_CONNECTION; + show spanner.directed_read; +NEW_CONNECTION; + + + +show spanner.directed_read; +NEW_CONNECTION; +show spanner.directed_read ; +NEW_CONNECTION; +show spanner.directed_read ; +NEW_CONNECTION; +show spanner.directed_read + +; +NEW_CONNECTION; +show spanner.directed_read; +NEW_CONNECTION; +show spanner.directed_read; +NEW_CONNECTION; +show +spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show%spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show_spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show&spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show$spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show@spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show!spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show*spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show(spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show)spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show-spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show+spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show-#spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show/spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show\spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show?spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show-/spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show/#spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show spanner.directed_read/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +show/-spanner.directed_read; +NEW_CONNECTION; +show variable spanner.directed_read; +NEW_CONNECTION; +SHOW VARIABLE SPANNER.DIRECTED_READ; +NEW_CONNECTION; +show variable spanner.directed_read; +NEW_CONNECTION; + show variable spanner.directed_read; +NEW_CONNECTION; + show variable spanner.directed_read; +NEW_CONNECTION; + + + +show variable spanner.directed_read; +NEW_CONNECTION; +show variable spanner.directed_read ; +NEW_CONNECTION; +show variable spanner.directed_read ; +NEW_CONNECTION; +show variable spanner.directed_read + +; +NEW_CONNECTION; +show variable spanner.directed_read; +NEW_CONNECTION; +show variable spanner.directed_read; +NEW_CONNECTION; +show +variable +spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read%; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable%spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read_; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable_spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read&; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable&spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read$; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable$spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read@; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable@spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read!; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable!spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read*; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable*spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read(; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable(spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read); +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable)spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read+; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable+spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read-#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-#spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read\; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable\spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read?; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable?spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read-/; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable-/spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read/#; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/#spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-show variable spanner.directed_read; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable spanner.directed_read/-; +NEW_CONNECTION; +@EXPECT EXCEPTION UNIMPLEMENTED +show variable/-spanner.directed_read; +NEW_CONNECTION; show spanner.optimizer_version; NEW_CONNECTION; SHOW SPANNER.OPTIMIZER_VERSION; @@ -62155,6 +62552,394 @@ NEW_CONNECTION; @EXPECT EXCEPTION INVALID_ARGUMENT set spanner.read_only_staleness to 'EXACT_STALENESS/-9999ns'; NEW_CONNECTION; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; + set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; + set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; + + + +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; +NEW_CONNECTION; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' ; +NEW_CONNECTION; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' + +; +NEW_CONNECTION; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +set +spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-spanner.directed_read='{"includeReplicas":{"replicaSelections":[{"location":"eu-west1","type":"READ_ONLY"}]}}'; +NEW_CONNECTION; +set spanner.directed_read=''; +NEW_CONNECTION; + set spanner.directed_read=''; +NEW_CONNECTION; + set spanner.directed_read=''; +NEW_CONNECTION; + + + +set spanner.directed_read=''; +NEW_CONNECTION; +set spanner.directed_read='' ; +NEW_CONNECTION; +set spanner.directed_read='' ; +NEW_CONNECTION; +set spanner.directed_read='' + +; +NEW_CONNECTION; +set spanner.directed_read=''; +NEW_CONNECTION; +set spanner.directed_read=''; +NEW_CONNECTION; +set +spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +foo set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read='' bar; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +%set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''%; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set%spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +_set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''_; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set_spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +&set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''&; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set&spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +$set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''$; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set$spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +@set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''@; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set@spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +!set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''!; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set!spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +*set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''*; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set*spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +(set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''(; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set(spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +)set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''); +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set)spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT ++set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''+; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set+spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-#set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''-#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-#spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +\set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''\; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set\spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +?set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''?; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set?spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +-/set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''-/; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set-/spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/#set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''/#; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/#spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +/-set spanner.directed_read=''; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set spanner.directed_read=''/-; +NEW_CONNECTION; +@EXPECT EXCEPTION INVALID_ARGUMENT +set/-spanner.directed_read=''; +NEW_CONNECTION; set spanner.optimizer_version='1'; NEW_CONNECTION; SET SPANNER.OPTIMIZER_VERSION='1'; 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 f1e2847b2f..32f07949e9 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 @@ -162,15 +162,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 2023-11-21T11:20:48.073000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:48.073000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:19.303000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:19.303000000Z' 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 2023-11-21T11:20:48.073000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:48.073000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:19.303000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:19.303000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -577,8 +577,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:48.359000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:48.359000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:19.659000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:19.659000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -586,8 +586,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:48.359000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:48.359000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:19.659000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:19.659000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -970,15 +970,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:48.581000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:48.581000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:19.923000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:19.923000000Z' 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 2023-11-21T11:20:48.581000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:19.923000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; @@ -1316,15 +1316,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:48.846000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:48.846000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:20.233000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:20.233000000Z' 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 2023-11-21T11:20:48.846000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:48.846000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:20.233000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:20.233000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -1671,15 +1671,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.135000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.135000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:20.600000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:20.600000000Z' 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 2023-11-21T11:20:49.135000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:49.135000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:20.600000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:20.600000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -1996,14 +1996,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.319000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.319000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:20.834000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:20.834000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:49.319000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:49.319000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:20.834000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:20.834000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -2325,15 +2325,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.485000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.485000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.015000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.015000000Z' 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 2023-11-21T11:20:49.485000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.015000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -2675,15 +2675,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 2023-11-21T11:20:49.643000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.643000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.175000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.175000000Z' 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 2023-11-21T11:20:49.643000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.175000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -3115,8 +3115,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:49.827000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:49.827000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.351000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.351000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -3126,7 +3126,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:49.827000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.351000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -3627,8 +3627,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.013000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.013000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.518000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.518000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; @@ -3638,7 +3638,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.013000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.518000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -4041,15 +4041,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.147000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.147000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.677000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:21.677000000Z' 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 2023-11-21T11:20:50.147000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.677000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -4408,14 +4408,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.291000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:21.872000000Z'; 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 2023-11-21T11:20:50.291000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:21.872000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -4765,13 +4765,13 @@ SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.445000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.037000000Z'; 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 2023-11-21T11:20:50.445000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.037000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -5075,14 +5075,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.572000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.572000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.154000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.154000000Z' 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 2023-11-21T11:20:50.572000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.154000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=TRUE; SET AUTOCOMMIT=FALSE; @@ -5394,13 +5394,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.673000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.255000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.673000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.255000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -5755,8 +5755,8 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.763000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.763000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.355000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.355000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -5764,7 +5764,7 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; SET TRANSACTION READ ONLY; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.763000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.355000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -6199,8 +6199,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:50.993000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:50.993000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.572000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.572000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -6208,8 +6208,8 @@ SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; UPDATE foo SET bar=1; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:50.993000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:50.993000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.572000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:22.572000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -6595,15 +6595,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.171000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.171000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.724000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.724000000Z' 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 2023-11-21T11:20:51.171000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.724000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @@ -6954,15 +6954,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 2023-11-21T11:20:51.339000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.339000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:22.886000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:22.886000000Z' 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 2023-11-21T11:20:51.339000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.339000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:22.886000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:22.886000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -7322,15 +7322,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; UPDATE foo SET bar=1; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.508000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.508000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.046000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.046000000Z' 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 2023-11-21T11:20:51.508000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.508000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.046000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:23.046000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -7720,16 +7720,16 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.661000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.661000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.227000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.227000000Z' 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 2023-11-21T11:20:51.661000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.661000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.227000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:23.227000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -8112,15 +8112,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; SELECT 1 AS TEST; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.816000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.816000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.402000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.402000000Z' 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 2023-11-21T11:20:51.816000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.816000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.402000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:23.402000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -8450,14 +8450,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:51.956000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:51.956000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.535000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.535000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=TRUE; -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:51.956000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2023-11-21T11:20:51.956000000Z' +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.535000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2024-01-31T15:41:23.535000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -8788,15 +8788,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.071000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.071000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.671000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.671000000Z' 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 2023-11-21T11:20:52.071000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.671000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -9206,8 +9206,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 2023-11-21T11:20:52.257000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.257000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.829000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:23.829000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -9216,7 +9216,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 2023-11-21T11:20:52.257000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.829000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -9625,14 +9625,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 2023-11-21T11:20:52.381000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:23.965000000Z'; 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 2023-11-21T11:20:52.381000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:23.965000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -9982,13 +9982,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.480000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.077000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; START BATCH DDL; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:52.480000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.077000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -10422,8 +10422,8 @@ SET TRANSACTION READ ONLY; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.666000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.666000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.219000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.219000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -10433,7 +10433,7 @@ SET TRANSACTION READ ONLY; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:52.666000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.219000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -10833,15 +10833,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SET TRANSACTION READ ONLY; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:52.788000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.788000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.331000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.331000000Z' 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 2023-11-21T11:20:52.788000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.331000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -11187,15 +11187,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 2023-11-21T11:20:52.927000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:52.927000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.438000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.438000000Z' 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 2023-11-21T11:20:52.927000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.438000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -11635,8 +11635,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; ROLLBACK; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:53.139000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:53.139000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.605000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.605000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -11646,7 +11646,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; ROLLBACK; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:53.139000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.605000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -12155,8 +12155,8 @@ BEGIN TRANSACTION; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; COMMIT; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:53.540000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:53.540000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.798000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.798000000Z' SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; @@ -12166,7 +12166,7 @@ BEGIN TRANSACTION; SELECT 1 AS TEST; COMMIT; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2023-11-21T11:20:53.540000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.798000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -12571,15 +12571,15 @@ NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; BEGIN TRANSACTION; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:53.794000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:53.794000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:24.928000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:24.928000000Z' 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 2023-11-21T11:20:53.794000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:24.928000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -12942,14 +12942,14 @@ SET AUTOCOMMIT=FALSE; @EXPECT RESULT_SET 'TEST',1 SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:54.142000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:25.098000000Z'; 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 2023-11-21T11:20:54.142000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:25.098000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -13304,13 +13304,13 @@ SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; SELECT 1 AS TEST; @EXPECT EXCEPTION FAILED_PRECONDITION -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:54.485000000Z'; +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:25.279000000Z'; 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 2023-11-21T11:20:54.485000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:25.279000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; @@ -13624,14 +13624,14 @@ SHOW VARIABLE SPANNER.READ_ONLY_STALENESS; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE; -SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2023-11-21T11:20:54.634000000Z'; -@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2023-11-21T11:20:54.634000000Z' +SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2024-01-31T15:41:25.401000000Z'; +@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2024-01-31T15:41:25.401000000Z' 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 2023-11-21T11:20:54.634000000Z'; +SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2024-01-31T15:41:25.401000000Z'; NEW_CONNECTION; SET SPANNER.READONLY=FALSE; SET AUTOCOMMIT=FALSE;