getTestTimestampBounds() {
private void testSetReadOnlyStaleness(final TimestampBound staleness) {
try (Connection connection = getConnection()) {
if (isSetReadOnlyStalenessAllowed(staleness.getMode())) {
- log(
- "SET READ_ONLY_STALENESS='"
+ logWithNamespace(
+ "SET %sREAD_ONLY_STALENESS='"
+ ReadOnlyStalenessUtil.timestampBoundToString(staleness)
+ "';");
connection.setReadOnlyStaleness(staleness);
- log(
- "@EXPECT RESULT_SET 'READ_ONLY_STALENESS','"
+ logWithNamespace(
+ "@EXPECT RESULT_SET '%sREAD_ONLY_STALENESS','"
+ ReadOnlyStalenessUtil.timestampBoundToString(staleness)
+ "'");
- log("SHOW VARIABLE READ_ONLY_STALENESS;");
+ logWithNamespace("SHOW VARIABLE %sREAD_ONLY_STALENESS;");
assertThat(connection.getReadOnlyStaleness(), is(equalTo(staleness)));
} else {
expectSpannerException(
staleness.getMode() + " should not be allowed",
t -> {
log("@EXPECT EXCEPTION FAILED_PRECONDITION");
- log(
- "SET READ_ONLY_STALENESS='"
+ logWithNamespace(
+ "SET %sREAD_ONLY_STALENESS='"
+ ReadOnlyStalenessUtil.timestampBoundToString(staleness)
+ "';");
t.setReadOnlyStaleness(staleness);
@@ -600,12 +651,12 @@ private void testSetReadOnlyStaleness(final TimestampBound staleness) {
public void testGetReadOnlyStaleness() {
try (Connection connection = getConnection()) {
if (isGetReadOnlyStalenessAllowed()) {
- log("@EXPECT RESULT_SET 'READ_ONLY_STALENESS'");
- log("SHOW VARIABLE READ_ONLY_STALENESS;");
+ logWithNamespace("@EXPECT RESULT_SET '%sREAD_ONLY_STALENESS'");
+ logWithNamespace("SHOW VARIABLE %sREAD_ONLY_STALENESS;");
assertThat(connection.getReadOnlyStaleness(), is(notNullValue()));
} else {
log("@EXPECT EXCEPTION FAILED_PRECONDITION");
- log("SHOW VARIABLE READ_ONLY_STALENESS;");
+ logWithNamespace("SHOW VARIABLE %sREAD_ONLY_STALENESS;");
exception.expect(matchCode(ErrorCode.FAILED_PRECONDITION));
connection.getReadOnlyStaleness();
}
@@ -621,16 +672,16 @@ public void testSetOptimizerVersion() {
try (Connection connection = getConnection()) {
if (isSetOptimizerVersionAllowed()) {
for (String version : new String[] {"1", "2", "latest", ""}) {
- log("SET OPTIMIZER_VERSION='" + version + "';");
+ logWithNamespace("SET %sOPTIMIZER_VERSION='" + version + "';");
connection.setOptimizerVersion(version);
- log("@EXPECT RESULT_SET 'OPTIMIZER_VERSION','" + version + "'");
- log("SHOW VARIABLE OPTIMIZER_VERSION;");
+ logWithNamespace("@EXPECT RESULT_SET '%sOPTIMIZER_VERSION','" + version + "'");
+ logWithNamespace("SHOW VARIABLE %sOPTIMIZER_VERSION;");
assertThat(connection.getOptimizerVersion(), is(equalTo(version)));
}
} else {
log("@EXPECT EXCEPTION FAILED_PRECONDITION");
- log("SET OPTIMIZER_VERSION='1';");
+ logWithNamespace("SET %sOPTIMIZER_VERSION='1';");
exception.expect(matchCode(ErrorCode.FAILED_PRECONDITION));
connection.setOptimizerVersion("1");
}
@@ -645,12 +696,12 @@ boolean isGetOptimizerVersionAllowed() {
public void testGetOptimizerVersion() {
try (Connection connection = getConnection()) {
if (isGetOptimizerVersionAllowed()) {
- log("@EXPECT RESULT_SET 'OPTIMIZER_VERSION'");
- log("SHOW VARIABLE OPTIMIZER_VERSION;");
+ logWithNamespace("@EXPECT RESULT_SET '%sOPTIMIZER_VERSION'");
+ logWithNamespace("SHOW VARIABLE %sOPTIMIZER_VERSION;");
assertThat(connection.getOptimizerVersion(), is(notNullValue()));
} else {
log("@EXPECT EXCEPTION FAILED_PRECONDITION");
- log("SHOW VARIABLE OPTIMIZER_VERSION;");
+ logWithNamespace("SHOW VARIABLE %sOPTIMIZER_VERSION;");
exception.expect(matchCode(ErrorCode.FAILED_PRECONDITION));
connection.getOptimizerVersion();
}
@@ -666,16 +717,17 @@ public void testSetOptimizerStatisticsPackage() {
try (Connection connection = getConnection()) {
if (isSetOptimizerStatisticsPackageAllowed()) {
for (String statisticsPackage : new String[] {"custom-package", ""}) {
- log("SET OPTIMIZER_STATISTICS_PACKAGE='" + statisticsPackage + "';");
+ logWithNamespace("SET %sOPTIMIZER_STATISTICS_PACKAGE='" + statisticsPackage + "';");
connection.setOptimizerStatisticsPackage(statisticsPackage);
- log("@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','" + statisticsPackage + "'");
- log("SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;");
+ logWithNamespace(
+ "@EXPECT RESULT_SET '%sOPTIMIZER_STATISTICS_PACKAGE','" + statisticsPackage + "'");
+ logWithNamespace("SHOW VARIABLE %sOPTIMIZER_STATISTICS_PACKAGE;");
assertThat(connection.getOptimizerStatisticsPackage(), is(equalTo(statisticsPackage)));
}
} else {
log("@EXPECT EXCEPTION FAILED_PRECONDITION");
- log("SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';");
+ logWithNamespace("SET %sOPTIMIZER_STATISTICS_PACKAGE='custom-package';");
exception.expect(matchCode(ErrorCode.FAILED_PRECONDITION));
connection.setOptimizerStatisticsPackage("custom-package");
}
@@ -690,12 +742,12 @@ boolean isGetOptimizerStatisticsPackageAllowed() {
public void testGetOptimizerStatisticsPackage() {
try (Connection connection = getConnection()) {
if (isGetOptimizerStatisticsPackageAllowed()) {
- log("@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'");
- log("SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;");
+ logWithNamespace("@EXPECT RESULT_SET '%sOPTIMIZER_STATISTICS_PACKAGE'");
+ logWithNamespace("SHOW VARIABLE %sOPTIMIZER_STATISTICS_PACKAGE;");
assertThat(connection.getOptimizerStatisticsPackage(), is(notNullValue()));
} else {
log("@EXPECT EXCEPTION FAILED_PRECONDITION");
- log("SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;");
+ logWithNamespace("SHOW VARIABLE %sOPTIMIZER_STATISTICS_PACKAGE;");
exception.expect(matchCode(ErrorCode.FAILED_PRECONDITION));
connection.getOptimizerStatisticsPackage();
}
@@ -754,12 +806,12 @@ public void testIsTransactionStarted() {
public void testGetReadTimestamp() {
try (Connection connection = getConnection()) {
if (isGetReadTimestampAllowed()) {
- log("@EXPECT RESULT_SET 'READ_TIMESTAMP'");
- log("SHOW VARIABLE READ_TIMESTAMP;");
+ logWithNamespace("@EXPECT RESULT_SET '%sREAD_TIMESTAMP'");
+ logWithNamespace("SHOW VARIABLE %sREAD_TIMESTAMP;");
assertThat(connection.getReadTimestamp(), is(notNullValue()));
} else {
- log("@EXPECT RESULT_SET 'READ_TIMESTAMP',null");
- log("SHOW VARIABLE READ_TIMESTAMP;");
+ logWithNamespace("@EXPECT RESULT_SET '%sREAD_TIMESTAMP',null");
+ logWithNamespace("SHOW VARIABLE %sREAD_TIMESTAMP;");
exception.expect(matchCode(ErrorCode.FAILED_PRECONDITION));
connection.getReadTimestamp();
}
@@ -772,12 +824,12 @@ public void testGetReadTimestamp() {
public void testGetCommitTimestamp() {
try (Connection connection = getConnection()) {
if (isGetCommitTimestampAllowed()) {
- log("@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'");
- log("SHOW VARIABLE COMMIT_TIMESTAMP;");
+ logWithNamespace("@EXPECT RESULT_SET '%sCOMMIT_TIMESTAMP'");
+ logWithNamespace("SHOW VARIABLE %sCOMMIT_TIMESTAMP;");
assertThat(connection.getCommitTimestamp(), is(notNullValue()));
} else {
- log("@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null");
- log("SHOW VARIABLE COMMIT_TIMESTAMP;");
+ logWithNamespace("@EXPECT RESULT_SET '%sCOMMIT_TIMESTAMP',null");
+ logWithNamespace("SHOW VARIABLE %sCOMMIT_TIMESTAMP;");
exception.expect(matchCode(ErrorCode.FAILED_PRECONDITION));
connection.getCommitTimestamp();
}
@@ -788,12 +840,12 @@ public void testGetCommitTimestamp() {
public void testGetCommitResponse() {
try (Connection connection = getConnection()) {
if (isGetCommitTimestampAllowed()) {
- log("@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'");
- log("SHOW VARIABLE COMMIT_RESPONSE;");
+ logWithNamespace("@EXPECT RESULT_SET '%sCOMMIT_TIMESTAMP'");
+ logWithNamespace("SHOW VARIABLE %sCOMMIT_RESPONSE;");
assertThat(connection.getCommitResponse(), is(notNullValue()));
} else {
- log("@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null");
- log("SHOW VARIABLE COMMIT_RESPONSE;");
+ logWithNamespace("@EXPECT RESULT_SET '%sCOMMIT_TIMESTAMP',null");
+ logWithNamespace("SHOW VARIABLE %sCOMMIT_RESPONSE;");
exception.expect(matchCode(ErrorCode.FAILED_PRECONDITION));
connection.getCommitResponse();
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractSqlScriptTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractSqlScriptTest.java
index 11e27802214..f508f7c44c4 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractSqlScriptTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractSqlScriptTest.java
@@ -50,8 +50,9 @@ public GenericConnection getConnection() {
ConnectionImplTest.createConnection(
ConnectionOptions.newBuilder()
.setCredentials(NoCredentials.getInstance())
- .setUri(ConnectionImplTest.URI + ";dialect=" + dialect.name())
- .build()));
+ .setUri(ConnectionImplTest.URI)
+ .build(),
+ dialect));
}
}
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutocommitDmlModeConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutocommitDmlModeConverterTest.java
index c05e17a3b9d..dcfeb139c32 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutocommitDmlModeConverterTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AutocommitDmlModeConverterTest.java
@@ -22,19 +22,28 @@
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException;
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.AutocommitDmlModeConverter;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
-@RunWith(JUnit4.class)
+@RunWith(Parameterized.class)
public class AutocommitDmlModeConverterTest {
+ @Parameter public Dialect dialect;
+
+ @Parameters(name = "dialect = {0}")
+ public static Object[] data() {
+ return Dialect.values();
+ }
@Test
public void testConvert() throws CompileException {
String allowedValues =
- ReadOnlyStalenessConverterTest.getAllowedValues(AutocommitDmlModeConverter.class);
+ ReadOnlyStalenessConverterTest.getAllowedValues(AutocommitDmlModeConverter.class, dialect);
assertThat(allowedValues, is(notNullValue()));
AutocommitDmlModeConverter converter = new AutocommitDmlModeConverter(allowedValues);
assertThat(converter.convert("transactional"), is(equalTo(AutocommitDmlMode.TRANSACTIONAL)));
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginPgTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginPgTransactionTest.java
new file mode 100644
index 00000000000..3f36043f164
--- /dev/null
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BeginPgTransactionTest.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2022 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 org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import com.google.cloud.spanner.Dialect;
+import com.google.cloud.spanner.Statement;
+import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement;
+import com.google.cloud.spanner.connection.AbstractStatementParser.StatementType;
+import com.google.common.collect.ImmutableList;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class BeginPgTransactionTest {
+ private final AbstractStatementParser parser =
+ AbstractStatementParser.getInstance(Dialect.POSTGRESQL);
+
+ @Test
+ public void testBeginWithNoOption() {
+ ConnectionImpl connection = mock(ConnectionImpl.class);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
+
+ int index = 1;
+ for (String sql :
+ ImmutableList.of(
+ "begin",
+ "begin transaction",
+ "begin work",
+ "start",
+ "start transaction",
+ "start work",
+ "begin isolation level default",
+ "begin transaction isolation level default",
+ "begin work isolation level default",
+ "start isolation level default",
+ "start transaction isolation level default",
+ "start work isolation level default",
+ "begin isolation level serializable",
+ "begin transaction isolation level serializable",
+ "begin work isolation level serializable",
+ "start isolation level serializable",
+ "start transaction isolation level serializable",
+ "start work isolation level serializable")) {
+ ParsedStatement statement = parser.parse(Statement.of(sql));
+ assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType());
+ statement.getClientSideStatement().execute(executor, sql);
+
+ verify(connection, times(index)).beginTransaction();
+ verify(connection, never()).setTransactionMode(any());
+ index++;
+ }
+ }
+
+ @Test
+ public void testBeginReadOnly() {
+ ConnectionImpl connection = mock(ConnectionImpl.class);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
+
+ int index = 1;
+ for (String sql :
+ ImmutableList.of(
+ "begin read only",
+ "begin transaction read only",
+ "begin work read only",
+ "start read only",
+ "start transaction read only",
+ "start work read only")) {
+ ParsedStatement statement = parser.parse(Statement.of(sql));
+ assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType());
+ statement.getClientSideStatement().execute(executor, sql);
+
+ verify(connection, times(index)).beginTransaction();
+ verify(connection, times(index)).setTransactionMode(TransactionMode.READ_ONLY_TRANSACTION);
+ verify(connection, never()).setTransactionMode(TransactionMode.READ_WRITE_TRANSACTION);
+ index++;
+ }
+ }
+
+ @Test
+ public void testBeginReadWrite() {
+ ConnectionImpl connection = mock(ConnectionImpl.class);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
+
+ int index = 1;
+ for (String sql :
+ ImmutableList.of(
+ "begin read write",
+ "begin transaction read write",
+ "begin work read write",
+ "start read write",
+ "start transaction read write",
+ "start work read write")) {
+ ParsedStatement statement = parser.parse(Statement.of(sql));
+ assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType());
+ statement.getClientSideStatement().execute(executor, sql);
+
+ verify(connection, times(index)).beginTransaction();
+ verify(connection, times(index)).setTransactionMode(TransactionMode.READ_WRITE_TRANSACTION);
+ verify(connection, never()).setTransactionMode(TransactionMode.READ_ONLY_TRANSACTION);
+ index++;
+ }
+ }
+}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BooleanConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BooleanConverterTest.java
index 98bd1ec1c7c..551848dea9b 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BooleanConverterTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/BooleanConverterTest.java
@@ -22,18 +22,28 @@
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException;
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.BooleanConverter;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
-@RunWith(JUnit4.class)
+@RunWith(Parameterized.class)
public class BooleanConverterTest {
+ @Parameter public Dialect dialect;
+
+ @Parameters(name = "dialect = {0}")
+ public static Object[] data() {
+ return Dialect.values();
+ }
@Test
public void testConvert() throws CompileException {
- String allowedValues = ReadOnlyStalenessConverterTest.getAllowedValues(BooleanConverter.class);
+ String allowedValues =
+ ReadOnlyStalenessConverterTest.getAllowedValues(BooleanConverter.class, dialect);
assertThat(allowedValues, is(notNullValue()));
BooleanConverter converter = new BooleanConverter(allowedValues);
assertThat(converter.convert("true"), is(equalTo(Boolean.TRUE)));
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 629d8bbc6c7..caf73f02271 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
@@ -16,7 +16,9 @@
package com.google.cloud.spanner.connection;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.ErrorCode;
+import com.google.cloud.spanner.SpannerExceptionFactory;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
@@ -30,32 +32,44 @@
/**
* Test that runs a pre-generated sql script for {@link ClientSideStatement}s. The sql script can be
- * generated by running mvn -P generate-test-sql-scripts compile It is only necessary
- * to generate a new test script if a new {@link ClientSideStatement} has been added, or the
- * behavior of an existing {@link ClientSideStatement} has changed.
+ * generated by running
+ * mvn -Ddo_log_statements=true exec:java -Dexec.mainClass=com.google.cloud.spanner.connection.SqlTestScriptsGenerator -Dexec.classpathScope="test"
+ * It is only necessary to generate a new test script if a new {@link ClientSideStatement}
+ * has been added, or the behavior of an existing {@link ClientSideStatement} has changed.
*
* This class does not need to be implemented for the client libraries of other programming
* languages. All test cases are covered by the sql file ClientSideStatementsTest.sql.
*/
public class ClientSideStatementsTest extends AbstractSqlScriptTest {
+ private static String getScriptFile(Dialect dialect) {
+ switch (dialect) {
+ case GOOGLE_STANDARD_SQL:
+ return "ClientSideStatementsTest.sql";
+ case POSTGRESQL:
+ return "postgresql/ClientSideStatementsTest.sql";
+ default:
+ throw SpannerExceptionFactory.newSpannerException(
+ ErrorCode.INVALID_ARGUMENT, "Unknown or unsupported dialect: " + dialect);
+ }
+ }
+
@Test
public void testExecuteClientSideStatementsScript() throws Exception {
SqlScriptVerifier verifier = new SqlScriptVerifier(new TestConnectionProvider(dialect));
- verifier.verifyStatementsInFile("ClientSideStatementsTest.sql", getClass(), true);
+ verifier.verifyStatementsInFile(getScriptFile(dialect), getClass(), true);
}
- private static final String SCRIPT_FILE =
- "src/test/resources/com/google/cloud/spanner/connection/ClientSideStatementsTest.sql";
private static PrintWriter writer;
/** Generates the test script file */
- static void generateTestScript() throws Exception {
+ static void generateTestScript(Dialect dialect) throws Exception {
+ AbstractStatementParser parser = AbstractStatementParser.getInstance(dialect);
try {
- openLog();
- ClientSideStatements statements = ClientSideStatements.INSTANCE;
+ openLog(dialect);
+ ClientSideStatements statements = ClientSideStatements.getInstance(dialect);
for (ClientSideStatementImpl statement : statements.getCompiledStatements()) {
- generateTestStatements(statement);
+ generateTestStatements(parser, statement);
}
} finally {
closeLog();
@@ -84,12 +98,16 @@ private static void writeLog(String statement) {
writer.println(statement + ";");
}
- private static void openLog() {
+ private static void openLog(Dialect dialect) {
try {
writer =
new PrintWriter(
new OutputStreamWriter(
- new FileOutputStream(SCRIPT_FILE, false), StandardCharsets.UTF_8),
+ new FileOutputStream(
+ "src/test/resources/com/google/cloud/spanner/connection/"
+ + getScriptFile(dialect),
+ false),
+ StandardCharsets.UTF_8),
true);
} catch (IOException e) {
throw new RuntimeException(e);
@@ -104,7 +122,8 @@ public static void closeLog() {
}
/** Generates test statements for all {@link ClientSideStatement}s */
- private static void generateTestStatements(ClientSideStatementImpl statement) {
+ private static void generateTestStatements(
+ AbstractStatementParser parser, ClientSideStatementImpl statement) {
for (String sql : statement.getExampleStatements()) {
log(statement.getExamplePrerequisiteStatements(), sql);
log(statement.getExamplePrerequisiteStatements(), upper(sql));
@@ -126,7 +145,9 @@ private static void generateTestStatements(ClientSideStatementImpl statement) {
log(
statement.getExamplePrerequisiteStatements(),
withInvalidSuffix(sql),
- statement.isQuery() ? ErrorCode.UNIMPLEMENTED : ErrorCode.INVALID_ARGUMENT);
+ parser.isQuery(withInvalidSuffix(sql))
+ ? ErrorCode.UNIMPLEMENTED
+ : ErrorCode.INVALID_ARGUMENT);
final String[] replacements = {
"%", "_", "&", "$", "@", "!", "*", "(", ")", "-", "+", "-#", "/", "\\", "?", "-/", "/#",
@@ -140,11 +161,15 @@ private static void generateTestStatements(ClientSideStatementImpl statement) {
log(
statement.getExamplePrerequisiteStatements(),
withSuffix(replacement, sql),
- statement.isQuery() ? ErrorCode.UNIMPLEMENTED : ErrorCode.INVALID_ARGUMENT);
+ parser.isQuery(withSuffix(replacement, sql))
+ ? ErrorCode.UNIMPLEMENTED
+ : ErrorCode.INVALID_ARGUMENT);
log(
statement.getExamplePrerequisiteStatements(),
replaceLastSpaceWith(replacement, sql),
- statement.isQuery() ? ErrorCode.UNIMPLEMENTED : ErrorCode.INVALID_ARGUMENT);
+ parser.isQuery(replaceLastSpaceWith(replacement, sql))
+ ? ErrorCode.UNIMPLEMENTED
+ : ErrorCode.INVALID_ARGUMENT);
}
}
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplAutocommitReadOnlyTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplAutocommitReadOnlyTest.java
index 246dc03bb12..58e2c6f3e77 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplAutocommitReadOnlyTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplAutocommitReadOnlyTest.java
@@ -43,7 +43,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -190,7 +190,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -341,7 +341,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -490,7 +490,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -640,7 +640,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -794,13 +794,13 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
TimestampBound staleness = TimestampBound.ofMaxStaleness(10L, TimeUnit.SECONDS);
- log(
- "SET READ_ONLY_STALENESS='"
+ logWithNamespace(
+ "SET %sREAD_ONLY_STALENESS='"
+ ReadOnlyStalenessUtil.timestampBoundToString(staleness)
+ "';");
connection.setReadOnlyStaleness(staleness);
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplAutocommitReadWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplAutocommitReadWriteTest.java
index 48eeb5a96d0..7edfe704c75 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplAutocommitReadWriteTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplAutocommitReadWriteTest.java
@@ -42,7 +42,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -187,7 +187,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -336,7 +336,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -485,7 +485,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -631,7 +631,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -777,7 +777,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -926,7 +926,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -1075,7 +1075,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
@@ -1225,7 +1225,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=TRUE;");
connection.setAutocommit(true);
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.java
index 61ba525efdb..b9cfac15080 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplGeneratedSqlScriptTest.java
@@ -16,6 +16,8 @@
package com.google.cloud.spanner.connection;
+import com.google.cloud.spanner.Dialect;
+import com.google.cloud.spanner.connection.ConnectionImplAutocommitReadOnlyTest.ConnectionImplAutocommitReadOnlyNoActionsTest;
import com.google.common.collect.ImmutableSet;
import com.google.common.reflect.ClassPath;
import com.google.common.reflect.ClassPath.ClassInfo;
@@ -33,18 +35,29 @@
* connection reacts correctly in all possible states (i.e. DML statements should not be allowed
* when the connection is in read-only mode, or when a read-only transaction has started etc.)
*
- *
A new test script can be generated by running: mvn -P generate-test-sql-scripts compile
+ * A new test script can be generated by running:
+ * mvn -Ddo_log_statements=true exec:java -Dexec.mainClass=com.google.cloud.spanner.connection.SqlTestScriptsGenerator -Dexec.classpathScope="test"
* It is only necessary to generate a new test script if the behavior of {@link
- * com.google.cloud.spanner.jdbc.Connection} has changed (for example calling COMMIT is currently
- * not allowed in AUTOCOMMIT mode, but this has changed to be a no-op). A new test script must also
- * be generated if additional test cases have been added to {@link AbstractConnectionImplTest}.
+ * com.google.cloud.spanner.connection.Connection} has changed (for example calling COMMIT is
+ * currently not allowed in AUTOCOMMIT mode, but this has changed to be a no-op). A new test script
+ * must also be generated if additional test cases have been added to {@link
+ * AbstractConnectionImplTest}.
*/
public class ConnectionImplGeneratedSqlScriptTest extends AbstractSqlScriptTest {
+ private String getFileName() {
+ switch (dialect) {
+ case POSTGRESQL:
+ return "postgresql/ConnectionImplGeneratedSqlScriptTest.sql";
+ case GOOGLE_STANDARD_SQL:
+ default:
+ return "ConnectionImplGeneratedSqlScriptTest.sql";
+ }
+ }
@Test
public void testGeneratedScript() throws Exception {
SqlScriptVerifier verifier = new SqlScriptVerifier(new TestConnectionProvider(dialect));
- verifier.verifyStatementsInFile("ConnectionImplGeneratedSqlScriptTest.sql", getClass(), true);
+ verifier.verifyStatementsInFile(getFileName(), getClass(), true);
}
/**
@@ -54,16 +67,20 @@ public void testGeneratedScript() throws Exception {
* these test cases are run is non-deterministic. That means that the generated sql script will
* still contain exactly the same test cases after each generation, but the order of the test
* cases in the script file is equal to the order in which the test cases were run the last time
- * the script was generated. It is therefore also not recommended to include this generation in an
+ * the script was generated. It is therefore also not recommended including this generation in an
* automatic build, but to generate the script only when there has been some fundamental change in
* the code.
*
*
The sql test scripts can be generated by running
- * mvn -P generate-test-sql-scripts compile
+ * mvn -Ddo_log_statements=true exec:java -Dexec.mainClass=com.google.cloud.spanner.connection.SqlTestScriptsGenerator -Dexec.classpathScope="test"
+ *
*/
static void generateTestScript() throws ClassNotFoundException, IOException {
// first make the current script file empty
- AbstractConnectionImplTest.emptyScript();
+ AbstractConnectionImplTest test = new ConnectionImplAutocommitReadOnlyNoActionsTest();
+ for (Dialect dialect : Dialect.values()) {
+ test.emptyScript(dialect);
+ }
JUnitCore junit = new JUnitCore();
Class>[] testClasses = getAbstractConnectionImplTestSubclasses();
Result result = junit.run(testClasses);
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java
index 6d04caa8c26..59780aed0f6 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java
@@ -220,14 +220,18 @@ private static DdlClient createDefaultMockDdlClient() {
}
}
- public static ConnectionImpl createConnection(final ConnectionOptions options) {
+ static ConnectionImpl createConnection(final ConnectionOptions options) {
+ return createConnection(options, Dialect.GOOGLE_STANDARD_SQL);
+ }
+
+ public static ConnectionImpl createConnection(final ConnectionOptions options, Dialect dialect) {
Spanner spanner = mock(Spanner.class);
SpannerPool spannerPool = mock(SpannerPool.class);
when(spannerPool.getSpanner(any(ConnectionOptions.class), any(ConnectionImpl.class)))
.thenReturn(spanner);
DdlClient ddlClient = createDefaultMockDdlClient();
DatabaseClient dbClient = mock(DatabaseClient.class);
- when(dbClient.getDialect()).thenReturn(Dialect.GOOGLE_STANDARD_SQL);
+ when(dbClient.getDialect()).thenReturn(dialect);
ReadOnlyTransaction singleUseReadOnlyTx = mock(ReadOnlyTransaction.class);
ResultSet mockResultSetWithStats = createSelect1MockResultSet();
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTransactionalReadOnlyTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTransactionalReadOnlyTest.java
index d98861d0d1b..627fadd79eb 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTransactionalReadOnlyTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTransactionalReadOnlyTest.java
@@ -43,7 +43,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -189,7 +189,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -340,7 +340,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -491,7 +491,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -641,7 +641,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -794,7 +794,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -947,13 +947,13 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
TimestampBound staleness = TimestampBound.ofExactStaleness(10L, TimeUnit.SECONDS);
- log(
- "SET READ_ONLY_STALENESS='"
+ logWithNamespace(
+ "SET %sREAD_ONLY_STALENESS='"
+ ReadOnlyStalenessUtil.timestampBoundToString(staleness)
+ "';");
connection.setReadOnlyStaleness(staleness);
@@ -1098,7 +1098,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=TRUE;");
+ logWithNamespace("SET %sREADONLY=TRUE;");
connection.setReadOnly(true);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTransactionalReadWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTransactionalReadWriteTest.java
index 1fa01abaf16..aac7497d074 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTransactionalReadWriteTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTransactionalReadWriteTest.java
@@ -43,7 +43,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -192,7 +192,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -345,7 +345,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -499,7 +499,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -651,7 +651,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -806,7 +806,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -961,13 +961,13 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
TimestampBound staleness = TimestampBound.ofExactStaleness(10L, TimeUnit.SECONDS);
- log(
- "SET READ_ONLY_STALENESS='"
+ logWithNamespace(
+ "SET %sREAD_ONLY_STALENESS='"
+ ReadOnlyStalenessUtil.timestampBoundToString(staleness)
+ "';");
connection.setReadOnlyStaleness(staleness);
@@ -1115,7 +1115,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -1263,7 +1263,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -1419,7 +1419,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -1567,7 +1567,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -1716,7 +1716,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
@@ -1869,7 +1869,7 @@ Connection getConnection() {
.setCredentials(NoCredentials.getInstance())
.setUri(ConnectionImplTest.URI)
.build());
- log("SET READONLY=FALSE;");
+ logWithNamespace("SET %sREADONLY=FALSE;");
connection.setReadOnly(false);
log("SET AUTOCOMMIT=FALSE;");
connection.setAutocommit(false);
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorTest.java
index a9b3a06b537..acb2e76f7ce 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorTest.java
@@ -22,20 +22,30 @@
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import com.google.cloud.Timestamp;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.TimestampBound;
import com.google.protobuf.Duration;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
-@RunWith(JUnit4.class)
+@RunWith(Parameterized.class)
public class ConnectionStatementExecutorTest {
+ @Parameter public Dialect dialect;
+
+ @Parameters(name = "dialect = {0}")
+ public static Object[] data() {
+ return Dialect.values();
+ }
private ConnectionImpl connection;
private ConnectionStatementExecutorImpl subject;
@@ -45,6 +55,7 @@ public void createSubject() {
connection = mock(ConnectionImpl.class);
when(connection.getAutocommitDmlMode()).thenReturn(AutocommitDmlMode.TRANSACTIONAL);
when(connection.getReadOnlyStaleness()).thenReturn(TimestampBound.strong());
+ when(connection.getDialect()).thenReturn(dialect);
subject = new ConnectionStatementExecutorImpl(connection);
}
@@ -210,4 +221,20 @@ public void testStatementSetTransactionMode() {
subject.statementSetTransactionMode(TransactionMode.READ_WRITE_TRANSACTION);
verify(connection).setTransactionMode(TransactionMode.READ_WRITE_TRANSACTION);
}
+
+ @Test
+ public void testStatementSetPgTransactionMode() {
+ subject.statementSetPgTransactionMode(PgTransactionMode.READ_ONLY_TRANSACTION);
+ verify(connection).setTransactionMode(TransactionMode.READ_ONLY_TRANSACTION);
+ subject.statementSetPgTransactionMode(PgTransactionMode.READ_WRITE_TRANSACTION);
+ verify(connection).setTransactionMode(TransactionMode.READ_WRITE_TRANSACTION);
+ }
+
+ @Test
+ public void testStatementSetPgTransactionModeNoOp() {
+ subject.statementSetPgTransactionMode(PgTransactionMode.ISOLATION_LEVEL_DEFAULT);
+ subject.statementSetPgTransactionMode(PgTransactionMode.ISOLATION_LEVEL_SERIALIZABLE);
+ verify(connection, never()).setTransactionMode(TransactionMode.READ_ONLY_TRANSACTION);
+ verify(connection, never()).setTransactionMode(TransactionMode.READ_WRITE_TRANSACTION);
+ }
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithNoParametersTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithNoParametersTest.java
index 2f2b538d073..6140825f57b 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithNoParametersTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithNoParametersTest.java
@@ -16,6 +16,7 @@
package com.google.cloud.spanner.connection;
+import static com.google.cloud.spanner.connection.DialectNamespaceMapper.getNamespace;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -63,24 +64,32 @@ public void testExecuteGetAutocommit() {
@Test
public void testExecuteGetReadOnly() {
- ParsedStatement statement = parser.parse(Statement.of("show variable readonly"));
+ ParsedStatement statement =
+ parser.parse(
+ Statement.of(String.format("show variable %sreadonly", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementShowReadOnly()).thenCallRealMethod();
- statement.getClientSideStatement().execute(executor, "show variable readonly");
+ when(connection.getDialect()).thenReturn(dialect);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
+ statement
+ .getClientSideStatement()
+ .execute(executor, String.format("show variable %sreadonly", getNamespace(dialect)));
verify(connection, times(1)).isReadOnly();
}
@Test
public void testExecuteGetAutocommitDmlMode() {
- ParsedStatement statement = parser.parse(Statement.of("show variable autocommit_dml_mode"));
+ ParsedStatement statement =
+ parser.parse(
+ Statement.of(
+ String.format("show variable %sautocommit_dml_mode", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementShowAutocommitDmlMode()).thenCallRealMethod();
+ when(connection.getDialect()).thenReturn(dialect);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
when(connection.getAutocommitDmlMode()).thenReturn(AutocommitDmlMode.TRANSACTIONAL);
- statement.getClientSideStatement().execute(executor, "show variable autocommit_dml_mode");
+ statement
+ .getClientSideStatement()
+ .execute(
+ executor, String.format("show variable %sautocommit_dml_mode", getNamespace(dialect)));
verify(connection, times(1)).getAutocommitDmlMode();
}
@@ -99,64 +108,85 @@ public void testExecuteGetStatementTimeout() {
@Test
public void testExecuteGetReadTimestamp() {
- ParsedStatement statement = parser.parse(Statement.of("show variable read_timestamp"));
+ ParsedStatement statement =
+ parser.parse(
+ Statement.of(String.format("show variable %sread_timestamp", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementShowReadTimestamp()).thenCallRealMethod();
+ when(connection.getDialect()).thenReturn(dialect);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
when(connection.getReadTimestampOrNull()).thenReturn(Timestamp.now());
- statement.getClientSideStatement().execute(executor, "show variable read_timestamp");
+ statement
+ .getClientSideStatement()
+ .execute(executor, String.format("show variable %sread_timestamp", getNamespace(dialect)));
verify(connection, times(1)).getReadTimestampOrNull();
}
@Test
public void testExecuteGetCommitTimestamp() {
- ParsedStatement statement = parser.parse(Statement.of("show variable commit_timestamp"));
+ ParsedStatement statement =
+ parser.parse(
+ Statement.of(String.format("show variable %scommit_timestamp", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementShowCommitTimestamp()).thenCallRealMethod();
+ when(connection.getDialect()).thenReturn(dialect);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
when(connection.getCommitTimestampOrNull()).thenReturn(Timestamp.now());
- statement.getClientSideStatement().execute(executor, "show variable commit_timestamp");
+ statement
+ .getClientSideStatement()
+ .execute(
+ executor, String.format("show variable %scommit_timestamp", getNamespace(dialect)));
verify(connection, times(1)).getCommitTimestampOrNull();
}
@Test
public void testExecuteGetReadOnlyStaleness() {
- ParsedStatement statement = parser.parse(Statement.of("show variable read_only_staleness"));
+ ParsedStatement statement =
+ parser.parse(
+ Statement.of(
+ String.format("show variable %sread_only_staleness", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementShowReadOnlyStaleness()).thenCallRealMethod();
+ when(connection.getDialect()).thenReturn(dialect);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
when(connection.getReadOnlyStaleness()).thenReturn(TimestampBound.strong());
- statement.getClientSideStatement().execute(executor, "show variable read_only_staleness");
+ statement
+ .getClientSideStatement()
+ .execute(
+ executor, String.format("show variable %sread_only_staleness", getNamespace(dialect)));
verify(connection, times(1)).getReadOnlyStaleness();
}
@Test
public void testExecuteGetOptimizerVersion() {
- ParsedStatement statement = parser.parse(Statement.of("show variable optimizer_version"));
+ ParsedStatement statement =
+ parser.parse(
+ Statement.of(
+ String.format("show variable %soptimizer_version", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementShowOptimizerVersion()).thenCallRealMethod();
+ when(connection.getDialect()).thenReturn(dialect);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
when(connection.getOptimizerVersion()).thenReturn("1");
- statement.getClientSideStatement().execute(executor, "show variable optimizer_version");
+ statement
+ .getClientSideStatement()
+ .execute(
+ executor, String.format("show variable %soptimizer_version", getNamespace(dialect)));
verify(connection, times(1)).getOptimizerVersion();
}
@Test
public void testExecuteGetOptimizerStatisticsPackage() {
ParsedStatement statement =
- parser.parse(Statement.of("show variable optimizer_statistics_package"));
+ parser.parse(
+ Statement.of(
+ String.format(
+ "show variable %soptimizer_statistics_package", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementShowOptimizerStatisticsPackage()).thenCallRealMethod();
+ when(connection.getDialect()).thenReturn(dialect);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
when(connection.getOptimizerStatisticsPackage()).thenReturn("custom-package");
statement
.getClientSideStatement()
- .execute(executor, "show variable optimizer_statistics_package");
+ .execute(
+ executor,
+ String.format("show variable %soptimizer_statistics_package", getNamespace(dialect)));
verify(connection, times(1)).getOptimizerStatisticsPackage();
}
@@ -165,9 +195,7 @@ public void testExecuteBegin() {
ParsedStatement subject = parser.parse(Statement.of("begin"));
for (String statement : subject.getClientSideStatement().getExampleStatements()) {
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementBeginTransaction()).thenCallRealMethod();
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
subject.getClientSideStatement().execute(executor, statement);
verify(connection, times(1)).beginTransaction();
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithOneParameterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithOneParameterTest.java
index 645d2f3b566..b68f78908b0 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithOneParameterTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStatementWithOneParameterTest.java
@@ -16,6 +16,8 @@
package com.google.cloud.spanner.connection;
+import static com.google.cloud.spanner.connection.DialectNamespaceMapper.getNamespace;
+import static org.junit.Assume.assumeTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
@@ -35,6 +37,7 @@
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
+import org.mockito.Mockito;
@RunWith(Parameterized.class)
public class ConnectionStatementWithOneParameterTest {
@@ -69,20 +72,42 @@ public void testExecuteSetAutocommit() {
@Test
public void testExecuteSetReadOnly() {
- ParsedStatement subject = parser.parse(Statement.of("set readonly = true"));
+ ParsedStatement subject =
+ parser.parse(Statement.of(String.format("set %sreadonly = true", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
when(executor.getConnection()).thenReturn(connection);
when(executor.statementSetReadOnly(any(Boolean.class))).thenCallRealMethod();
for (Boolean mode : new Boolean[] {Boolean.FALSE, Boolean.TRUE}) {
- subject.getClientSideStatement().execute(executor, String.format("set readonly = %s", mode));
+ subject
+ .getClientSideStatement()
+ .execute(executor, String.format("set %sreadonly = %s", getNamespace(dialect), mode));
+ verify(connection, times(1)).setReadOnly(mode);
+ }
+ }
+
+ @Test
+ public void testExecuteSetReadOnlyTo() {
+ assumeTrue("TO is only supported in PostgreSQL dialect", dialect == Dialect.POSTGRESQL);
+ ParsedStatement subject =
+ parser.parse(Statement.of(String.format("set %sreadonly to true", getNamespace(dialect))));
+ ConnectionImpl connection = mock(ConnectionImpl.class);
+ ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
+ when(executor.getConnection()).thenReturn(connection);
+ when(executor.statementSetReadOnly(any(Boolean.class))).thenCallRealMethod();
+ for (Boolean mode : new Boolean[] {Boolean.FALSE, Boolean.TRUE}) {
+ subject
+ .getClientSideStatement()
+ .execute(executor, String.format("set %sreadonly to %s", getNamespace(dialect), mode));
verify(connection, times(1)).setReadOnly(mode);
}
}
@Test
public void testExecuteSetAutocommitDmlMode() {
- ParsedStatement subject = parser.parse(Statement.of("set autocommit_dml_mode='foo'"));
+ ParsedStatement subject =
+ parser.parse(
+ Statement.of(String.format("set %sautocommit_dml_mode='foo'", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
when(executor.getConnection()).thenReturn(connection);
@@ -90,7 +115,9 @@ public void testExecuteSetAutocommitDmlMode() {
for (AutocommitDmlMode mode : AutocommitDmlMode.values()) {
subject
.getClientSideStatement()
- .execute(executor, String.format("set autocommit_dml_mode='%s'", mode.name()));
+ .execute(
+ executor,
+ String.format("set %sautocommit_dml_mode='%s'", getNamespace(dialect), mode.name()));
verify(connection, times(1)).setAutocommitDmlMode(mode);
}
}
@@ -119,14 +146,31 @@ public void testExecuteSetStatementTimeout() {
verify(connection, times(1)).setStatementTimeout(val, unit);
}
}
- ParsedStatement subject = parser.parse(Statement.of("set statement_timeout=null"));
- subject.getClientSideStatement().execute(executor, "set statement_timeout=null");
+ if (dialect == Dialect.POSTGRESQL) {
+ for (Long val : new Long[] {1L, 100L, 999L}) {
+ Mockito.clearInvocations(connection);
+ ParsedStatement subject =
+ parser.parse(Statement.of(String.format("set statement_timeout=%d", val)));
+ subject
+ .getClientSideStatement()
+ .execute(executor, String.format("set statement_timeout=%d", val));
+ verify(connection, times(1)).setStatementTimeout(val, TimeUnit.MILLISECONDS);
+ }
+
+ ParsedStatement subject = parser.parse(Statement.of("set statement_timeout=default"));
+ subject.getClientSideStatement().execute(executor, "set statement_timeout=default");
+ } else {
+ ParsedStatement subject = parser.parse(Statement.of("set statement_timeout=null"));
+ subject.getClientSideStatement().execute(executor, "set statement_timeout=null");
+ }
verify(connection, times(1)).clearStatementTimeout();
}
@Test
public void testExecuteSetReadOnlyStaleness() {
- ParsedStatement subject = parser.parse(Statement.of("set read_only_staleness='foo'"));
+ ParsedStatement subject =
+ parser.parse(
+ Statement.of(String.format("set %sread_only_staleness='foo'", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
when(executor.getConnection()).thenReturn(connection);
@@ -142,7 +186,10 @@ public void testExecuteSetReadOnlyStaleness() {
subject
.getClientSideStatement()
.execute(
- executor, String.format("set read_only_staleness='%s'", timestampBoundToString(val)));
+ executor,
+ String.format(
+ "set %sread_only_staleness='%s'",
+ getNamespace(dialect), timestampBoundToString(val)));
verify(connection, times(1)).setReadOnlyStaleness(val);
}
}
@@ -166,7 +213,9 @@ private String timestampBoundToString(TimestampBound staleness) {
@Test
public void testExecuteSetOptimizerVersion() {
- ParsedStatement subject = parser.parse(Statement.of("set optimizer_version='foo'"));
+ ParsedStatement subject =
+ parser.parse(
+ Statement.of(String.format("set %soptimizer_version='foo'", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
when(executor.getConnection()).thenReturn(connection);
@@ -174,14 +223,19 @@ public void testExecuteSetOptimizerVersion() {
for (String version : new String[] {"1", "200", "", "LATEST"}) {
subject
.getClientSideStatement()
- .execute(executor, String.format("set optimizer_version='%s'", version));
+ .execute(
+ executor,
+ String.format("set %soptimizer_version='%s'", getNamespace(dialect), version));
verify(connection, times(1)).setOptimizerVersion(version);
}
}
@Test
public void testExecuteSetOptimizerStatisticsPackage() {
- ParsedStatement subject = parser.parse(Statement.of("set optimizer_statistics_package='foo'"));
+ ParsedStatement subject =
+ parser.parse(
+ Statement.of(
+ String.format("set %soptimizer_statistics_package='foo'", getNamespace(dialect))));
ConnectionImpl connection = mock(ConnectionImpl.class);
ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
when(executor.getConnection()).thenReturn(connection);
@@ -190,7 +244,10 @@ public void testExecuteSetOptimizerStatisticsPackage() {
subject
.getClientSideStatement()
.execute(
- executor, String.format("set optimizer_statistics_package='%s'", statisticsPackage));
+ executor,
+ String.format(
+ "set %soptimizer_statistics_package='%s'",
+ getNamespace(dialect), statisticsPackage));
verify(connection, times(1)).setOptimizerStatisticsPackage(statisticsPackage);
}
}
@@ -199,9 +256,7 @@ public void testExecuteSetOptimizerStatisticsPackage() {
public void testExecuteSetTransaction() {
ParsedStatement subject = parser.parse(Statement.of("set transaction read_only"));
ConnectionImpl connection = mock(ConnectionImpl.class);
- ConnectionStatementExecutorImpl executor = mock(ConnectionStatementExecutorImpl.class);
- when(executor.getConnection()).thenReturn(connection);
- when(executor.statementSetTransactionMode(any(TransactionMode.class))).thenCallRealMethod();
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
for (TransactionMode mode : TransactionMode.values()) {
subject
.getClientSideStatement()
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java
index 00f62138700..85025ad91bc 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java
@@ -19,13 +19,17 @@
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutures;
import com.google.cloud.spanner.AbortedException;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.ErrorCode;
+import com.google.cloud.spanner.MockSpannerServiceImpl;
+import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime;
import com.google.cloud.spanner.ResultSet;
import com.google.cloud.spanner.SpannerException;
import com.google.cloud.spanner.SpannerOptions;
@@ -43,6 +47,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import javax.annotation.Nonnull;
+import org.junit.After;
import org.junit.AfterClass;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
@@ -465,4 +470,48 @@ public void testShowSetRPCPriority() {
}
}
}
+
+ public static class DialectDetectionTest extends AbstractMockServerTest {
+ protected String getBaseUrl() {
+ return super.getBaseUrl() + ";minSessions=1";
+ }
+
+ @After
+ public void reset() {
+ // Reset dialect to default.
+ mockSpanner.putStatementResult(
+ MockSpannerServiceImpl.StatementResult.detectDialectResult(Dialect.GOOGLE_STANDARD_SQL));
+ mockSpanner.reset();
+ mockSpanner.removeAllExecutionTimes();
+ // Close all open Spanner instances to ensure that each test run gets a fresh instance.
+ SpannerPool.closeSpannerPool();
+ }
+
+ @Test
+ public void testDefaultGetDialect() {
+ try (Connection connection = createConnection()) {
+ assertEquals(Dialect.GOOGLE_STANDARD_SQL, connection.getDialect());
+ }
+ }
+
+ @Test
+ public void testPostgreSQLGetDialect() {
+ mockSpanner.putStatementResult(
+ MockSpannerServiceImpl.StatementResult.detectDialectResult(Dialect.POSTGRESQL));
+ try (Connection connection = createConnection()) {
+ assertEquals(Dialect.POSTGRESQL, connection.getDialect());
+ }
+ }
+
+ @Test
+ public void testGetDialect_DatabaseNotFound() throws Exception {
+ mockSpanner.setBatchCreateSessionsExecutionTime(
+ SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database"));
+ try (Connection connection = createConnection()) {
+ SpannerException exception = assertThrows(SpannerException.class, connection::getDialect);
+ assertEquals(ErrorCode.NOT_FOUND, exception.getErrorCode());
+ assertTrue(exception.getMessage().contains("Database with id invalid-database not found"));
+ }
+ }
+ }
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DurationConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DurationConverterTest.java
index 2d0a9f8cb87..0c26f5b3b76 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DurationConverterTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/DurationConverterTest.java
@@ -22,6 +22,7 @@
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException;
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.DurationConverter;
import com.google.protobuf.Duration;
@@ -32,10 +33,11 @@
@RunWith(JUnit4.class)
public class DurationConverterTest {
-
@Test
public void testConvert() throws CompileException {
- String allowedValues = ReadOnlyStalenessConverterTest.getAllowedValues(DurationConverter.class);
+ String allowedValues =
+ ReadOnlyStalenessConverterTest.getAllowedValues(
+ DurationConverter.class, Dialect.GOOGLE_STANDARD_SQL);
assertThat(allowedValues, is(notNullValue()));
DurationConverter converter = new DurationConverter(allowedValues);
assertThat(
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgDurationConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgDurationConverterTest.java
new file mode 100644
index 00000000000..b3b0ff1fff5
--- /dev/null
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgDurationConverterTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2022 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 org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import com.google.cloud.spanner.Dialect;
+import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException;
+import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.PgDurationConverter;
+import com.google.protobuf.Duration;
+import java.util.concurrent.TimeUnit;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class PgDurationConverterTest {
+ @Test
+ public void testConvert() throws CompileException {
+ String allowedValues =
+ ReadOnlyStalenessConverterTest.getAllowedValues(
+ PgDurationConverter.class, Dialect.POSTGRESQL);
+ assertNotNull(allowedValues);
+ PgDurationConverter converter = new PgDurationConverter(allowedValues);
+
+ assertEquals(Duration.newBuilder().setNanos(1000000).build(), converter.convert("1"));
+ assertEquals(Duration.newBuilder().setSeconds(1L).build(), converter.convert("1000"));
+ assertEquals(
+ Duration.newBuilder().setSeconds(1L).setNanos(1000000).build(), converter.convert("1001"));
+
+ assertEquals(
+ Duration.newBuilder().setNanos((int) TimeUnit.MILLISECONDS.toNanos(100L)).build(),
+ converter.convert("'100ms'"));
+ assertNull(converter.convert("'0ms'"));
+ assertNull(converter.convert("'-100ms'"));
+ assertEquals(
+ Duration.newBuilder().setSeconds(315576000000L).build(),
+ converter.convert("'315576000000000ms'"));
+ assertEquals(Duration.newBuilder().setSeconds(1L).build(), converter.convert("'1s'"));
+ assertEquals(
+ Duration.newBuilder()
+ .setSeconds(1L)
+ .setNanos((int) TimeUnit.MILLISECONDS.toNanos(1L))
+ .build(),
+ converter.convert("'1001ms'"));
+
+ assertEquals(Duration.newBuilder().setNanos(1).build(), converter.convert("'1ns'"));
+ assertEquals(Duration.newBuilder().setNanos(1000).build(), converter.convert("'1us'"));
+ assertEquals(Duration.newBuilder().setNanos(1000000).build(), converter.convert("'1ms'"));
+ assertEquals(
+ Duration.newBuilder().setNanos(999999999).build(), converter.convert("'999999999ns'"));
+ assertEquals(Duration.newBuilder().setSeconds(1L).build(), converter.convert("'1s'"));
+
+ assertNull(converter.convert("''"));
+ assertNull(converter.convert("' '"));
+ assertNull(converter.convert("'random string'"));
+
+ assertEquals(Duration.getDefaultInstance(), converter.convert("default"));
+ assertEquals(Duration.getDefaultInstance(), converter.convert("DEFAULT"));
+ assertEquals(Duration.getDefaultInstance(), converter.convert("Default"));
+ assertNull(converter.convert("'default'"));
+ assertNull(converter.convert("'DEFAULT'"));
+ assertNull(converter.convert("'Default'"));
+ }
+}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgTransactionModeConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgTransactionModeConverterTest.java
new file mode 100644
index 00000000000..c8a2a97e709
--- /dev/null
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PgTransactionModeConverterTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2022 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 org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import com.google.cloud.spanner.Dialect;
+import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException;
+import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.PgTransactionModeConverter;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class PgTransactionModeConverterTest {
+ @Test
+ public void testConvert() throws CompileException {
+ String allowedValues =
+ ReadOnlyStalenessConverterTest.getAllowedValues(
+ PgTransactionModeConverter.class, Dialect.POSTGRESQL);
+
+ assertNotNull(allowedValues);
+ PgTransactionModeConverter converter = new PgTransactionModeConverter(allowedValues);
+
+ assertEquals(PgTransactionMode.READ_WRITE_TRANSACTION, converter.convert("read write"));
+ assertEquals(PgTransactionMode.READ_WRITE_TRANSACTION, converter.convert("READ WRITE"));
+ assertEquals(PgTransactionMode.READ_WRITE_TRANSACTION, converter.convert("Read Write"));
+ assertEquals(PgTransactionMode.READ_WRITE_TRANSACTION, converter.convert("read write"));
+ assertEquals(PgTransactionMode.READ_WRITE_TRANSACTION, converter.convert("READ\nWRITE"));
+ assertEquals(PgTransactionMode.READ_WRITE_TRANSACTION, converter.convert("Read\tWrite"));
+
+ assertEquals(PgTransactionMode.READ_ONLY_TRANSACTION, converter.convert("read only"));
+ assertEquals(PgTransactionMode.READ_ONLY_TRANSACTION, converter.convert("READ ONLY"));
+ assertEquals(PgTransactionMode.READ_ONLY_TRANSACTION, converter.convert("Read Only"));
+ assertEquals(PgTransactionMode.READ_ONLY_TRANSACTION, converter.convert("read only"));
+ assertEquals(PgTransactionMode.READ_ONLY_TRANSACTION, converter.convert("READ\nONLY"));
+ assertEquals(PgTransactionMode.READ_ONLY_TRANSACTION, converter.convert("Read\tOnly"));
+
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_DEFAULT, converter.convert("isolation level default"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_DEFAULT, converter.convert("ISOLATION LEVEL DEFAULT"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_DEFAULT, converter.convert("Isolation Level Default"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_DEFAULT,
+ converter.convert("isolation level default"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_DEFAULT, converter.convert("ISOLATION\nLEVEL\nDEFAULT"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_DEFAULT, converter.convert("Isolation\tLevel\tDefault"));
+
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_SERIALIZABLE,
+ converter.convert("isolation level serializable"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_SERIALIZABLE,
+ converter.convert("ISOLATION LEVEL SERIALIZABLE"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_SERIALIZABLE,
+ converter.convert("Isolation Level Serializable"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_SERIALIZABLE,
+ converter.convert("isolation level serializable"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_SERIALIZABLE,
+ converter.convert("ISOLATION\nLEVEL\nSERIALIZABLE"));
+ assertEquals(
+ PgTransactionMode.ISOLATION_LEVEL_SERIALIZABLE,
+ converter.convert("Isolation\tLevel\tSerializable"));
+
+ assertNull(converter.convert(""));
+ assertNull(converter.convert(" "));
+ assertNull(converter.convert("random string"));
+ assertNull(converter.convert("read_write"));
+ assertNull(converter.convert("READ_WRITE"));
+ assertNull(converter.convert("read_only"));
+ assertNull(converter.convert("Read_Only"));
+ assertNull(converter.convert("READ_ONLY"));
+
+ assertNull(converter.convert("isolation_level default"));
+ assertNull(converter.convert("isolationlevel default"));
+ assertNull(converter.convert("isolation level read committed"));
+ assertNull(converter.convert("isolation level "));
+ assertNull(converter.convert("isolation level_default"));
+ }
+}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadOnlyStalenessConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadOnlyStalenessConverterTest.java
index 419226155f4..5c62765466d 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadOnlyStalenessConverterTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ReadOnlyStalenessConverterTest.java
@@ -23,6 +23,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import com.google.cloud.Timestamp;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.TimestampBound;
import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException;
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.ReadOnlyStalenessConverter;
@@ -30,15 +31,24 @@
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
-@RunWith(JUnit4.class)
+@RunWith(Parameterized.class)
public class ReadOnlyStalenessConverterTest {
+ @Parameter public Dialect dialect;
+
+ @Parameters(name = "dialect = {0}")
+ public static Object[] data() {
+ return Dialect.values();
+ }
static String getAllowedValues(
- Class extends ClientSideStatementValueConverter>> converterClass)
+ Class extends ClientSideStatementValueConverter>> converterClass, Dialect dialect)
throws CompileException {
- Set statements = ClientSideStatements.INSTANCE.getCompiledStatements();
+ Set statements =
+ ClientSideStatements.getInstance(dialect).getCompiledStatements();
for (ClientSideStatementImpl statement : statements) {
if (statement.getSetStatement() != null
&& converterClass.getName().endsWith(statement.getSetStatement().getConverterName())) {
@@ -50,7 +60,7 @@ static String getAllowedValues(
@Test
public void testConvert() throws CompileException {
- String allowedValues = getAllowedValues(ReadOnlyStalenessConverter.class);
+ String allowedValues = getAllowedValues(ReadOnlyStalenessConverter.class, dialect);
assertThat(allowedValues, is(notNullValue()));
ReadOnlyStalenessConverter converter = new ReadOnlyStalenessConverter(allowedValues);
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetPgSessionCharacteristicsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetPgSessionCharacteristicsTest.java
new file mode 100644
index 00000000000..019aa745df5
--- /dev/null
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetPgSessionCharacteristicsTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2022 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 org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import com.google.cloud.spanner.Dialect;
+import com.google.cloud.spanner.Statement;
+import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement;
+import com.google.cloud.spanner.connection.AbstractStatementParser.StatementType;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class SetPgSessionCharacteristicsTest {
+ private final AbstractStatementParser parser =
+ AbstractStatementParser.getInstance(Dialect.POSTGRESQL);
+
+ @Test
+ public void testSetIsolationLevelDefault() {
+ ConnectionImpl connection = mock(ConnectionImpl.class);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
+
+ String sql = "set session characteristics as transaction isolation level default";
+ ParsedStatement statement = parser.parse(Statement.of(sql));
+ assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType());
+ statement.getClientSideStatement().execute(executor, sql);
+
+ verify(connection, never()).setReadOnly(anyBoolean());
+ }
+
+ @Test
+ public void testSetIsolationLevelSerializable() {
+ ConnectionImpl connection = mock(ConnectionImpl.class);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
+
+ String sql = "set session characteristics as transaction isolation level serializable";
+ ParsedStatement statement = parser.parse(Statement.of(sql));
+ assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType());
+ statement.getClientSideStatement().execute(executor, sql);
+
+ verify(connection, never()).setReadOnly(anyBoolean());
+ }
+
+ @Test
+ public void testSetIsolationLevelReadOnly() {
+ ConnectionImpl connection = mock(ConnectionImpl.class);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
+
+ String sql = "set\tsession\ncharacteristics as transaction read only";
+ ParsedStatement statement = parser.parse(Statement.of(sql));
+ assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType());
+ statement.getClientSideStatement().execute(executor, sql);
+
+ verify(connection).setReadOnly(true);
+ verify(connection, never()).setReadOnly(false);
+ }
+
+ @Test
+ public void testSetIsolationLevelReadWrite() {
+ ConnectionImpl connection = mock(ConnectionImpl.class);
+ ConnectionStatementExecutorImpl executor = new ConnectionStatementExecutorImpl(connection);
+
+ String sql = "set session characteristics as transaction read write";
+ ParsedStatement statement = parser.parse(Statement.of(sql));
+ assertEquals(sql, StatementType.CLIENT_SIDE, statement.getType());
+ statement.getClientSideStatement().execute(executor, sql);
+
+ verify(connection).setReadOnly(false);
+ verify(connection, never()).setReadOnly(true);
+ }
+}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetReadOnlyStalenessSqlScriptTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetReadOnlyStalenessSqlScriptTest.java
index ce3f5b99d48..ec0f225bf9c 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetReadOnlyStalenessSqlScriptTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetReadOnlyStalenessSqlScriptTest.java
@@ -19,10 +19,19 @@
import org.junit.Test;
public class SetReadOnlyStalenessSqlScriptTest extends AbstractSqlScriptTest {
+ private String getFileName() {
+ switch (dialect) {
+ case POSTGRESQL:
+ return "postgresql/SetReadOnlyStalenessTest.sql";
+ case GOOGLE_STANDARD_SQL:
+ default:
+ return "SetReadOnlyStalenessTest.sql";
+ }
+ }
@Test
public void testSetReadOnlyStalenessScript() throws Exception {
SqlScriptVerifier verifier = new SqlScriptVerifier(new TestConnectionProvider(dialect));
- verifier.verifyStatementsInFile("SetReadOnlyStalenessTest.sql", getClass(), true);
+ verifier.verifyStatementsInFile(getFileName(), getClass(), true);
}
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetStatementTimeoutSqlScriptTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetStatementTimeoutSqlScriptTest.java
index 5ec209dac3f..1a55618787d 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetStatementTimeoutSqlScriptTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SetStatementTimeoutSqlScriptTest.java
@@ -16,13 +16,24 @@
package com.google.cloud.spanner.connection;
+import com.google.cloud.spanner.Dialect;
import org.junit.Test;
public class SetStatementTimeoutSqlScriptTest extends AbstractSqlScriptTest {
+ private String getFile(Dialect dialect) {
+ switch (dialect) {
+ case POSTGRESQL:
+ return "postgresql/SetStatementTimeoutTest.sql";
+ case GOOGLE_STANDARD_SQL:
+ default:
+ return "SetStatementTimeoutTest.sql";
+ }
+ }
+
@Test
public void testSetStatementTimeoutScript() throws Exception {
SqlScriptVerifier verifier = new SqlScriptVerifier(new TestConnectionProvider(dialect));
- verifier.verifyStatementsInFile("SetStatementTimeoutTest.sql", getClass(), true);
+ verifier.verifyStatementsInFile(getFile(dialect), getClass(), true);
}
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SqlTestScriptsGenerator.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SqlTestScriptsGenerator.java
index b06968b9cdc..654ffb9dc15 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SqlTestScriptsGenerator.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SqlTestScriptsGenerator.java
@@ -16,12 +16,24 @@
package com.google.cloud.spanner.connection;
-/** Class that runs all generators of SQL test scripts for the Connection API */
+import com.google.cloud.spanner.Dialect;
+
+/**
+ * Class that runs all generators of SQL test scripts for the Connection API.
+ *
+ * Run this generator if new client side statements have been added, or if any existing client
+ * side statements have been modified. The generator can be executed from the command line in the
+ * google-cloud-spanner directory like this:
+ * mvn -Ddo_log_statements=true exec:java -Dexec.mainClass=com.google.cloud.spanner.connection.SqlTestScriptsGenerator -Dexec.classpathScope="test"
+ *
+ */
public class SqlTestScriptsGenerator {
/** Main method for generating the test script */
public static void main(String[] args) throws Exception {
- ClientSideStatementsTest.generateTestScript();
+ for (Dialect dialect : Dialect.values()) {
+ ClientSideStatementsTest.generateTestScript(dialect);
+ }
ConnectionImplGeneratedSqlScriptTest.generateTestScript();
}
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java
index 96d4b7e3aef..65b769b9d60 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java
@@ -90,7 +90,7 @@ public void setupParser() {
Dialect.GOOGLE_STANDARD_SQL,
"CommentsTest.sql",
Dialect.POSTGRESQL,
- "PostgreSQLCommentsTest.sql");
+ "postgresql/CommentsTest.sql");
@Test
public void testRemoveCommentsInScript() {
@@ -350,11 +350,19 @@ public void testShowStatements() {
.isEqualTo(StatementType.QUERY);
assertThat(parser.parse(Statement.of("show variable autocommit")).getType())
.isEqualTo(StatementType.CLIENT_SIDE);
- assertThat(parser.parse(Statement.of("show autocommit")).getType())
- .isEqualTo(StatementType.QUERY);
+ if (dialect == Dialect.POSTGRESQL) {
+ assertThat(parser.parse(Statement.of("show autocommit")).getType())
+ .isEqualTo(StatementType.CLIENT_SIDE);
+ assertThat(
+ parser.parse(Statement.of("show variable spanner.retry_aborts_internally")).getType())
+ .isEqualTo(StatementType.CLIENT_SIDE);
+ } else {
+ assertThat(parser.parse(Statement.of("show autocommit")).getType())
+ .isEqualTo(StatementType.QUERY);
+ assertThat(parser.parse(Statement.of("show variable retry_aborts_internally")).getType())
+ .isEqualTo(StatementType.CLIENT_SIDE);
+ }
- assertThat(parser.parse(Statement.of("show variable retry_aborts_internally")).getType())
- .isEqualTo(StatementType.CLIENT_SIDE);
assertThat(parser.parse(Statement.of("show variable retry_aborts_internally bar")).getType())
.isEqualTo(StatementType.QUERY);
}
@@ -903,7 +911,7 @@ public void testParseStatementsWithOneParameterAtTheEnd() throws CompileExceptio
}
private Set getAllStatements() throws CompileException {
- return ClientSideStatements.INSTANCE.getCompiledStatements();
+ return ClientSideStatements.getInstance(dialect).getCompiledStatements();
}
private void assertParsing(
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionModeConverterTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionModeConverterTest.java
index a646425b124..f19b4b2eea1 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionModeConverterTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TransactionModeConverterTest.java
@@ -22,6 +22,7 @@
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException;
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.TransactionModeConverter;
import org.junit.Test;
@@ -34,7 +35,8 @@ public class TransactionModeConverterTest {
@Test
public void testConvert() throws CompileException {
String allowedValues =
- ReadOnlyStalenessConverterTest.getAllowedValues(TransactionModeConverter.class);
+ ReadOnlyStalenessConverterTest.getAllowedValues(
+ TransactionModeConverter.class, Dialect.GOOGLE_STANDARD_SQL);
assertThat(allowedValues, is(notNullValue()));
TransactionModeConverter converter = new TransactionModeConverter(allowedValues);
assertThat(
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 d1eabfeaec3..be5a1671ae0 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 2022-02-08T09:47:09.176000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:09.176000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:27.061000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:27.061000000Z'
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 2022-02-08T09:47:09.176000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:09.176000000Z'
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:27.061000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:27.061000000Z'
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 2022-02-08T09:47:09.407000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:09.407000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:27.474000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:27.474000000Z'
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 2022-02-08T09:47:09.407000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:09.407000000Z'
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:27.474000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:27.474000000Z'
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 2022-02-08T09:47:09.583000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:09.583000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:27.868000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:27.868000000Z'
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 2022-02-08T09:47:09.583000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:27.868000000Z';
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 2022-02-08T09:47:09.731000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:09.731000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:28.152000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:28.152000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=TRUE;
SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:09.731000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:09.731000000Z'
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:28.152000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:28.152000000Z'
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 2022-02-08T09:47:09.897000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:09.897000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:28.470000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:28.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 2022-02-08T09:47:09.897000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:09.897000000Z'
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:28.470000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:28.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 2022-02-08T09:47:10.078000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:10.078000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:28.774000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:28.774000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=TRUE;
SET AUTOCOMMIT=TRUE;
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:10.078000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:10.078000000Z'
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:28.774000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:28.774000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=TRUE;
@@ -2164,199 +2164,210 @@ NEW_CONNECTION;
SET READONLY=TRUE;
SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
SET AUTOCOMMIT=FALSE;
-NEW_CONNECTION;
-SET READONLY=FALSE;
+COMMIT;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
ROLLBACK;
NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READONLY=FALSE;
+@EXPECT RESULT_SET 'READONLY',FALSE
+SHOW VARIABLE READONLY;
+SET READONLY=TRUE;
+@EXPECT RESULT_SET 'READONLY',TRUE
+SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SET READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:10.239000000Z';
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:29.031000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:29.031000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:10.239000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:29.031000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -2370,35 +2381,35 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -2406,9 +2417,9 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -2450,285 +2461,263 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-START BATCH DDL;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
SET AUTOCOMMIT=FALSE;
-NEW_CONNECTION;
-SET READONLY=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
ROLLBACK;
NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READONLY=FALSE;
+@EXPECT RESULT_SET 'READONLY',FALSE
+SHOW VARIABLE READONLY;
+SET READONLY=TRUE;
+@EXPECT RESULT_SET 'READONLY',TRUE
+SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:10.386000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:10.386000000Z'
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:29.261000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:29.261000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:10.386000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:29.261000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -2742,42 +2731,35 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -2785,10 +2767,9 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -2830,89 +2811,90 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SET TRANSACTION READ ONLY;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
SHOW VARIABLE AUTOCOMMIT;
@@ -2920,188 +2902,196 @@ SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-@EXPECT UPDATE_COUNT 1
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-UPDATE foo SET bar=1;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-START BATCH DML;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-UPDATE foo SET bar=1;
+ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-ROLLBACK;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET READONLY=FALSE;
@EXPECT RESULT_SET 'READONLY',FALSE
SHOW VARIABLE READONLY;
@@ -3109,79 +3099,86 @@ SET READONLY=TRUE;
@EXPECT RESULT_SET 'READONLY',TRUE
SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:10.614000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:10.614000000Z'
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:29.514000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:29.514000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:10.614000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:10.614000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:29.514000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -3195,49 +3192,56 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -3245,11 +3249,12 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -3291,277 +3296,401 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
BEGIN TRANSACTION;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-UPDATE foo SET bar=1;
-COMMIT;
-NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET AUTOCOMMIT=FALSE;
-NEW_CONNECTION;
-SET READONLY=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-@EXPECT UPDATE_COUNT 1
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'READ_TIMESTAMP',null
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'READ_TIMESTAMP'
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-START BATCH DML;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-UPDATE foo SET bar=1;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET READONLY=FALSE;
+@EXPECT RESULT_SET 'READONLY',FALSE
+SHOW VARIABLE READONLY;
+SET READONLY=TRUE;
+@EXPECT RESULT_SET 'READONLY',TRUE
+SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:10.809000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:10.809000000Z'
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:29.790000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:29.790000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:10.809000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:29.790000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -3575,35 +3704,56 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -3611,9 +3761,12 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -3655,274 +3808,282 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
SET AUTOCOMMIT=FALSE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
-SHOW VARIABLE AUTOCOMMIT;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
-SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-@EXPECT UPDATE_COUNT 1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-UPDATE foo SET bar=1;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-START BATCH DML;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-SET READONLY=FALSE;
-@EXPECT RESULT_SET 'READONLY',FALSE
-SHOW VARIABLE READONLY;
SET READONLY=TRUE;
-@EXPECT RESULT_SET 'READONLY',TRUE
-SHOW VARIABLE READONLY;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
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='READ_TIMESTAMP 2022-02-08T09:47:10.941000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:10.941000000Z'
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.050000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:30.050000000Z'
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 2022-02-08T09:47:10.941000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:10.941000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:30.050000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
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 READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
-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 READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
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 READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -3936,35 +4097,35 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -3972,9 +4133,9 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -4016,281 +4177,283 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
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 READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
-SELECT 1 AS TEST;
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
SET AUTOCOMMIT=FALSE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
-SHOW VARIABLE AUTOCOMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
-SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-@EXPECT UPDATE_COUNT 1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-@EXPECT RESULT_SET 'READ_TIMESTAMP',null
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'READ_TIMESTAMP'
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
-UPDATE foo SET bar=1;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-START BATCH DML;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-SET READONLY=FALSE;
-@EXPECT RESULT_SET 'READONLY',FALSE
-SHOW VARIABLE READONLY;
SET READONLY=TRUE;
-@EXPECT RESULT_SET 'READONLY',TRUE
-SHOW VARIABLE READONLY;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='STRONG';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:11.120000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:11.120000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.238000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:11.120000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:11.120000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+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 2022-03-23T14:42:30.238000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -4304,35 +4467,42 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -4340,9 +4510,10 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -4384,317 +4555,254 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-BEGIN TRANSACTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-UPDATE foo SET bar=1;
-NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
SET AUTOCOMMIT=FALSE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
-SHOW VARIABLE AUTOCOMMIT;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
-SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
-@EXPECT UPDATE_COUNT 1
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
-SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
-NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+NEW_CONNECTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'READ_TIMESTAMP'
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
-UPDATE foo SET bar=1;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-START BATCH DML;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
-SET READONLY=FALSE;
-@EXPECT RESULT_SET 'READONLY',FALSE
-SHOW VARIABLE READONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READONLY=TRUE;
-@EXPECT RESULT_SET 'READONLY',TRUE
-SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='STRONG';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:11.271000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:11.271000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.477000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:11.271000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:11.271000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:30.477000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
@@ -4709,41 +4817,34 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
@@ -4752,9 +4853,8 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
@@ -4797,87 +4897,68 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-BEGIN TRANSACTION;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
SHOW VARIABLE AUTOCOMMIT;
@@ -4885,140 +4966,100 @@ SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-@EXPECT UPDATE_COUNT 1
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-@EXPECT RESULT_SET 'READ_TIMESTAMP'
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-START BATCH DDL;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-UPDATE foo SET bar=1;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-START BATCH DML;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-UPDATE foo SET bar=1;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET READONLY=FALSE;
@EXPECT RESULT_SET 'READONLY',FALSE
SHOW VARIABLE READONLY;
@@ -5026,61 +5067,50 @@ SET READONLY=TRUE;
@EXPECT RESULT_SET 'READONLY',TRUE
SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:11.432000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:11.432000000Z'
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.698000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:30.698000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:11.432000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:11.432000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:30.698000000Z';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -5094,35 +5124,28 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -5130,9 +5153,8 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -5174,159 +5196,167 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
COMMIT;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
BEGIN TRANSACTION;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=FALSE;
-SET AUTOCOMMIT=TRUE;
-SELECT 1 AS TEST;
+SET READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
ABORT BATCH;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT=FALSE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
-SHOW VARIABLE AUTOCOMMIT;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
-SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SELECT 1 AS TEST;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-@EXPECT UPDATE_COUNT 1
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
-SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'TEST',1
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SELECT 1 AS TEST;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
@@ -5334,84 +5364,75 @@ SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-UPDATE foo SET bar=1;
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-START BATCH DML;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
-UPDATE foo SET bar=1;
+START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
ROLLBACK;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READONLY=FALSE;
-@EXPECT RESULT_SET 'READONLY',FALSE
-SHOW VARIABLE READONLY;
-SET READONLY=TRUE;
-@EXPECT RESULT_SET 'READONLY',TRUE
-SHOW VARIABLE READONLY;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='STRONG';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:11.577000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:11.577000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.897000000Z';
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:11.577000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-02-08T09:47:11.577000000Z'
-SHOW VARIABLE READ_ONLY_STALENESS;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:30.897000000Z';
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
-SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -5427,26 +5448,33 @@ SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -5456,6 +5484,7 @@ SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -5499,252 +5528,283 @@ SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
COMMIT;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
RUN BATCH;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-BEGIN TRANSACTION;
-SELECT 1 AS TEST;
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
-SET AUTOCOMMIT=FALSE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
-SHOW VARIABLE AUTOCOMMIT;
+SET READONLY=FALSE;
SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
-SHOW VARIABLE AUTOCOMMIT;
-NEW_CONNECTION;
-SET READONLY=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT=FALSE;
-COMMIT;
+NEW_CONNECTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
SET READONLY=FALSE;
-@EXPECT RESULT_SET 'READONLY',FALSE
-SHOW VARIABLE READONLY;
-SET READONLY=TRUE;
-@EXPECT RESULT_SET 'READONLY',TRUE
-SHOW VARIABLE READONLY;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:11.702000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:11.702000000Z'
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:31.065000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:31.065000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:11.702000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:31.065000000Z';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -5758,35 +5818,42 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -5794,9 +5861,10 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -5838,78 +5906,89 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET TRANSACTION READ ONLY;
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
-NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
SHOW VARIABLE AUTOCOMMIT;
@@ -5917,124 +5996,188 @@ SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT UPDATE_COUNT 1
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET READONLY=FALSE;
@EXPECT RESULT_SET 'READONLY',FALSE
SHOW VARIABLE READONLY;
@@ -6042,59 +6185,79 @@ SET READONLY=TRUE;
@EXPECT RESULT_SET 'READONLY',TRUE
SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:11.804000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:11.804000000Z'
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:31.341000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:31.341000000Z'
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 2022-02-08T09:47:11.804000000Z';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:31.341000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:31.341000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
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 READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
-@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -6108,35 +6271,49 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
-@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -6144,9 +6321,11 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -6188,374 +6367,277 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
BEGIN TRANSACTION;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT=FALSE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
-SHOW VARIABLE AUTOCOMMIT;
-SET AUTOCOMMIT=TRUE;
-@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
-SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
-@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT UPDATE_COUNT 1
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-ROLLBACK;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SELECT 1 AS TEST;
-ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET READONLY=FALSE;
-@EXPECT RESULT_SET 'READONLY',FALSE
-SHOW VARIABLE READONLY;
-SET READONLY=TRUE;
-@EXPECT RESULT_SET 'READONLY',TRUE
-SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:11.962000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:11.962000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:31.608000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:31.608000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:11.962000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:31.608000000Z';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -6569,56 +6651,35 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
-NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -6626,12 +6687,9 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -6673,117 +6731,71 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-UPDATE foo SET bar=1;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
SHOW VARIABLE AUTOCOMMIT;
@@ -6791,196 +6803,140 @@ SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT UPDATE_COUNT 1
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-@EXPECT RESULT_SET 'READ_TIMESTAMP'
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SELECT 1 AS TEST;
-COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SELECT 1 AS TEST;
-COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET READONLY=FALSE;
@EXPECT RESULT_SET 'READONLY',FALSE
SHOW VARIABLE READONLY;
@@ -6988,86 +6944,61 @@ SET READONLY=TRUE;
@EXPECT RESULT_SET 'READONLY',TRUE
SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:12.213000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:12.213000000Z'
+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 2022-03-23T14:42:31.834000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:31.834000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:12.213000000Z';
+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 2022-03-23T14:42:31.834000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:31.834000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -7081,56 +7012,35 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
-NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -7138,12 +7048,9 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -7185,282 +7092,281 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
BEGIN TRANSACTION;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'TEST',1
-SELECT 1 AS TEST;
-COMMIT;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT UPDATE_COUNT 1
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
ROLLBACK;
NEW_CONNECTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET READONLY=FALSE;
+@EXPECT RESULT_SET 'READONLY',FALSE
+SHOW VARIABLE READONLY;
SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READONLY=TRUE;
+@EXPECT RESULT_SET 'READONLY',TRUE
+SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:12.372000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:12.372000000Z'
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:32.161000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:32.161000000Z'
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 2022-02-08T09:47:12.372000000Z';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:32.161000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:32.161000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -7474,35 +7380,35 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
-@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'COMMIT_TIMESTAMP'
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -7510,9 +7416,9 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -7554,281 +7460,316 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-BEGIN TRANSACTION;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT UPDATE_COUNT 1
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'READ_TIMESTAMP'
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+@EXPECT RESULT_SET 'READONLY',FALSE
+SHOW VARIABLE READONLY;
SET READONLY=TRUE;
+@EXPECT RESULT_SET 'READONLY',TRUE
+SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:12.493000000Z';
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:32.402000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:32.402000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:12.493000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:32.402000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:32.402000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
SET OPTIMIZER_VERSION='1';
@@ -7844,40 +7785,40 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@@ -7887,8 +7828,8 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
SET STATEMENT_TIMEOUT='1s';
@@ -7932,254 +7873,289 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+@EXPECT UPDATE_COUNT 1
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'READ_TIMESTAMP'
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+@EXPECT RESULT_SET 'READONLY',FALSE
+SHOW VARIABLE READONLY;
SET READONLY=TRUE;
+@EXPECT RESULT_SET 'READONLY',TRUE
+SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:12.629000000Z';
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:32.626000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:32.626000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:12.629000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:32.626000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:32.626000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
@@ -8194,34 +8170,34 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
@@ -8230,8 +8206,8 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
@@ -8274,68 +8250,74 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'OPTIMIZER_VERSION'
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT EXCEPTION FAILED_PRECONDITION
ABORT BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET AUTOCOMMIT=FALSE;
@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
SHOW VARIABLE AUTOCOMMIT;
@@ -8343,100 +8325,116 @@ SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
SHOW VARIABLE AUTOCOMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT UPDATE_COUNT 1
UPDATE foo SET bar=1;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
SET AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'TEST',1
SELECT 1 AS TEST;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'AUTOCOMMIT_DML_MODE'
SHOW VARIABLE AUTOCOMMIT_DML_MODE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ ONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION READ WRITE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'READ_TIMESTAMP',null
SHOW VARIABLE READ_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DDL;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
START BATCH DML;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
ROLLBACK;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET READONLY=FALSE;
@EXPECT RESULT_SET 'READONLY',FALSE
SHOW VARIABLE READONLY;
@@ -8444,50 +8442,52 @@ SET READONLY=TRUE;
@EXPECT RESULT_SET 'READONLY',TRUE
SHOW VARIABLE READONLY;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET READ_ONLY_STALENESS='STRONG';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','STRONG'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:12.745000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:12.745000000Z'
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:32.905000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:32.905000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:12.745000000Z';
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:32.905000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:32.905000000Z'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET READ_ONLY_STALENESS='EXACT_STALENESS 1s';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 1s'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
-@EXPECT EXCEPTION FAILED_PRECONDITION
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET READ_ONLY_STALENESS='EXACT_STALENESS 100us';
@EXPECT RESULT_SET 'READ_ONLY_STALENESS','EXACT_STALENESS 100us'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_RESPONSE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET OPTIMIZER_VERSION='1';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION','1'
SHOW VARIABLE OPTIMIZER_VERSION;
@@ -8501,28 +8501,28 @@ SET OPTIMIZER_VERSION='';
@EXPECT RESULT_SET 'OPTIMIZER_VERSION',''
SHOW VARIABLE OPTIMIZER_VERSION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'COMMIT_TIMESTAMP',null
SHOW VARIABLE COMMIT_TIMESTAMP;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET OPTIMIZER_STATISTICS_PACKAGE='custom-package';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE','custom-package'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
@@ -8530,8 +8530,8 @@ SET OPTIMIZER_STATISTICS_PACKAGE='';
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE',''
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
SET STATEMENT_TIMEOUT='1s';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
SHOW VARIABLE STATEMENT_TIMEOUT;
@@ -8573,49 +8573,49 @@ SET STATEMENT_TIMEOUT='0ns';
@EXPECT RESULT_SET 'STATEMENT_TIMEOUT',null
SHOW VARIABLE STATEMENT_TIMEOUT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'READ_ONLY_STALENESS'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
COMMIT;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT RESULT_SET 'OPTIMIZER_STATISTICS_PACKAGE'
SHOW VARIABLE OPTIMIZER_STATISTICS_PACKAGE;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT EXCEPTION FAILED_PRECONDITION
RUN BATCH;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
@EXPECT EXCEPTION FAILED_PRECONDITION
SET TRANSACTION_TAG = 'some-tag';
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
BEGIN TRANSACTION;
SELECT 1 AS TEST;
-@EXPECT EXCEPTION FAILED_PRECONDITION
UPDATE foo SET bar=1;
@EXPECT EXCEPTION FAILED_PRECONDITION
CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
@EXPECT EXCEPTION FAILED_PRECONDITION
BEGIN TRANSACTION;
NEW_CONNECTION;
-SET READONLY=TRUE;
-SET AUTOCOMMIT=FALSE;
+SET READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=FALSE;
@@ -8788,15 +8788,15 @@ NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=FALSE;
COMMIT;
-SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-02-08T09:47:12.848000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:12.848000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:33.118000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:33.118000000Z'
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 2022-02-08T09:47:12.848000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:33.118000000Z';
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 2022-02-08T09:47:12.981000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:12.981000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:33.313000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:33.313000000Z'
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 2022-02-08T09:47:12.981000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:33.313000000Z';
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 2022-02-08T09:47:13.109000000Z';
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:33.570000000Z';
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 2022-02-08T09:47:13.109000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:33.570000000Z';
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 2022-02-08T09:47:13.229000000Z';
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:33.779000000Z';
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=FALSE;
START BATCH DDL;
@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:13.229000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:33.779000000Z';
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 2022-02-08T09:47:13.350000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:13.350000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.015000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.015000000Z'
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 2022-02-08T09:47:13.350000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:34.015000000Z';
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 2022-02-08T09:47:13.472000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:13.472000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.249000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.249000000Z'
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 2022-02-08T09:47:13.472000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:34.249000000Z';
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 2022-02-08T09:47:13.568000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:13.568000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.423000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.423000000Z'
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 2022-02-08T09:47:13.568000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:34.423000000Z';
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 2022-02-08T09:47:13.700000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:13.700000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.634000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.634000000Z'
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 2022-02-08T09:47:13.700000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:34.634000000Z';
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 2022-02-08T09:47:13.931000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:13.931000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.943000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.943000000Z'
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 2022-02-08T09:47:13.931000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:34.943000000Z';
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 2022-02-08T09:47:14.114000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:14.114000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:35.194000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:35.194000000Z'
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 2022-02-08T09:47:14.114000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:35.194000000Z';
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 2022-02-08T09:47:14.244000000Z';
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:35.388000000Z';
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 2022-02-08T09:47:14.244000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:35.388000000Z';
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 2022-02-08T09:47:14.384000000Z';
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:35.635000000Z';
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=FALSE;
SELECT 1 AS TEST;
@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:14.384000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:35.635000000Z';
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 2022-02-08T09:47:14.507000000Z';
-@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-02-08T09:47:14.507000000Z'
+SET READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:35.872000000Z';
+@EXPECT RESULT_SET 'READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:35.872000000Z'
SHOW VARIABLE READ_ONLY_STALENESS;
NEW_CONNECTION;
SET READONLY=FALSE;
SET AUTOCOMMIT=FALSE;
@EXPECT EXCEPTION FAILED_PRECONDITION
-SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-02-08T09:47:14.507000000Z';
+SET READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:35.872000000Z';
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
new file mode 100644
index 00000000000..2d07102d907
--- /dev/null
+++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ClientSideStatementsTest.sql
@@ -0,0 +1,38459 @@
+NEW_CONNECTION;
+show autocommit;
+NEW_CONNECTION;
+SHOW AUTOCOMMIT;
+NEW_CONNECTION;
+show autocommit;
+NEW_CONNECTION;
+ show autocommit;
+NEW_CONNECTION;
+ show autocommit;
+NEW_CONNECTION;
+
+
+
+show autocommit;
+NEW_CONNECTION;
+show autocommit ;
+NEW_CONNECTION;
+show autocommit ;
+NEW_CONNECTION;
+show autocommit
+
+;
+NEW_CONNECTION;
+show autocommit;
+NEW_CONNECTION;
+show autocommit;
+NEW_CONNECTION;
+show
+autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show autocommit/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-autocommit;
+NEW_CONNECTION;
+show variable autocommit;
+NEW_CONNECTION;
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+show variable autocommit;
+NEW_CONNECTION;
+ show variable autocommit;
+NEW_CONNECTION;
+ show variable autocommit;
+NEW_CONNECTION;
+
+
+
+show variable autocommit;
+NEW_CONNECTION;
+show variable autocommit ;
+NEW_CONNECTION;
+show variable autocommit ;
+NEW_CONNECTION;
+show variable autocommit
+
+;
+NEW_CONNECTION;
+show variable autocommit;
+NEW_CONNECTION;
+show variable autocommit;
+NEW_CONNECTION;
+show
+variable
+autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable autocommit;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable autocommit/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-autocommit;
+NEW_CONNECTION;
+show spanner.readonly;
+NEW_CONNECTION;
+SHOW SPANNER.READONLY;
+NEW_CONNECTION;
+show spanner.readonly;
+NEW_CONNECTION;
+ show spanner.readonly;
+NEW_CONNECTION;
+ show spanner.readonly;
+NEW_CONNECTION;
+
+
+
+show spanner.readonly;
+NEW_CONNECTION;
+show spanner.readonly ;
+NEW_CONNECTION;
+show spanner.readonly ;
+NEW_CONNECTION;
+show spanner.readonly
+
+;
+NEW_CONNECTION;
+show spanner.readonly;
+NEW_CONNECTION;
+show spanner.readonly;
+NEW_CONNECTION;
+show
+spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.readonly/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.readonly;
+NEW_CONNECTION;
+show variable spanner.readonly;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+show variable spanner.readonly;
+NEW_CONNECTION;
+ show variable spanner.readonly;
+NEW_CONNECTION;
+ show variable spanner.readonly;
+NEW_CONNECTION;
+
+
+
+show variable spanner.readonly;
+NEW_CONNECTION;
+show variable spanner.readonly ;
+NEW_CONNECTION;
+show variable spanner.readonly ;
+NEW_CONNECTION;
+show variable spanner.readonly
+
+;
+NEW_CONNECTION;
+show variable spanner.readonly;
+NEW_CONNECTION;
+show variable spanner.readonly;
+NEW_CONNECTION;
+show
+variable
+spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.readonly;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.readonly/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.readonly;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+SHOW SPANNER.RETRY_ABORTS_INTERNALLY;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+ show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+ show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+
+
+
+show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show spanner.retry_aborts_internally ;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show spanner.retry_aborts_internally ;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show spanner.retry_aborts_internally
+
+;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show
+spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally bar;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally%;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally_;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally&;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally$;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally@;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally!;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally*;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally(;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally);
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally-;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally+;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally-#;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally/;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally\;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally?;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally-/;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally/#;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.retry_aborts_internally/-;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+SHOW VARIABLE SPANNER.RETRY_ABORTS_INTERNALLY;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+ show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+ show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+
+
+
+show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show variable spanner.retry_aborts_internally ;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show variable spanner.retry_aborts_internally ;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show variable spanner.retry_aborts_internally
+
+;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+show
+variable
+spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally bar;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally%;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally_;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally&;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally$;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally@;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally!;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally*;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally(;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally);
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally-;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally+;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally-#;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally/;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally\;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally?;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally-/;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally/#;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.retry_aborts_internally;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.retry_aborts_internally/-;
+NEW_CONNECTION;
+set spanner.readonly=false;
+set autocommit=false;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.retry_aborts_internally;
+NEW_CONNECTION;
+show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+SHOW SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+ show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+ show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+
+
+
+show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+show spanner.autocommit_dml_mode ;
+NEW_CONNECTION;
+show spanner.autocommit_dml_mode ;
+NEW_CONNECTION;
+show spanner.autocommit_dml_mode
+
+;
+NEW_CONNECTION;
+show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+show
+spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.autocommit_dml_mode/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+ show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+ show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+
+
+
+show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+show variable spanner.autocommit_dml_mode ;
+NEW_CONNECTION;
+show variable spanner.autocommit_dml_mode ;
+NEW_CONNECTION;
+show variable spanner.autocommit_dml_mode
+
+;
+NEW_CONNECTION;
+show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+show
+variable
+spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.autocommit_dml_mode/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.autocommit_dml_mode;
+NEW_CONNECTION;
+show statement_timeout;
+NEW_CONNECTION;
+SHOW STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+show statement_timeout;
+NEW_CONNECTION;
+ show statement_timeout;
+NEW_CONNECTION;
+ show statement_timeout;
+NEW_CONNECTION;
+
+
+
+show statement_timeout;
+NEW_CONNECTION;
+show statement_timeout ;
+NEW_CONNECTION;
+show statement_timeout ;
+NEW_CONNECTION;
+show statement_timeout
+
+;
+NEW_CONNECTION;
+show statement_timeout;
+NEW_CONNECTION;
+show statement_timeout;
+NEW_CONNECTION;
+show
+statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show statement_timeout/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-statement_timeout;
+NEW_CONNECTION;
+show variable statement_timeout;
+NEW_CONNECTION;
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+show variable statement_timeout;
+NEW_CONNECTION;
+ show variable statement_timeout;
+NEW_CONNECTION;
+ show variable statement_timeout;
+NEW_CONNECTION;
+
+
+
+show variable statement_timeout;
+NEW_CONNECTION;
+show variable statement_timeout ;
+NEW_CONNECTION;
+show variable statement_timeout ;
+NEW_CONNECTION;
+show variable statement_timeout
+
+;
+NEW_CONNECTION;
+show variable statement_timeout;
+NEW_CONNECTION;
+show variable statement_timeout;
+NEW_CONNECTION;
+show
+variable
+statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable statement_timeout;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable statement_timeout/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-statement_timeout;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+SHOW SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+ show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+ show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+
+
+
+show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show spanner.read_timestamp ;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show spanner.read_timestamp ;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show spanner.read_timestamp
+
+;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show
+spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp bar;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp%;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp_;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp&;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp$;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp@;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp!;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp*;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp(;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp);
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp-;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp+;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp-#;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp/;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp\;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp?;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp-/;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp/#;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_timestamp/-;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+ show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+ show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+
+
+
+show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show variable spanner.read_timestamp ;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show variable spanner.read_timestamp ;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show variable spanner.read_timestamp
+
+;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+show
+variable
+spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp bar;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp%;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp_;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp&;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp$;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp@;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp!;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp*;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp(;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp);
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp-;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp+;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp-#;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp/;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp\;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp?;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp-/;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp/#;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.read_timestamp;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_timestamp/-;
+NEW_CONNECTION;
+set spanner.readonly = true;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.read_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+SHOW SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+ show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+ show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+
+
+
+show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_timestamp ;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_timestamp ;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_timestamp
+
+;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+show
+spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp bar;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp%;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp_;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp&;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp$;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp@;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp!;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp*;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp(;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp);
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp-;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp+;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp-#;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp/;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp\;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp?;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp-/;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp/#;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_timestamp/-;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+ show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+ show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+
+
+
+show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_timestamp ;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_timestamp ;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_timestamp
+
+;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+show
+variable
+spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp bar;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp%;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp_;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp&;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp$;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp@;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp!;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp*;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp(;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp);
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp-;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp+;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp-#;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp/;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp\;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp?;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp-/;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp/#;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.commit_timestamp;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_timestamp/-;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.commit_timestamp;
+NEW_CONNECTION;
+show spanner.read_only_staleness;
+NEW_CONNECTION;
+SHOW SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+show spanner.read_only_staleness;
+NEW_CONNECTION;
+ show spanner.read_only_staleness;
+NEW_CONNECTION;
+ show spanner.read_only_staleness;
+NEW_CONNECTION;
+
+
+
+show spanner.read_only_staleness;
+NEW_CONNECTION;
+show spanner.read_only_staleness ;
+NEW_CONNECTION;
+show spanner.read_only_staleness ;
+NEW_CONNECTION;
+show spanner.read_only_staleness
+
+;
+NEW_CONNECTION;
+show spanner.read_only_staleness;
+NEW_CONNECTION;
+show spanner.read_only_staleness;
+NEW_CONNECTION;
+show
+spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.read_only_staleness/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.read_only_staleness;
+NEW_CONNECTION;
+show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+ show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+ show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+
+
+
+show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+show variable spanner.read_only_staleness ;
+NEW_CONNECTION;
+show variable spanner.read_only_staleness ;
+NEW_CONNECTION;
+show variable spanner.read_only_staleness
+
+;
+NEW_CONNECTION;
+show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+show
+variable
+spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.read_only_staleness;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.read_only_staleness/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.read_only_staleness;
+NEW_CONNECTION;
+show spanner.optimizer_version;
+NEW_CONNECTION;
+SHOW SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+show spanner.optimizer_version;
+NEW_CONNECTION;
+ show spanner.optimizer_version;
+NEW_CONNECTION;
+ show spanner.optimizer_version;
+NEW_CONNECTION;
+
+
+
+show spanner.optimizer_version;
+NEW_CONNECTION;
+show spanner.optimizer_version ;
+NEW_CONNECTION;
+show spanner.optimizer_version ;
+NEW_CONNECTION;
+show spanner.optimizer_version
+
+;
+NEW_CONNECTION;
+show spanner.optimizer_version;
+NEW_CONNECTION;
+show spanner.optimizer_version;
+NEW_CONNECTION;
+show
+spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_version/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.optimizer_version;
+NEW_CONNECTION;
+show variable spanner.optimizer_version;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+show variable spanner.optimizer_version;
+NEW_CONNECTION;
+ show variable spanner.optimizer_version;
+NEW_CONNECTION;
+ show variable spanner.optimizer_version;
+NEW_CONNECTION;
+
+
+
+show variable spanner.optimizer_version;
+NEW_CONNECTION;
+show variable spanner.optimizer_version ;
+NEW_CONNECTION;
+show variable spanner.optimizer_version ;
+NEW_CONNECTION;
+show variable spanner.optimizer_version
+
+;
+NEW_CONNECTION;
+show variable spanner.optimizer_version;
+NEW_CONNECTION;
+show variable spanner.optimizer_version;
+NEW_CONNECTION;
+show
+variable
+spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.optimizer_version;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_version/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.optimizer_version;
+NEW_CONNECTION;
+show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+SHOW SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+ show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+ show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+
+
+
+show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+show spanner.optimizer_statistics_package ;
+NEW_CONNECTION;
+show spanner.optimizer_statistics_package ;
+NEW_CONNECTION;
+show spanner.optimizer_statistics_package
+
+;
+NEW_CONNECTION;
+show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+show
+spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.optimizer_statistics_package/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+ show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+ show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+
+
+
+show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+show variable spanner.optimizer_statistics_package ;
+NEW_CONNECTION;
+show variable spanner.optimizer_statistics_package ;
+NEW_CONNECTION;
+show variable spanner.optimizer_statistics_package
+
+;
+NEW_CONNECTION;
+show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+show
+variable
+spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.optimizer_statistics_package/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.optimizer_statistics_package;
+NEW_CONNECTION;
+show spanner.return_commit_stats;
+NEW_CONNECTION;
+SHOW SPANNER.RETURN_COMMIT_STATS;
+NEW_CONNECTION;
+show spanner.return_commit_stats;
+NEW_CONNECTION;
+ show spanner.return_commit_stats;
+NEW_CONNECTION;
+ show spanner.return_commit_stats;
+NEW_CONNECTION;
+
+
+
+show spanner.return_commit_stats;
+NEW_CONNECTION;
+show spanner.return_commit_stats ;
+NEW_CONNECTION;
+show spanner.return_commit_stats ;
+NEW_CONNECTION;
+show spanner.return_commit_stats
+
+;
+NEW_CONNECTION;
+show spanner.return_commit_stats;
+NEW_CONNECTION;
+show spanner.return_commit_stats;
+NEW_CONNECTION;
+show
+spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.return_commit_stats/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.return_commit_stats;
+NEW_CONNECTION;
+show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.RETURN_COMMIT_STATS;
+NEW_CONNECTION;
+show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+ show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+ show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+
+
+
+show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+show variable spanner.return_commit_stats ;
+NEW_CONNECTION;
+show variable spanner.return_commit_stats ;
+NEW_CONNECTION;
+show variable spanner.return_commit_stats
+
+;
+NEW_CONNECTION;
+show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+show
+variable
+spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.return_commit_stats;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.return_commit_stats/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.return_commit_stats;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+SHOW SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+ show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+ show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+
+
+
+show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_response ;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_response ;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_response
+
+;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+show
+spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response bar;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response%;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response_;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response&;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response$;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response@;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response!;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response*;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response(;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response);
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response-;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response+;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response-#;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response/;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response\;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response?;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response-/;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response/#;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.commit_response/-;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+ show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+ show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+
+
+
+show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_response ;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_response ;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_response
+
+;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+show
+variable
+spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response bar;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response%;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response_;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response&;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response$;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response@;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response!;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response*;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response(;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response);
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response-;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response+;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response-#;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response/;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response\;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response?;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response-/;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response/#;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.commit_response;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.commit_response/-;
+NEW_CONNECTION;
+update foo set bar=1;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.commit_response;
+NEW_CONNECTION;
+show spanner.statement_tag;
+NEW_CONNECTION;
+SHOW SPANNER.STATEMENT_TAG;
+NEW_CONNECTION;
+show spanner.statement_tag;
+NEW_CONNECTION;
+ show spanner.statement_tag;
+NEW_CONNECTION;
+ show spanner.statement_tag;
+NEW_CONNECTION;
+
+
+
+show spanner.statement_tag;
+NEW_CONNECTION;
+show spanner.statement_tag ;
+NEW_CONNECTION;
+show spanner.statement_tag ;
+NEW_CONNECTION;
+show spanner.statement_tag
+
+;
+NEW_CONNECTION;
+show spanner.statement_tag;
+NEW_CONNECTION;
+show spanner.statement_tag;
+NEW_CONNECTION;
+show
+spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.statement_tag/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.statement_tag;
+NEW_CONNECTION;
+show variable spanner.statement_tag;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.STATEMENT_TAG;
+NEW_CONNECTION;
+show variable spanner.statement_tag;
+NEW_CONNECTION;
+ show variable spanner.statement_tag;
+NEW_CONNECTION;
+ show variable spanner.statement_tag;
+NEW_CONNECTION;
+
+
+
+show variable spanner.statement_tag;
+NEW_CONNECTION;
+show variable spanner.statement_tag ;
+NEW_CONNECTION;
+show variable spanner.statement_tag ;
+NEW_CONNECTION;
+show variable spanner.statement_tag
+
+;
+NEW_CONNECTION;
+show variable spanner.statement_tag;
+NEW_CONNECTION;
+show variable spanner.statement_tag;
+NEW_CONNECTION;
+show
+variable
+spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.statement_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.statement_tag/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.statement_tag;
+NEW_CONNECTION;
+show spanner.transaction_tag;
+NEW_CONNECTION;
+SHOW SPANNER.TRANSACTION_TAG;
+NEW_CONNECTION;
+show spanner.transaction_tag;
+NEW_CONNECTION;
+ show spanner.transaction_tag;
+NEW_CONNECTION;
+ show spanner.transaction_tag;
+NEW_CONNECTION;
+
+
+
+show spanner.transaction_tag;
+NEW_CONNECTION;
+show spanner.transaction_tag ;
+NEW_CONNECTION;
+show spanner.transaction_tag ;
+NEW_CONNECTION;
+show spanner.transaction_tag
+
+;
+NEW_CONNECTION;
+show spanner.transaction_tag;
+NEW_CONNECTION;
+show spanner.transaction_tag;
+NEW_CONNECTION;
+show
+spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.transaction_tag/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.transaction_tag;
+NEW_CONNECTION;
+show variable spanner.transaction_tag;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.TRANSACTION_TAG;
+NEW_CONNECTION;
+show variable spanner.transaction_tag;
+NEW_CONNECTION;
+ show variable spanner.transaction_tag;
+NEW_CONNECTION;
+ show variable spanner.transaction_tag;
+NEW_CONNECTION;
+
+
+
+show variable spanner.transaction_tag;
+NEW_CONNECTION;
+show variable spanner.transaction_tag ;
+NEW_CONNECTION;
+show variable spanner.transaction_tag ;
+NEW_CONNECTION;
+show variable spanner.transaction_tag
+
+;
+NEW_CONNECTION;
+show variable spanner.transaction_tag;
+NEW_CONNECTION;
+show variable spanner.transaction_tag;
+NEW_CONNECTION;
+show
+variable
+spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.transaction_tag;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.transaction_tag/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.transaction_tag;
+NEW_CONNECTION;
+show spanner.rpc_priority;
+NEW_CONNECTION;
+SHOW SPANNER.RPC_PRIORITY;
+NEW_CONNECTION;
+show spanner.rpc_priority;
+NEW_CONNECTION;
+ show spanner.rpc_priority;
+NEW_CONNECTION;
+ show spanner.rpc_priority;
+NEW_CONNECTION;
+
+
+
+show spanner.rpc_priority;
+NEW_CONNECTION;
+show spanner.rpc_priority ;
+NEW_CONNECTION;
+show spanner.rpc_priority ;
+NEW_CONNECTION;
+show spanner.rpc_priority
+
+;
+NEW_CONNECTION;
+show spanner.rpc_priority;
+NEW_CONNECTION;
+show spanner.rpc_priority;
+NEW_CONNECTION;
+show
+spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show%spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show_spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show&spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show$spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show@spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show!spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show*spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show(spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show)spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show+spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-#spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show\spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show?spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show-/spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/#spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show spanner.rpc_priority/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+show/-spanner.rpc_priority;
+NEW_CONNECTION;
+show variable spanner.rpc_priority;
+NEW_CONNECTION;
+SHOW VARIABLE SPANNER.RPC_PRIORITY;
+NEW_CONNECTION;
+show variable spanner.rpc_priority;
+NEW_CONNECTION;
+ show variable spanner.rpc_priority;
+NEW_CONNECTION;
+ show variable spanner.rpc_priority;
+NEW_CONNECTION;
+
+
+
+show variable spanner.rpc_priority;
+NEW_CONNECTION;
+show variable spanner.rpc_priority ;
+NEW_CONNECTION;
+show variable spanner.rpc_priority ;
+NEW_CONNECTION;
+show variable spanner.rpc_priority
+
+;
+NEW_CONNECTION;
+show variable spanner.rpc_priority;
+NEW_CONNECTION;
+show variable spanner.rpc_priority;
+NEW_CONNECTION;
+show
+variable
+spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable%spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable_spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable&spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable$spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable@spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable!spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable*spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable(spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority);
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable)spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable+spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-#spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable\spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable?spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable-/spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/#spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-show variable spanner.rpc_priority;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable spanner.rpc_priority/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION UNIMPLEMENTED
+show variable/-spanner.rpc_priority;
+NEW_CONNECTION;
+begin;
+NEW_CONNECTION;
+BEGIN;
+NEW_CONNECTION;
+begin;
+NEW_CONNECTION;
+ begin;
+NEW_CONNECTION;
+ begin;
+NEW_CONNECTION;
+
+
+
+begin;
+NEW_CONNECTION;
+begin ;
+NEW_CONNECTION;
+begin ;
+NEW_CONNECTION;
+begin
+
+;
+NEW_CONNECTION;
+begin;
+NEW_CONNECTION;
+begin;
+NEW_CONNECTION;
+begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/-;
+NEW_CONNECTION;
+start;
+NEW_CONNECTION;
+START;
+NEW_CONNECTION;
+start;
+NEW_CONNECTION;
+ start;
+NEW_CONNECTION;
+ start;
+NEW_CONNECTION;
+
+
+
+start;
+NEW_CONNECTION;
+start ;
+NEW_CONNECTION;
+start ;
+NEW_CONNECTION;
+start
+
+;
+NEW_CONNECTION;
+start;
+NEW_CONNECTION;
+start;
+NEW_CONNECTION;
+start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/-;
+NEW_CONNECTION;
+begin transaction;
+NEW_CONNECTION;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+begin transaction;
+NEW_CONNECTION;
+ begin transaction;
+NEW_CONNECTION;
+ begin transaction;
+NEW_CONNECTION;
+
+
+
+begin transaction;
+NEW_CONNECTION;
+begin transaction ;
+NEW_CONNECTION;
+begin transaction ;
+NEW_CONNECTION;
+begin transaction
+
+;
+NEW_CONNECTION;
+begin transaction;
+NEW_CONNECTION;
+begin transaction;
+NEW_CONNECTION;
+begin
+transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin%transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin_transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin&transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin$transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin@transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin!transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin*transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin(transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin)transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin+transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-#transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin\transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin?transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-/transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/#transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/-transaction;
+NEW_CONNECTION;
+start transaction;
+NEW_CONNECTION;
+START TRANSACTION;
+NEW_CONNECTION;
+start transaction;
+NEW_CONNECTION;
+ start transaction;
+NEW_CONNECTION;
+ start transaction;
+NEW_CONNECTION;
+
+
+
+start transaction;
+NEW_CONNECTION;
+start transaction ;
+NEW_CONNECTION;
+start transaction ;
+NEW_CONNECTION;
+start transaction
+
+;
+NEW_CONNECTION;
+start transaction;
+NEW_CONNECTION;
+start transaction;
+NEW_CONNECTION;
+start
+transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start%transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start_transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start&transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start$transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start@transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start!transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start*transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start(transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start)transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start+transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-#transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start\transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start?transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-/transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/#transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start transaction;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/-transaction;
+NEW_CONNECTION;
+begin work;
+NEW_CONNECTION;
+BEGIN WORK;
+NEW_CONNECTION;
+begin work;
+NEW_CONNECTION;
+ begin work;
+NEW_CONNECTION;
+ begin work;
+NEW_CONNECTION;
+
+
+
+begin work;
+NEW_CONNECTION;
+begin work ;
+NEW_CONNECTION;
+begin work ;
+NEW_CONNECTION;
+begin work
+
+;
+NEW_CONNECTION;
+begin work;
+NEW_CONNECTION;
+begin work;
+NEW_CONNECTION;
+begin
+work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin%work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin_work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin&work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin$work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin@work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin!work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin*work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin(work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin)work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin+work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-#work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin\work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin?work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin-/work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/#work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin/-work;
+NEW_CONNECTION;
+start work;
+NEW_CONNECTION;
+START WORK;
+NEW_CONNECTION;
+start work;
+NEW_CONNECTION;
+ start work;
+NEW_CONNECTION;
+ start work;
+NEW_CONNECTION;
+
+
+
+start work;
+NEW_CONNECTION;
+start work ;
+NEW_CONNECTION;
+start work ;
+NEW_CONNECTION;
+start work
+
+;
+NEW_CONNECTION;
+start work;
+NEW_CONNECTION;
+start work;
+NEW_CONNECTION;
+start
+work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start%work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start_work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start&work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start$work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start@work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start!work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start*work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start(work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start)work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start+work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-#work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start\work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start?work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start-/work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/#work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start work;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start/-work;
+NEW_CONNECTION;
+begin read only;
+NEW_CONNECTION;
+BEGIN READ ONLY;
+NEW_CONNECTION;
+begin read only;
+NEW_CONNECTION;
+ begin read only;
+NEW_CONNECTION;
+ begin read only;
+NEW_CONNECTION;
+
+
+
+begin read only;
+NEW_CONNECTION;
+begin read only ;
+NEW_CONNECTION;
+begin read only ;
+NEW_CONNECTION;
+begin read only
+
+;
+NEW_CONNECTION;
+begin read only;
+NEW_CONNECTION;
+begin read only;
+NEW_CONNECTION;
+begin
+read
+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read%only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read_only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read&only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read$only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read@only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read!only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read*only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read(only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read)only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read-only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read-#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read\only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read?only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read-/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read/#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read only/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read/-only;
+NEW_CONNECTION;
+start read only;
+NEW_CONNECTION;
+START READ ONLY;
+NEW_CONNECTION;
+start read only;
+NEW_CONNECTION;
+ start read only;
+NEW_CONNECTION;
+ start read only;
+NEW_CONNECTION;
+
+
+
+start read only;
+NEW_CONNECTION;
+start read only ;
+NEW_CONNECTION;
+start read only ;
+NEW_CONNECTION;
+start read only
+
+;
+NEW_CONNECTION;
+start read only;
+NEW_CONNECTION;
+start read only;
+NEW_CONNECTION;
+start
+read
+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read%only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read_only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read&only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read$only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read@only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read!only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read*only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read(only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read)only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read-only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read-#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read\only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read?only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read-/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read/#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read only/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read/-only;
+NEW_CONNECTION;
+begin transaction read only;
+NEW_CONNECTION;
+BEGIN TRANSACTION READ ONLY;
+NEW_CONNECTION;
+begin transaction read only;
+NEW_CONNECTION;
+ begin transaction read only;
+NEW_CONNECTION;
+ begin transaction read only;
+NEW_CONNECTION;
+
+
+
+begin transaction read only;
+NEW_CONNECTION;
+begin transaction read only ;
+NEW_CONNECTION;
+begin transaction read only ;
+NEW_CONNECTION;
+begin transaction read only
+
+;
+NEW_CONNECTION;
+begin transaction read only;
+NEW_CONNECTION;
+begin transaction read only;
+NEW_CONNECTION;
+begin
+transaction
+read
+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read%only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read_only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read&only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read$only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read@only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read!only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read*only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read(only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read)only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read-only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read-#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read\only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read?only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read-/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read/#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read only/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read/-only;
+NEW_CONNECTION;
+start transaction read only;
+NEW_CONNECTION;
+START TRANSACTION READ ONLY;
+NEW_CONNECTION;
+start transaction read only;
+NEW_CONNECTION;
+ start transaction read only;
+NEW_CONNECTION;
+ start transaction read only;
+NEW_CONNECTION;
+
+
+
+start transaction read only;
+NEW_CONNECTION;
+start transaction read only ;
+NEW_CONNECTION;
+start transaction read only ;
+NEW_CONNECTION;
+start transaction read only
+
+;
+NEW_CONNECTION;
+start transaction read only;
+NEW_CONNECTION;
+start transaction read only;
+NEW_CONNECTION;
+start
+transaction
+read
+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read%only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read_only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read&only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read$only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read@only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read!only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read*only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read(only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read)only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read-only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read-#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read\only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read?only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read-/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read/#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read only/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read/-only;
+NEW_CONNECTION;
+begin work read only;
+NEW_CONNECTION;
+BEGIN WORK READ ONLY;
+NEW_CONNECTION;
+begin work read only;
+NEW_CONNECTION;
+ begin work read only;
+NEW_CONNECTION;
+ begin work read only;
+NEW_CONNECTION;
+
+
+
+begin work read only;
+NEW_CONNECTION;
+begin work read only ;
+NEW_CONNECTION;
+begin work read only ;
+NEW_CONNECTION;
+begin work read only
+
+;
+NEW_CONNECTION;
+begin work read only;
+NEW_CONNECTION;
+begin work read only;
+NEW_CONNECTION;
+begin
+work
+read
+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read%only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read_only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read&only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read$only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read@only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read!only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read*only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read(only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read)only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read-only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read-#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read\only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read?only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read-/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read/#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read only/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read/-only;
+NEW_CONNECTION;
+start work read only;
+NEW_CONNECTION;
+START WORK READ ONLY;
+NEW_CONNECTION;
+start work read only;
+NEW_CONNECTION;
+ start work read only;
+NEW_CONNECTION;
+ start work read only;
+NEW_CONNECTION;
+
+
+
+start work read only;
+NEW_CONNECTION;
+start work read only ;
+NEW_CONNECTION;
+start work read only ;
+NEW_CONNECTION;
+start work read only
+
+;
+NEW_CONNECTION;
+start work read only;
+NEW_CONNECTION;
+start work read only;
+NEW_CONNECTION;
+start
+work
+read
+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read%only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read_only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read&only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read$only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read@only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read!only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read*only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read(only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read)only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read-only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read-#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read\only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read?only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read-/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read/#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start work read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read only/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read/-only;
+NEW_CONNECTION;
+begin read write;
+NEW_CONNECTION;
+BEGIN READ WRITE;
+NEW_CONNECTION;
+begin read write;
+NEW_CONNECTION;
+ begin read write;
+NEW_CONNECTION;
+ begin read write;
+NEW_CONNECTION;
+
+
+
+begin read write;
+NEW_CONNECTION;
+begin read write ;
+NEW_CONNECTION;
+begin read write ;
+NEW_CONNECTION;
+begin read write
+
+;
+NEW_CONNECTION;
+begin read write;
+NEW_CONNECTION;
+begin read write;
+NEW_CONNECTION;
+begin
+read
+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read%write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read_write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read&write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read$write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read@write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read!write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read*write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read(write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read)write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read-write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read-#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read\write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read?write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read-/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read/#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read write/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin read/-write;
+NEW_CONNECTION;
+start read write;
+NEW_CONNECTION;
+START READ WRITE;
+NEW_CONNECTION;
+start read write;
+NEW_CONNECTION;
+ start read write;
+NEW_CONNECTION;
+ start read write;
+NEW_CONNECTION;
+
+
+
+start read write;
+NEW_CONNECTION;
+start read write ;
+NEW_CONNECTION;
+start read write ;
+NEW_CONNECTION;
+start read write
+
+;
+NEW_CONNECTION;
+start read write;
+NEW_CONNECTION;
+start read write;
+NEW_CONNECTION;
+start
+read
+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read%write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read_write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read&write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read$write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read@write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read!write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read*write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read(write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read)write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read-write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read-#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read\write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read?write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read-/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read/#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read write/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start read/-write;
+NEW_CONNECTION;
+begin transaction read write;
+NEW_CONNECTION;
+BEGIN TRANSACTION READ WRITE;
+NEW_CONNECTION;
+begin transaction read write;
+NEW_CONNECTION;
+ begin transaction read write;
+NEW_CONNECTION;
+ begin transaction read write;
+NEW_CONNECTION;
+
+
+
+begin transaction read write;
+NEW_CONNECTION;
+begin transaction read write ;
+NEW_CONNECTION;
+begin transaction read write ;
+NEW_CONNECTION;
+begin transaction read write
+
+;
+NEW_CONNECTION;
+begin transaction read write;
+NEW_CONNECTION;
+begin transaction read write;
+NEW_CONNECTION;
+begin
+transaction
+read
+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read%write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read_write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read&write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read$write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read@write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read!write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read*write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read(write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read)write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read-write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read-#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read\write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read?write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read-/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read/#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read write/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction read/-write;
+NEW_CONNECTION;
+start transaction read write;
+NEW_CONNECTION;
+START TRANSACTION READ WRITE;
+NEW_CONNECTION;
+start transaction read write;
+NEW_CONNECTION;
+ start transaction read write;
+NEW_CONNECTION;
+ start transaction read write;
+NEW_CONNECTION;
+
+
+
+start transaction read write;
+NEW_CONNECTION;
+start transaction read write ;
+NEW_CONNECTION;
+start transaction read write ;
+NEW_CONNECTION;
+start transaction read write
+
+;
+NEW_CONNECTION;
+start transaction read write;
+NEW_CONNECTION;
+start transaction read write;
+NEW_CONNECTION;
+start
+transaction
+read
+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read%write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read_write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read&write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read$write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read@write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read!write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read*write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read(write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read)write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read-write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read-#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read\write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read?write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read-/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read/#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read write/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction read/-write;
+NEW_CONNECTION;
+begin work read write;
+NEW_CONNECTION;
+BEGIN WORK READ WRITE;
+NEW_CONNECTION;
+begin work read write;
+NEW_CONNECTION;
+ begin work read write;
+NEW_CONNECTION;
+ begin work read write;
+NEW_CONNECTION;
+
+
+
+begin work read write;
+NEW_CONNECTION;
+begin work read write ;
+NEW_CONNECTION;
+begin work read write ;
+NEW_CONNECTION;
+begin work read write
+
+;
+NEW_CONNECTION;
+begin work read write;
+NEW_CONNECTION;
+begin work read write;
+NEW_CONNECTION;
+begin
+work
+read
+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read%write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read_write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read&write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read$write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read@write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read!write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read*write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read(write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read)write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read-write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read-#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read\write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read?write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read-/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read/#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read write/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work read/-write;
+NEW_CONNECTION;
+start work read write;
+NEW_CONNECTION;
+START WORK READ WRITE;
+NEW_CONNECTION;
+start work read write;
+NEW_CONNECTION;
+ start work read write;
+NEW_CONNECTION;
+ start work read write;
+NEW_CONNECTION;
+
+
+
+start work read write;
+NEW_CONNECTION;
+start work read write ;
+NEW_CONNECTION;
+start work read write ;
+NEW_CONNECTION;
+start work read write
+
+;
+NEW_CONNECTION;
+start work read write;
+NEW_CONNECTION;
+start work read write;
+NEW_CONNECTION;
+start
+work
+read
+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read%write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read_write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read&write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read$write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read@write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read!write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read*write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read(write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read)write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read-write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read-#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read\write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read?write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read-/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read/#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start work read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read write/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work read/-write;
+NEW_CONNECTION;
+begin isolation level default;
+NEW_CONNECTION;
+BEGIN ISOLATION LEVEL DEFAULT;
+NEW_CONNECTION;
+begin isolation level default;
+NEW_CONNECTION;
+ begin isolation level default;
+NEW_CONNECTION;
+ begin isolation level default;
+NEW_CONNECTION;
+
+
+
+begin isolation level default;
+NEW_CONNECTION;
+begin isolation level default ;
+NEW_CONNECTION;
+begin isolation level default ;
+NEW_CONNECTION;
+begin isolation level default
+
+;
+NEW_CONNECTION;
+begin isolation level default;
+NEW_CONNECTION;
+begin isolation level default;
+NEW_CONNECTION;
+begin
+isolation
+level
+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level%default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level_default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level&default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level$default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level@default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level!default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level*default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level(default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level)default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level-default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level-#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level\default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level?default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level-/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level/#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level/-default;
+NEW_CONNECTION;
+start isolation level default;
+NEW_CONNECTION;
+START ISOLATION LEVEL DEFAULT;
+NEW_CONNECTION;
+start isolation level default;
+NEW_CONNECTION;
+ start isolation level default;
+NEW_CONNECTION;
+ start isolation level default;
+NEW_CONNECTION;
+
+
+
+start isolation level default;
+NEW_CONNECTION;
+start isolation level default ;
+NEW_CONNECTION;
+start isolation level default ;
+NEW_CONNECTION;
+start isolation level default
+
+;
+NEW_CONNECTION;
+start isolation level default;
+NEW_CONNECTION;
+start isolation level default;
+NEW_CONNECTION;
+start
+isolation
+level
+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level%default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level_default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level&default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level$default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level@default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level!default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level*default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level(default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level)default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level-default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level-#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level\default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level?default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level-/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level/#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level/-default;
+NEW_CONNECTION;
+begin transaction isolation level default;
+NEW_CONNECTION;
+BEGIN TRANSACTION ISOLATION LEVEL DEFAULT;
+NEW_CONNECTION;
+begin transaction isolation level default;
+NEW_CONNECTION;
+ begin transaction isolation level default;
+NEW_CONNECTION;
+ begin transaction isolation level default;
+NEW_CONNECTION;
+
+
+
+begin transaction isolation level default;
+NEW_CONNECTION;
+begin transaction isolation level default ;
+NEW_CONNECTION;
+begin transaction isolation level default ;
+NEW_CONNECTION;
+begin transaction isolation level default
+
+;
+NEW_CONNECTION;
+begin transaction isolation level default;
+NEW_CONNECTION;
+begin transaction isolation level default;
+NEW_CONNECTION;
+begin
+transaction
+isolation
+level
+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level%default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level_default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level&default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level$default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level@default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level!default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level*default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level(default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level)default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level-default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level-#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level\default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level?default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level-/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level/#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level/-default;
+NEW_CONNECTION;
+start transaction isolation level default;
+NEW_CONNECTION;
+START TRANSACTION ISOLATION LEVEL DEFAULT;
+NEW_CONNECTION;
+start transaction isolation level default;
+NEW_CONNECTION;
+ start transaction isolation level default;
+NEW_CONNECTION;
+ start transaction isolation level default;
+NEW_CONNECTION;
+
+
+
+start transaction isolation level default;
+NEW_CONNECTION;
+start transaction isolation level default ;
+NEW_CONNECTION;
+start transaction isolation level default ;
+NEW_CONNECTION;
+start transaction isolation level default
+
+;
+NEW_CONNECTION;
+start transaction isolation level default;
+NEW_CONNECTION;
+start transaction isolation level default;
+NEW_CONNECTION;
+start
+transaction
+isolation
+level
+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level%default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level_default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level&default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level$default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level@default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level!default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level*default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level(default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level)default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level-default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level-#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level\default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level?default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level-/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level/#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level/-default;
+NEW_CONNECTION;
+begin work isolation level default;
+NEW_CONNECTION;
+BEGIN WORK ISOLATION LEVEL DEFAULT;
+NEW_CONNECTION;
+begin work isolation level default;
+NEW_CONNECTION;
+ begin work isolation level default;
+NEW_CONNECTION;
+ begin work isolation level default;
+NEW_CONNECTION;
+
+
+
+begin work isolation level default;
+NEW_CONNECTION;
+begin work isolation level default ;
+NEW_CONNECTION;
+begin work isolation level default ;
+NEW_CONNECTION;
+begin work isolation level default
+
+;
+NEW_CONNECTION;
+begin work isolation level default;
+NEW_CONNECTION;
+begin work isolation level default;
+NEW_CONNECTION;
+begin
+work
+isolation
+level
+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level%default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level_default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level&default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level$default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level@default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level!default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level*default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level(default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level)default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level-default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level-#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level\default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level?default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level-/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level/#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level/-default;
+NEW_CONNECTION;
+start work isolation level default;
+NEW_CONNECTION;
+START WORK ISOLATION LEVEL DEFAULT;
+NEW_CONNECTION;
+start work isolation level default;
+NEW_CONNECTION;
+ start work isolation level default;
+NEW_CONNECTION;
+ start work isolation level default;
+NEW_CONNECTION;
+
+
+
+start work isolation level default;
+NEW_CONNECTION;
+start work isolation level default ;
+NEW_CONNECTION;
+start work isolation level default ;
+NEW_CONNECTION;
+start work isolation level default
+
+;
+NEW_CONNECTION;
+start work isolation level default;
+NEW_CONNECTION;
+start work isolation level default;
+NEW_CONNECTION;
+start
+work
+isolation
+level
+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level%default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level_default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level&default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level$default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level@default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level!default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level*default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level(default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level)default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level-default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level-#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level\default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level?default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level-/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level/#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start work isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level/-default;
+NEW_CONNECTION;
+begin isolation level serializable;
+NEW_CONNECTION;
+BEGIN ISOLATION LEVEL SERIALIZABLE;
+NEW_CONNECTION;
+begin isolation level serializable;
+NEW_CONNECTION;
+ begin isolation level serializable;
+NEW_CONNECTION;
+ begin isolation level serializable;
+NEW_CONNECTION;
+
+
+
+begin isolation level serializable;
+NEW_CONNECTION;
+begin isolation level serializable ;
+NEW_CONNECTION;
+begin isolation level serializable ;
+NEW_CONNECTION;
+begin isolation level serializable
+
+;
+NEW_CONNECTION;
+begin isolation level serializable;
+NEW_CONNECTION;
+begin isolation level serializable;
+NEW_CONNECTION;
+begin
+isolation
+level
+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level%serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level_serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level&serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level$serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level@serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level!serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level*serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level(serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level)serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level-serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level-#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level\serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level?serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level-/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level/#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level serializable/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin isolation level/-serializable;
+NEW_CONNECTION;
+start isolation level serializable;
+NEW_CONNECTION;
+START ISOLATION LEVEL SERIALIZABLE;
+NEW_CONNECTION;
+start isolation level serializable;
+NEW_CONNECTION;
+ start isolation level serializable;
+NEW_CONNECTION;
+ start isolation level serializable;
+NEW_CONNECTION;
+
+
+
+start isolation level serializable;
+NEW_CONNECTION;
+start isolation level serializable ;
+NEW_CONNECTION;
+start isolation level serializable ;
+NEW_CONNECTION;
+start isolation level serializable
+
+;
+NEW_CONNECTION;
+start isolation level serializable;
+NEW_CONNECTION;
+start isolation level serializable;
+NEW_CONNECTION;
+start
+isolation
+level
+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level%serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level_serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level&serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level$serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level@serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level!serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level*serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level(serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level)serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level-serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level-#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level\serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level?serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level-/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level/#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level serializable/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start isolation level/-serializable;
+NEW_CONNECTION;
+begin transaction isolation level serializable;
+NEW_CONNECTION;
+BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+NEW_CONNECTION;
+begin transaction isolation level serializable;
+NEW_CONNECTION;
+ begin transaction isolation level serializable;
+NEW_CONNECTION;
+ begin transaction isolation level serializable;
+NEW_CONNECTION;
+
+
+
+begin transaction isolation level serializable;
+NEW_CONNECTION;
+begin transaction isolation level serializable ;
+NEW_CONNECTION;
+begin transaction isolation level serializable ;
+NEW_CONNECTION;
+begin transaction isolation level serializable
+
+;
+NEW_CONNECTION;
+begin transaction isolation level serializable;
+NEW_CONNECTION;
+begin transaction isolation level serializable;
+NEW_CONNECTION;
+begin
+transaction
+isolation
+level
+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level%serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level_serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level&serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level$serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level@serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level!serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level*serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level(serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level)serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level-serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level-#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level\serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level?serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level-/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level/#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level serializable/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin transaction isolation level/-serializable;
+NEW_CONNECTION;
+start transaction isolation level serializable;
+NEW_CONNECTION;
+START TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+NEW_CONNECTION;
+start transaction isolation level serializable;
+NEW_CONNECTION;
+ start transaction isolation level serializable;
+NEW_CONNECTION;
+ start transaction isolation level serializable;
+NEW_CONNECTION;
+
+
+
+start transaction isolation level serializable;
+NEW_CONNECTION;
+start transaction isolation level serializable ;
+NEW_CONNECTION;
+start transaction isolation level serializable ;
+NEW_CONNECTION;
+start transaction isolation level serializable
+
+;
+NEW_CONNECTION;
+start transaction isolation level serializable;
+NEW_CONNECTION;
+start transaction isolation level serializable;
+NEW_CONNECTION;
+start
+transaction
+isolation
+level
+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level%serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level_serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level&serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level$serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level@serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level!serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level*serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level(serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level)serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level-serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level-#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level\serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level?serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level-/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level/#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level serializable/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start transaction isolation level/-serializable;
+NEW_CONNECTION;
+begin work isolation level serializable;
+NEW_CONNECTION;
+BEGIN WORK ISOLATION LEVEL SERIALIZABLE;
+NEW_CONNECTION;
+begin work isolation level serializable;
+NEW_CONNECTION;
+ begin work isolation level serializable;
+NEW_CONNECTION;
+ begin work isolation level serializable;
+NEW_CONNECTION;
+
+
+
+begin work isolation level serializable;
+NEW_CONNECTION;
+begin work isolation level serializable ;
+NEW_CONNECTION;
+begin work isolation level serializable ;
+NEW_CONNECTION;
+begin work isolation level serializable
+
+;
+NEW_CONNECTION;
+begin work isolation level serializable;
+NEW_CONNECTION;
+begin work isolation level serializable;
+NEW_CONNECTION;
+begin
+work
+isolation
+level
+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level%serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level_serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level&serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level$serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level@serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level!serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level*serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level(serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level)serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level-serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level-#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level\serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level?serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level-/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level/#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-begin work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level serializable/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+begin work isolation level/-serializable;
+NEW_CONNECTION;
+start work isolation level serializable;
+NEW_CONNECTION;
+START WORK ISOLATION LEVEL SERIALIZABLE;
+NEW_CONNECTION;
+start work isolation level serializable;
+NEW_CONNECTION;
+ start work isolation level serializable;
+NEW_CONNECTION;
+ start work isolation level serializable;
+NEW_CONNECTION;
+
+
+
+start work isolation level serializable;
+NEW_CONNECTION;
+start work isolation level serializable ;
+NEW_CONNECTION;
+start work isolation level serializable ;
+NEW_CONNECTION;
+start work isolation level serializable
+
+;
+NEW_CONNECTION;
+start work isolation level serializable;
+NEW_CONNECTION;
+start work isolation level serializable;
+NEW_CONNECTION;
+start
+work
+isolation
+level
+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level%serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level_serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level&serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level$serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level@serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level!serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level*serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level(serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level)serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level-serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level-#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level\serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level?serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level-/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level/#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start work isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level serializable/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start work isolation level/-serializable;
+NEW_CONNECTION;
+begin transaction;
+commit;
+NEW_CONNECTION;
+begin transaction;
+COMMIT;
+NEW_CONNECTION;
+begin transaction;
+commit;
+NEW_CONNECTION;
+begin transaction;
+ commit;
+NEW_CONNECTION;
+begin transaction;
+ commit;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+commit;
+NEW_CONNECTION;
+begin transaction;
+commit ;
+NEW_CONNECTION;
+begin transaction;
+commit ;
+NEW_CONNECTION;
+begin transaction;
+commit
+
+;
+NEW_CONNECTION;
+begin transaction;
+commit;
+NEW_CONNECTION;
+begin transaction;
+commit;
+NEW_CONNECTION;
+begin transaction;
+commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-commit;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/-;
+NEW_CONNECTION;
+begin transaction;
+commit transaction;
+NEW_CONNECTION;
+begin transaction;
+COMMIT TRANSACTION;
+NEW_CONNECTION;
+begin transaction;
+commit transaction;
+NEW_CONNECTION;
+begin transaction;
+ commit transaction;
+NEW_CONNECTION;
+begin transaction;
+ commit transaction;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+commit transaction;
+NEW_CONNECTION;
+begin transaction;
+commit transaction ;
+NEW_CONNECTION;
+begin transaction;
+commit transaction ;
+NEW_CONNECTION;
+begin transaction;
+commit transaction
+
+;
+NEW_CONNECTION;
+begin transaction;
+commit transaction;
+NEW_CONNECTION;
+begin transaction;
+commit transaction;
+NEW_CONNECTION;
+begin transaction;
+commit
+transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit%transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit_transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit&transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit$transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit@transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit!transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit*transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit(transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit)transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit+transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-#transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit\transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit?transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-/transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/#transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-commit transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/-transaction;
+NEW_CONNECTION;
+begin transaction;
+commit work;
+NEW_CONNECTION;
+begin transaction;
+COMMIT WORK;
+NEW_CONNECTION;
+begin transaction;
+commit work;
+NEW_CONNECTION;
+begin transaction;
+ commit work;
+NEW_CONNECTION;
+begin transaction;
+ commit work;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+commit work;
+NEW_CONNECTION;
+begin transaction;
+commit work ;
+NEW_CONNECTION;
+begin transaction;
+commit work ;
+NEW_CONNECTION;
+begin transaction;
+commit work
+
+;
+NEW_CONNECTION;
+begin transaction;
+commit work;
+NEW_CONNECTION;
+begin transaction;
+commit work;
+NEW_CONNECTION;
+begin transaction;
+commit
+work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit%work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit_work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit&work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit$work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit@work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit!work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit*work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit(work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit)work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit+work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-#work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit\work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit?work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit-/work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/#work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-commit work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit/-work;
+NEW_CONNECTION;
+begin transaction;
+commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+COMMIT AND NO CHAIN;
+NEW_CONNECTION;
+begin transaction;
+commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+ commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+ commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit and no chain ;
+NEW_CONNECTION;
+begin transaction;
+commit and no chain ;
+NEW_CONNECTION;
+begin transaction;
+commit and no chain
+
+;
+NEW_CONNECTION;
+begin transaction;
+commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit
+and
+no
+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no%chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no_chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no&chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no$chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no@chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no!chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no*chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no(chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no)chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no-chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no-#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no\chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no?chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no-/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no/#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-commit and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no chain/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit and no/-chain;
+NEW_CONNECTION;
+begin transaction;
+commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+COMMIT TRANSACTION AND NO CHAIN;
+NEW_CONNECTION;
+begin transaction;
+commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+ commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+ commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit transaction and no chain ;
+NEW_CONNECTION;
+begin transaction;
+commit transaction and no chain ;
+NEW_CONNECTION;
+begin transaction;
+commit transaction and no chain
+
+;
+NEW_CONNECTION;
+begin transaction;
+commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit
+transaction
+and
+no
+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no%chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no_chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no&chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no$chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no@chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no!chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no*chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no(chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no)chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no-chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no-#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no\chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no?chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no-/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no/#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-commit transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no chain/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit transaction and no/-chain;
+NEW_CONNECTION;
+begin transaction;
+commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+COMMIT WORK AND NO CHAIN;
+NEW_CONNECTION;
+begin transaction;
+commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+ commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+ commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit work and no chain ;
+NEW_CONNECTION;
+begin transaction;
+commit work and no chain ;
+NEW_CONNECTION;
+begin transaction;
+commit work and no chain
+
+;
+NEW_CONNECTION;
+begin transaction;
+commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+commit
+work
+and
+no
+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no%chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no_chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no&chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no$chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no@chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no!chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no*chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no(chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no)chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no-chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no-#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no\chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no?chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no-/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no/#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-commit work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no chain/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+commit work and no/-chain;
+NEW_CONNECTION;
+begin transaction;
+rollback;
+NEW_CONNECTION;
+begin transaction;
+ROLLBACK;
+NEW_CONNECTION;
+begin transaction;
+rollback;
+NEW_CONNECTION;
+begin transaction;
+ rollback;
+NEW_CONNECTION;
+begin transaction;
+ rollback;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+rollback;
+NEW_CONNECTION;
+begin transaction;
+rollback ;
+NEW_CONNECTION;
+begin transaction;
+rollback ;
+NEW_CONNECTION;
+begin transaction;
+rollback
+
+;
+NEW_CONNECTION;
+begin transaction;
+rollback;
+NEW_CONNECTION;
+begin transaction;
+rollback;
+NEW_CONNECTION;
+begin transaction;
+rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-rollback;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/-;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+ROLLBACK TRANSACTION;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+ rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+ rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction ;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction ;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction
+
+;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+rollback
+transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback%transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback_transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback&transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback$transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback@transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback!transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback*transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback(transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback)transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback+transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-#transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback\transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback?transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-/transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/#transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-rollback transaction;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/-transaction;
+NEW_CONNECTION;
+begin transaction;
+rollback work;
+NEW_CONNECTION;
+begin transaction;
+ROLLBACK WORK;
+NEW_CONNECTION;
+begin transaction;
+rollback work;
+NEW_CONNECTION;
+begin transaction;
+ rollback work;
+NEW_CONNECTION;
+begin transaction;
+ rollback work;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+rollback work;
+NEW_CONNECTION;
+begin transaction;
+rollback work ;
+NEW_CONNECTION;
+begin transaction;
+rollback work ;
+NEW_CONNECTION;
+begin transaction;
+rollback work
+
+;
+NEW_CONNECTION;
+begin transaction;
+rollback work;
+NEW_CONNECTION;
+begin transaction;
+rollback work;
+NEW_CONNECTION;
+begin transaction;
+rollback
+work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback%work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback_work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback&work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback$work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback@work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback!work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback*work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback(work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback)work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback+work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-#work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback\work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback?work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback-/work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/#work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-rollback work;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback/-work;
+NEW_CONNECTION;
+begin transaction;
+rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+ROLLBACK AND NO CHAIN;
+NEW_CONNECTION;
+begin transaction;
+rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+ rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+ rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback and no chain ;
+NEW_CONNECTION;
+begin transaction;
+rollback and no chain ;
+NEW_CONNECTION;
+begin transaction;
+rollback and no chain
+
+;
+NEW_CONNECTION;
+begin transaction;
+rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback
+and
+no
+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no%chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no_chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no&chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no$chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no@chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no!chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no*chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no(chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no)chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no-chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no-#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no\chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no?chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no-/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no/#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-rollback and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no chain/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback and no/-chain;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+ROLLBACK TRANSACTION AND NO CHAIN;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+ rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+ rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction and no chain ;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction and no chain ;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction and no chain
+
+;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback
+transaction
+and
+no
+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no%chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no_chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no&chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no$chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no@chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no!chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no*chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no(chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no)chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no-chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no-#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no\chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no?chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no-/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no/#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-rollback transaction and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no chain/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback transaction and no/-chain;
+NEW_CONNECTION;
+begin transaction;
+rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+ROLLBACK WORK AND NO CHAIN;
+NEW_CONNECTION;
+begin transaction;
+rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+ rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+ rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+
+
+
+rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback work and no chain ;
+NEW_CONNECTION;
+begin transaction;
+rollback work and no chain ;
+NEW_CONNECTION;
+begin transaction;
+rollback work and no chain
+
+;
+NEW_CONNECTION;
+begin transaction;
+rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+rollback
+work
+and
+no
+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain bar;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain%;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no%chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain_;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no_chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain&;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no&chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain$;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no$chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain@;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no@chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain!;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no!chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain*;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no*chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain(;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no(chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain);
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no)chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no-chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain+;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no+chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain-#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no-#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain\;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no\chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain?;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no?chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain-/;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no-/chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain/#;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no/#chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-rollback work and no chain;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no chain/-;
+NEW_CONNECTION;
+begin transaction;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+rollback work and no/-chain;
+NEW_CONNECTION;
+start batch ddl;
+NEW_CONNECTION;
+START BATCH DDL;
+NEW_CONNECTION;
+start batch ddl;
+NEW_CONNECTION;
+ start batch ddl;
+NEW_CONNECTION;
+ start batch ddl;
+NEW_CONNECTION;
+
+
+
+start batch ddl;
+NEW_CONNECTION;
+start batch ddl ;
+NEW_CONNECTION;
+start batch ddl ;
+NEW_CONNECTION;
+start batch ddl
+
+;
+NEW_CONNECTION;
+start batch ddl;
+NEW_CONNECTION;
+start batch ddl;
+NEW_CONNECTION;
+start
+batch
+ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch%ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch_ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch&ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch$ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch@ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch!ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch*ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch(ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch)ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch-ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch+ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch-#ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch/ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch\ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch?ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch-/ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch/#ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start batch ddl;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch ddl/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch/-ddl;
+NEW_CONNECTION;
+start batch dml;
+NEW_CONNECTION;
+START BATCH DML;
+NEW_CONNECTION;
+start batch dml;
+NEW_CONNECTION;
+ start batch dml;
+NEW_CONNECTION;
+ start batch dml;
+NEW_CONNECTION;
+
+
+
+start batch dml;
+NEW_CONNECTION;
+start batch dml ;
+NEW_CONNECTION;
+start batch dml ;
+NEW_CONNECTION;
+start batch dml
+
+;
+NEW_CONNECTION;
+start batch dml;
+NEW_CONNECTION;
+start batch dml;
+NEW_CONNECTION;
+start
+batch
+dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch%dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch_dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch&dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch$dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch@dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch!dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch*dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch(dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch)dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch-dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch+dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch-#dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch/dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch\dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch?dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch-/dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch/#dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-start batch dml;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch dml/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+start batch/-dml;
+NEW_CONNECTION;
+start batch ddl;
+run batch;
+NEW_CONNECTION;
+start batch ddl;
+RUN BATCH;
+NEW_CONNECTION;
+start batch ddl;
+run batch;
+NEW_CONNECTION;
+start batch ddl;
+ run batch;
+NEW_CONNECTION;
+start batch ddl;
+ run batch;
+NEW_CONNECTION;
+start batch ddl;
+
+
+
+run batch;
+NEW_CONNECTION;
+start batch ddl;
+run batch ;
+NEW_CONNECTION;
+start batch ddl;
+run batch ;
+NEW_CONNECTION;
+start batch ddl;
+run batch
+
+;
+NEW_CONNECTION;
+start batch ddl;
+run batch;
+NEW_CONNECTION;
+start batch ddl;
+run batch;
+NEW_CONNECTION;
+start batch ddl;
+run
+batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch bar;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch%;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run%batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch_;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run_batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch&;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run&batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch$;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run$batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch@;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run@batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch!;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run!batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch*;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run*batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch(;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run(batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch);
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run)batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch-;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run-batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch+;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run+batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch-#;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run-#batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch/;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run/batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch\;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run\batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch?;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run?batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch-/;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run-/batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch/#;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run/#batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-run batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run batch/-;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+run/-batch;
+NEW_CONNECTION;
+start batch ddl;
+abort batch;
+NEW_CONNECTION;
+start batch ddl;
+ABORT BATCH;
+NEW_CONNECTION;
+start batch ddl;
+abort batch;
+NEW_CONNECTION;
+start batch ddl;
+ abort batch;
+NEW_CONNECTION;
+start batch ddl;
+ abort batch;
+NEW_CONNECTION;
+start batch ddl;
+
+
+
+abort batch;
+NEW_CONNECTION;
+start batch ddl;
+abort batch ;
+NEW_CONNECTION;
+start batch ddl;
+abort batch ;
+NEW_CONNECTION;
+start batch ddl;
+abort batch
+
+;
+NEW_CONNECTION;
+start batch ddl;
+abort batch;
+NEW_CONNECTION;
+start batch ddl;
+abort batch;
+NEW_CONNECTION;
+start batch ddl;
+abort
+batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch bar;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch%;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort%batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch_;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort_batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch&;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort&batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch$;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort$batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch@;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort@batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch!;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort!batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch*;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort*batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch(;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort(batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch);
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort)batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch-;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort-batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch+;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort+batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch-#;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort-#batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch/;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort/batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch\;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort\batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch?;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort?batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch-/;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort-/batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch/#;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort/#batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-abort batch;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort batch/-;
+NEW_CONNECTION;
+start batch ddl;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+abort/-batch;
+NEW_CONNECTION;
+set autocommit = true;
+NEW_CONNECTION;
+SET AUTOCOMMIT = TRUE;
+NEW_CONNECTION;
+set autocommit = true;
+NEW_CONNECTION;
+ set autocommit = true;
+NEW_CONNECTION;
+ set autocommit = true;
+NEW_CONNECTION;
+
+
+
+set autocommit = true;
+NEW_CONNECTION;
+set autocommit = true ;
+NEW_CONNECTION;
+set autocommit = true ;
+NEW_CONNECTION;
+set autocommit = true
+
+;
+NEW_CONNECTION;
+set autocommit = true;
+NEW_CONNECTION;
+set autocommit = true;
+NEW_CONNECTION;
+set
+autocommit
+=
+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =%true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =_true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =&true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =$true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =@true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =!true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =*true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =(true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =)true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =-true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =-#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =\true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =?true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =-/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =/#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set autocommit = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = true/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =/-true;
+NEW_CONNECTION;
+set autocommit = false;
+NEW_CONNECTION;
+SET AUTOCOMMIT = FALSE;
+NEW_CONNECTION;
+set autocommit = false;
+NEW_CONNECTION;
+ set autocommit = false;
+NEW_CONNECTION;
+ set autocommit = false;
+NEW_CONNECTION;
+
+
+
+set autocommit = false;
+NEW_CONNECTION;
+set autocommit = false ;
+NEW_CONNECTION;
+set autocommit = false ;
+NEW_CONNECTION;
+set autocommit = false
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+NEW_CONNECTION;
+set autocommit = false;
+NEW_CONNECTION;
+set
+autocommit
+=
+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =%false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =_false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =&false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =$false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =@false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =!false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =*false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =(false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =)false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =-false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =-#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =\false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =?false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =-/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =/#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set autocommit = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit = false/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit =/-false;
+NEW_CONNECTION;
+set autocommit to true;
+NEW_CONNECTION;
+SET AUTOCOMMIT TO TRUE;
+NEW_CONNECTION;
+set autocommit to true;
+NEW_CONNECTION;
+ set autocommit to true;
+NEW_CONNECTION;
+ set autocommit to true;
+NEW_CONNECTION;
+
+
+
+set autocommit to true;
+NEW_CONNECTION;
+set autocommit to true ;
+NEW_CONNECTION;
+set autocommit to true ;
+NEW_CONNECTION;
+set autocommit to true
+
+;
+NEW_CONNECTION;
+set autocommit to true;
+NEW_CONNECTION;
+set autocommit to true;
+NEW_CONNECTION;
+set
+autocommit
+to
+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to%true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to_true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to&true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to$true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to@true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to!true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to*true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to(true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to)true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to-true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to-#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to\true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to?true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to-/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to/#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set autocommit to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to true/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to/-true;
+NEW_CONNECTION;
+set autocommit to false;
+NEW_CONNECTION;
+SET AUTOCOMMIT TO FALSE;
+NEW_CONNECTION;
+set autocommit to false;
+NEW_CONNECTION;
+ set autocommit to false;
+NEW_CONNECTION;
+ set autocommit to false;
+NEW_CONNECTION;
+
+
+
+set autocommit to false;
+NEW_CONNECTION;
+set autocommit to false ;
+NEW_CONNECTION;
+set autocommit to false ;
+NEW_CONNECTION;
+set autocommit to false
+
+;
+NEW_CONNECTION;
+set autocommit to false;
+NEW_CONNECTION;
+set autocommit to false;
+NEW_CONNECTION;
+set
+autocommit
+to
+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to%false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to_false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to&false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to$false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to@false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to!false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to*false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to(false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to)false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to-false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to-#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to\false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to?false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to-/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to/#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set autocommit to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to false/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set autocommit to/-false;
+NEW_CONNECTION;
+set spanner.readonly = true;
+NEW_CONNECTION;
+SET SPANNER.READONLY = TRUE;
+NEW_CONNECTION;
+set spanner.readonly = true;
+NEW_CONNECTION;
+ set spanner.readonly = true;
+NEW_CONNECTION;
+ set spanner.readonly = true;
+NEW_CONNECTION;
+
+
+
+set spanner.readonly = true;
+NEW_CONNECTION;
+set spanner.readonly = true ;
+NEW_CONNECTION;
+set spanner.readonly = true ;
+NEW_CONNECTION;
+set spanner.readonly = true
+
+;
+NEW_CONNECTION;
+set spanner.readonly = true;
+NEW_CONNECTION;
+set spanner.readonly = true;
+NEW_CONNECTION;
+set
+spanner.readonly
+=
+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =%true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =_true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =&true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =$true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =@true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =!true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =*true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =(true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =)true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =-true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =-#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =\true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =?true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =-/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =/#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.readonly = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = true/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =/-true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+NEW_CONNECTION;
+SET SPANNER.READONLY = FALSE;
+NEW_CONNECTION;
+set spanner.readonly = false;
+NEW_CONNECTION;
+ set spanner.readonly = false;
+NEW_CONNECTION;
+ set spanner.readonly = false;
+NEW_CONNECTION;
+
+
+
+set spanner.readonly = false;
+NEW_CONNECTION;
+set spanner.readonly = false ;
+NEW_CONNECTION;
+set spanner.readonly = false ;
+NEW_CONNECTION;
+set spanner.readonly = false
+
+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+NEW_CONNECTION;
+set
+spanner.readonly
+=
+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =%false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =_false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =&false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =$false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =@false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =!false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =*false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =(false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =)false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =-false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =-#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =\false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =?false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =-/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =/#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.readonly = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly = false/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly =/-false;
+NEW_CONNECTION;
+set spanner.readonly to true;
+NEW_CONNECTION;
+SET SPANNER.READONLY TO TRUE;
+NEW_CONNECTION;
+set spanner.readonly to true;
+NEW_CONNECTION;
+ set spanner.readonly to true;
+NEW_CONNECTION;
+ set spanner.readonly to true;
+NEW_CONNECTION;
+
+
+
+set spanner.readonly to true;
+NEW_CONNECTION;
+set spanner.readonly to true ;
+NEW_CONNECTION;
+set spanner.readonly to true ;
+NEW_CONNECTION;
+set spanner.readonly to true
+
+;
+NEW_CONNECTION;
+set spanner.readonly to true;
+NEW_CONNECTION;
+set spanner.readonly to true;
+NEW_CONNECTION;
+set
+spanner.readonly
+to
+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to%true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to_true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to&true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to$true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to@true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to!true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to*true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to(true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to)true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to-true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to-#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to\true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to?true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to-/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to/#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.readonly to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to true/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to/-true;
+NEW_CONNECTION;
+set spanner.readonly to false;
+NEW_CONNECTION;
+SET SPANNER.READONLY TO FALSE;
+NEW_CONNECTION;
+set spanner.readonly to false;
+NEW_CONNECTION;
+ set spanner.readonly to false;
+NEW_CONNECTION;
+ set spanner.readonly to false;
+NEW_CONNECTION;
+
+
+
+set spanner.readonly to false;
+NEW_CONNECTION;
+set spanner.readonly to false ;
+NEW_CONNECTION;
+set spanner.readonly to false ;
+NEW_CONNECTION;
+set spanner.readonly to false
+
+;
+NEW_CONNECTION;
+set spanner.readonly to false;
+NEW_CONNECTION;
+set spanner.readonly to false;
+NEW_CONNECTION;
+set
+spanner.readonly
+to
+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to%false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to_false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to&false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to$false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to@false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to!false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to*false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to(false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to)false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to-false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to-#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to\false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to?false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to-/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to/#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.readonly to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to false/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.readonly to/-false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+SET SPANNER.RETRY_ABORTS_INTERNALLY = TRUE;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+ set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+ set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+
+
+
+set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = true ;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = true ;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = true
+
+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set
+spanner.retry_aborts_internally
+=
+true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true bar;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true%;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =%true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true_;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =_true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true&;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =&true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true$;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =$true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true@;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =@true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true!;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =!true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true*;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =*true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true(;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =(true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true);
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =)true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true-;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =-true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =+true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true-#;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =-#true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true/;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =/true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true\;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =\true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true?;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =?true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true-/;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =-/true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true/#;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =/#true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.retry_aborts_internally = true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = true/-;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =/-true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+SET SPANNER.RETRY_ABORTS_INTERNALLY = FALSE;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+ set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+ set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+
+
+
+set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = false ;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = false ;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = false
+
+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set
+spanner.retry_aborts_internally
+=
+false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false bar;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false%;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =%false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false_;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =_false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false&;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =&false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false$;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =$false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false@;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =@false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false!;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =!false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false*;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =*false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false(;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =(false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false);
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =)false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false-;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =-false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =+false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false-#;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =-#false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false/;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =/false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false\;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =\false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false?;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =?false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false-/;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =-/false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false/#;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =/#false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.retry_aborts_internally = false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally = false/-;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally =/-false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+SET SPANNER.RETRY_ABORTS_INTERNALLY TO TRUE;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+ set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+ set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+
+
+
+set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to true ;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to true ;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to true
+
+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set
+spanner.retry_aborts_internally
+to
+true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true bar;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true%;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to%true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true_;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to_true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true&;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to&true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true$;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to$true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true@;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to@true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true!;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to!true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true*;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to*true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true(;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to(true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true);
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to)true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true-;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to-true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to+true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true-#;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to-#true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true/;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to/true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true\;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to\true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true?;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to?true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true-/;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to-/true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true/#;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to/#true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.retry_aborts_internally to true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to true/-;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to/-true;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+SET SPANNER.RETRY_ABORTS_INTERNALLY TO FALSE;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+ set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+ set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+
+
+
+set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to false ;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to false ;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to false
+
+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+set
+spanner.retry_aborts_internally
+to
+false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false bar;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false%;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to%false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false_;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to_false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false&;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to&false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false$;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to$false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false@;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to@false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false!;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to!false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false*;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to*false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false(;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to(false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false);
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to)false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false-;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to-false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false+;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to+false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false-#;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to-#false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false/;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to/false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false\;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to\false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false?;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to?false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false-/;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to-/false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false/#;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to/#false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.retry_aborts_internally to false;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to false/-;
+NEW_CONNECTION;
+set spanner.readonly = false;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.retry_aborts_internally to/-false;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='partitioned_non_atomic';
+NEW_CONNECTION;
+ set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+ set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+
+
+
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' ;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'
+
+;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set
+spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.autocommit_dml_mode='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='transactional';
+NEW_CONNECTION;
+ set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+ set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+
+
+
+set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='TRANSACTIONAL' ;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='TRANSACTIONAL' ;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='TRANSACTIONAL'
+
+;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+set
+spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode='TRANSACTIONAL'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.autocommit_dml_mode='TRANSACTIONAL';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.AUTOCOMMIT_DML_MODE TO 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'partitioned_non_atomic';
+NEW_CONNECTION;
+ set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+ set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+
+
+
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' ;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' ;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'
+
+;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set
+spanner.autocommit_dml_mode
+to
+'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to%'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to_'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to&'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to$'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to@'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to!'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to*'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to('PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to)'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to-'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to+'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to-#'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to/'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to\'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to?'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to-/'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to/#'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'PARTITIONED_NON_ATOMIC'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to/-'PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+SET SPANNER.AUTOCOMMIT_DML_MODE TO 'TRANSACTIONAL';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'transactional';
+NEW_CONNECTION;
+ set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+ set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+
+
+
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL' ;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL' ;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'
+
+;
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+set
+spanner.autocommit_dml_mode
+to
+'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to%'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to_'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to&'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to$'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to@'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to!'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to*'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to('TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to)'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to-'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to+'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to-#'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to/'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to\'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to?'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to-/'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to/#'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.autocommit_dml_mode to 'TRANSACTIONAL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to 'TRANSACTIONAL'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.autocommit_dml_mode to/-'TRANSACTIONAL';
+NEW_CONNECTION;
+set statement_timeout=default;
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT=DEFAULT;
+NEW_CONNECTION;
+set statement_timeout=default;
+NEW_CONNECTION;
+ set statement_timeout=default;
+NEW_CONNECTION;
+ set statement_timeout=default;
+NEW_CONNECTION;
+
+
+
+set statement_timeout=default;
+NEW_CONNECTION;
+set statement_timeout=default ;
+NEW_CONNECTION;
+set statement_timeout=default ;
+NEW_CONNECTION;
+set statement_timeout=default
+
+;
+NEW_CONNECTION;
+set statement_timeout=default;
+NEW_CONNECTION;
+set statement_timeout=default;
+NEW_CONNECTION;
+set
+statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout=default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-statement_timeout=default;
+NEW_CONNECTION;
+set statement_timeout='1s';
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT='1S';
+NEW_CONNECTION;
+set statement_timeout='1s';
+NEW_CONNECTION;
+ set statement_timeout='1s';
+NEW_CONNECTION;
+ set statement_timeout='1s';
+NEW_CONNECTION;
+
+
+
+set statement_timeout='1s';
+NEW_CONNECTION;
+set statement_timeout='1s' ;
+NEW_CONNECTION;
+set statement_timeout='1s' ;
+NEW_CONNECTION;
+set statement_timeout='1s'
+
+;
+NEW_CONNECTION;
+set statement_timeout='1s';
+NEW_CONNECTION;
+set statement_timeout='1s';
+NEW_CONNECTION;
+set
+statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout='1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='1s'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-statement_timeout='1s';
+NEW_CONNECTION;
+set statement_timeout='100ms';
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT='100MS';
+NEW_CONNECTION;
+set statement_timeout='100ms';
+NEW_CONNECTION;
+ set statement_timeout='100ms';
+NEW_CONNECTION;
+ set statement_timeout='100ms';
+NEW_CONNECTION;
+
+
+
+set statement_timeout='100ms';
+NEW_CONNECTION;
+set statement_timeout='100ms' ;
+NEW_CONNECTION;
+set statement_timeout='100ms' ;
+NEW_CONNECTION;
+set statement_timeout='100ms'
+
+;
+NEW_CONNECTION;
+set statement_timeout='100ms';
+NEW_CONNECTION;
+set statement_timeout='100ms';
+NEW_CONNECTION;
+set
+statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout='100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='100ms'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-statement_timeout='100ms';
+NEW_CONNECTION;
+set statement_timeout=100;
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT=100;
+NEW_CONNECTION;
+set statement_timeout=100;
+NEW_CONNECTION;
+ set statement_timeout=100;
+NEW_CONNECTION;
+ set statement_timeout=100;
+NEW_CONNECTION;
+
+
+
+set statement_timeout=100;
+NEW_CONNECTION;
+set statement_timeout=100 ;
+NEW_CONNECTION;
+set statement_timeout=100 ;
+NEW_CONNECTION;
+set statement_timeout=100
+
+;
+NEW_CONNECTION;
+set statement_timeout=100;
+NEW_CONNECTION;
+set statement_timeout=100;
+NEW_CONNECTION;
+set
+statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100 bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout=100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout=100/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-statement_timeout=100;
+NEW_CONNECTION;
+set statement_timeout='10000us';
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT='10000US';
+NEW_CONNECTION;
+set statement_timeout='10000us';
+NEW_CONNECTION;
+ set statement_timeout='10000us';
+NEW_CONNECTION;
+ set statement_timeout='10000us';
+NEW_CONNECTION;
+
+
+
+set statement_timeout='10000us';
+NEW_CONNECTION;
+set statement_timeout='10000us' ;
+NEW_CONNECTION;
+set statement_timeout='10000us' ;
+NEW_CONNECTION;
+set statement_timeout='10000us'
+
+;
+NEW_CONNECTION;
+set statement_timeout='10000us';
+NEW_CONNECTION;
+set statement_timeout='10000us';
+NEW_CONNECTION;
+set
+statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout='10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='10000us'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-statement_timeout='10000us';
+NEW_CONNECTION;
+set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT='9223372036854775807NS';
+NEW_CONNECTION;
+set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+ set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+ set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+
+
+
+set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+set statement_timeout='9223372036854775807ns' ;
+NEW_CONNECTION;
+set statement_timeout='9223372036854775807ns' ;
+NEW_CONNECTION;
+set statement_timeout='9223372036854775807ns'
+
+;
+NEW_CONNECTION;
+set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+set
+statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout='9223372036854775807ns'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-statement_timeout='9223372036854775807ns';
+NEW_CONNECTION;
+set statement_timeout to default;
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT TO DEFAULT;
+NEW_CONNECTION;
+set statement_timeout to default;
+NEW_CONNECTION;
+ set statement_timeout to default;
+NEW_CONNECTION;
+ set statement_timeout to default;
+NEW_CONNECTION;
+
+
+
+set statement_timeout to default;
+NEW_CONNECTION;
+set statement_timeout to default ;
+NEW_CONNECTION;
+set statement_timeout to default ;
+NEW_CONNECTION;
+set statement_timeout to default
+
+;
+NEW_CONNECTION;
+set statement_timeout to default;
+NEW_CONNECTION;
+set statement_timeout to default;
+NEW_CONNECTION;
+set
+statement_timeout
+to
+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to%default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to_default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to&default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to$default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to@default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to!default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to*default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to(default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to)default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to\default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to?default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout to default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/-default;
+NEW_CONNECTION;
+set statement_timeout to '1s';
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT TO '1S';
+NEW_CONNECTION;
+set statement_timeout to '1s';
+NEW_CONNECTION;
+ set statement_timeout to '1s';
+NEW_CONNECTION;
+ set statement_timeout to '1s';
+NEW_CONNECTION;
+
+
+
+set statement_timeout to '1s';
+NEW_CONNECTION;
+set statement_timeout to '1s' ;
+NEW_CONNECTION;
+set statement_timeout to '1s' ;
+NEW_CONNECTION;
+set statement_timeout to '1s'
+
+;
+NEW_CONNECTION;
+set statement_timeout to '1s';
+NEW_CONNECTION;
+set statement_timeout to '1s';
+NEW_CONNECTION;
+set
+statement_timeout
+to
+'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to%'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to_'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to&'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to$'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to@'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to!'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to*'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to('1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to)'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to+'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-#'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to\'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to?'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-/'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/#'1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout to '1s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '1s'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/-'1s';
+NEW_CONNECTION;
+set statement_timeout to '100ms';
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT TO '100MS';
+NEW_CONNECTION;
+set statement_timeout to '100ms';
+NEW_CONNECTION;
+ set statement_timeout to '100ms';
+NEW_CONNECTION;
+ set statement_timeout to '100ms';
+NEW_CONNECTION;
+
+
+
+set statement_timeout to '100ms';
+NEW_CONNECTION;
+set statement_timeout to '100ms' ;
+NEW_CONNECTION;
+set statement_timeout to '100ms' ;
+NEW_CONNECTION;
+set statement_timeout to '100ms'
+
+;
+NEW_CONNECTION;
+set statement_timeout to '100ms';
+NEW_CONNECTION;
+set statement_timeout to '100ms';
+NEW_CONNECTION;
+set
+statement_timeout
+to
+'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to%'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to_'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to&'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to$'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to@'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to!'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to*'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to('100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to)'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to+'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-#'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to\'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to?'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-/'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/#'100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout to '100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '100ms'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/-'100ms';
+NEW_CONNECTION;
+set statement_timeout to 100;
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT TO 100;
+NEW_CONNECTION;
+set statement_timeout to 100;
+NEW_CONNECTION;
+ set statement_timeout to 100;
+NEW_CONNECTION;
+ set statement_timeout to 100;
+NEW_CONNECTION;
+
+
+
+set statement_timeout to 100;
+NEW_CONNECTION;
+set statement_timeout to 100 ;
+NEW_CONNECTION;
+set statement_timeout to 100 ;
+NEW_CONNECTION;
+set statement_timeout to 100
+
+;
+NEW_CONNECTION;
+set statement_timeout to 100;
+NEW_CONNECTION;
+set statement_timeout to 100;
+NEW_CONNECTION;
+set
+statement_timeout
+to
+100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100 bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to%100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to_100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to&100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to$100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to@100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to!100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to*100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to(100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to)100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to+100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-#100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to\100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to?100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-/100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/#100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout to 100;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to 100/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/-100;
+NEW_CONNECTION;
+set statement_timeout to '10000us';
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT TO '10000US';
+NEW_CONNECTION;
+set statement_timeout to '10000us';
+NEW_CONNECTION;
+ set statement_timeout to '10000us';
+NEW_CONNECTION;
+ set statement_timeout to '10000us';
+NEW_CONNECTION;
+
+
+
+set statement_timeout to '10000us';
+NEW_CONNECTION;
+set statement_timeout to '10000us' ;
+NEW_CONNECTION;
+set statement_timeout to '10000us' ;
+NEW_CONNECTION;
+set statement_timeout to '10000us'
+
+;
+NEW_CONNECTION;
+set statement_timeout to '10000us';
+NEW_CONNECTION;
+set statement_timeout to '10000us';
+NEW_CONNECTION;
+set
+statement_timeout
+to
+'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to%'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to_'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to&'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to$'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to@'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to!'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to*'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to('10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to)'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to+'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-#'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to\'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to?'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-/'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/#'10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout to '10000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '10000us'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/-'10000us';
+NEW_CONNECTION;
+set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+SET STATEMENT_TIMEOUT TO '9223372036854775807NS';
+NEW_CONNECTION;
+set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+ set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+ set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+
+
+
+set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+set statement_timeout to '9223372036854775807ns' ;
+NEW_CONNECTION;
+set statement_timeout to '9223372036854775807ns' ;
+NEW_CONNECTION;
+set statement_timeout to '9223372036854775807ns'
+
+;
+NEW_CONNECTION;
+set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+set
+statement_timeout
+to
+'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to%'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to_'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to&'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to$'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to@'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to!'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to*'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to('9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to)'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to+'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-#'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to\'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to?'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to-/'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/#'9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set statement_timeout to '9223372036854775807ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to '9223372036854775807ns'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set statement_timeout to/-'9223372036854775807ns';
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+ set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+ set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read only ;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read only ;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read only
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+set
+transaction
+read
+only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read%only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read_only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read&only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read$only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read@only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read!only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read*only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read(only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only);
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read)only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read-only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read+only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read-#only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read/only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read\only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read?only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read-/only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read/#only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set transaction read only;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read only/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read/-only;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+ set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+ set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read write ;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read write ;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read write
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+set
+transaction
+read
+write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read%write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read_write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read&write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read$write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read@write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read!write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read*write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read(write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write);
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read)write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read-write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read+write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read-#write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read/write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read\write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read?write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read-/write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read/#write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set transaction read write;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read write/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction read/-write;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+SET TRANSACTION ISOLATION LEVEL DEFAULT;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+ set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+ set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level default ;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level default ;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level default
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+set
+transaction
+isolation
+level
+default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level%default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level_default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level&default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level$default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level@default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level!default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level*default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level(default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default);
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level)default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level-default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level+default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level-#default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level/default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level\default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level?default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level-/default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level/#default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set transaction isolation level default;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level default/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level/-default;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+ set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+ set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level serializable ;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level serializable ;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level serializable
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+set
+transaction
+isolation
+level
+serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level%serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level_serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level&serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level$serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level@serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level!serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level*serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level(serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable);
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level)serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level-serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level+serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level-#serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level/serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level\serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level?serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level-/serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level/#serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set transaction isolation level serializable;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level serializable/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set transaction isolation level/-serializable;
+NEW_CONNECTION;
+set session characteristics as transaction read only;
+NEW_CONNECTION;
+SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;
+NEW_CONNECTION;
+set session characteristics as transaction read only;
+NEW_CONNECTION;
+ set session characteristics as transaction read only;
+NEW_CONNECTION;
+ set session characteristics as transaction read only;
+NEW_CONNECTION;
+
+
+
+set session characteristics as transaction read only;
+NEW_CONNECTION;
+set session characteristics as transaction read only ;
+NEW_CONNECTION;
+set session characteristics as transaction read only ;
+NEW_CONNECTION;
+set session characteristics as transaction read only
+
+;
+NEW_CONNECTION;
+set session characteristics as transaction read only;
+NEW_CONNECTION;
+set session characteristics as transaction read only;
+NEW_CONNECTION;
+set
+session
+characteristics
+as
+transaction
+read
+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read%only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read_only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read&only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read$only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read@only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read!only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read*only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read(only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read)only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read-only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read+only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read-#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read\only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read?only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read-/only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read/#only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set session characteristics as transaction read only;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read only/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read/-only;
+NEW_CONNECTION;
+set session characteristics as transaction read write;
+NEW_CONNECTION;
+SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE;
+NEW_CONNECTION;
+set session characteristics as transaction read write;
+NEW_CONNECTION;
+ set session characteristics as transaction read write;
+NEW_CONNECTION;
+ set session characteristics as transaction read write;
+NEW_CONNECTION;
+
+
+
+set session characteristics as transaction read write;
+NEW_CONNECTION;
+set session characteristics as transaction read write ;
+NEW_CONNECTION;
+set session characteristics as transaction read write ;
+NEW_CONNECTION;
+set session characteristics as transaction read write
+
+;
+NEW_CONNECTION;
+set session characteristics as transaction read write;
+NEW_CONNECTION;
+set session characteristics as transaction read write;
+NEW_CONNECTION;
+set
+session
+characteristics
+as
+transaction
+read
+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read%write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read_write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read&write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read$write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read@write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read!write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read*write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read(write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read)write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read-write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read+write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read-#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read\write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read?write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read-/write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read/#write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set session characteristics as transaction read write;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read write/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction read/-write;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL DEFAULT;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+ set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+ set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+
+
+
+set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level default ;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level default ;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level default
+
+;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+set
+session
+characteristics
+as
+transaction
+isolation
+level
+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level%default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level_default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level&default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level$default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level@default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level!default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level*default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level(default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level)default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level-default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level+default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level-#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level\default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level?default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level-/default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level/#default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set session characteristics as transaction isolation level default;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level default/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level/-default;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+ set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+ set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+
+
+
+set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level serializable ;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level serializable ;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level serializable
+
+;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+set
+session
+characteristics
+as
+transaction
+isolation
+level
+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level%serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level_serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level&serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level$serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level@serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level!serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level*serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level(serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level)serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level-serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level+serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level-#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level\serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level?serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level-/serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level/#serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set session characteristics as transaction isolation level serializable;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level serializable/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set session characteristics as transaction isolation level/-serializable;
+NEW_CONNECTION;
+set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+NEW_CONNECTION;
+set spanner.read_only_staleness='strong';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+set spanner.read_only_staleness='STRONG' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='STRONG' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='STRONG'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='STRONG'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.read_only_staleness='STRONG';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123-08:00';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123z';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set spanner.read_only_staleness='min_read_timestamp 2018-01-02t03:04:05.123+07:45';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321-07:00';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321z';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set spanner.read_only_staleness='read_timestamp 2018-01-02t03:04:05.54321+05:30';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP%2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP_2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP&2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP$2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP@2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP!2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP*2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP(2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP)2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP+2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-#2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP\2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP?2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP-/2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/#2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='READ_TIMESTAMP/-2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 12S';
+NEW_CONNECTION;
+set spanner.read_only_staleness='max_staleness 12s';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 12s' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 12s' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 12s'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS%12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS_12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS&12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS$12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS@12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS!12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS*12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS(12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS)12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS+12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-#12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS\12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS?12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-/12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/#12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 12s'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/-12s';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100MS';
+NEW_CONNECTION;
+set spanner.read_only_staleness='max_staleness 100ms';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 100ms' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 100ms' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 100ms'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS%100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS_100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS&100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS$100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS@100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS!100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS*100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS(100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS)100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS+100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-#100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS\100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS?100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-/100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/#100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 100ms'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/-100ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 99999US';
+NEW_CONNECTION;
+set spanner.read_only_staleness='max_staleness 99999us';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 99999us' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 99999us' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 99999us'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS%99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS_99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS&99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS$99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS@99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS!99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS*99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS(99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS)99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS+99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-#99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS\99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS?99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-/99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/#99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 99999us'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/-99999us';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10NS';
+NEW_CONNECTION;
+set spanner.read_only_staleness='max_staleness 10ns';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 10ns' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 10ns' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 10ns'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS%10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS_10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS&10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS$10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS@10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS!10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS*10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS(10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS)10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS+10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-#10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS\10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS?10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS-/10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/#10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS 10ns'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='MAX_STALENESS/-10ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 15S';
+NEW_CONNECTION;
+set spanner.read_only_staleness='exact_staleness 15s';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15s' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15s' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15s'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS%15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS_15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS&15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS$15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS@15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS!15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS*15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS(15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS)15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS+15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-#15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS\15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS?15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-/15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/#15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15s'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/-15s';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1500MS';
+NEW_CONNECTION;
+set spanner.read_only_staleness='exact_staleness 1500ms';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS%1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS_1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS&1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS$1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS@1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS!1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS*1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS(1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS)1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS+1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-#1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS\1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS?1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-/1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/#1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 1500ms'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/-1500ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 15000000US';
+NEW_CONNECTION;
+set spanner.read_only_staleness='exact_staleness 15000000us';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS%15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS_15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS&15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS$15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS@15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS!15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS*15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS(15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS)15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS+15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-#15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS\15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS?15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-/15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/#15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 15000000us'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/-15000000us';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 9999NS';
+NEW_CONNECTION;
+set spanner.read_only_staleness='exact_staleness 9999ns';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+ set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS%9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS_9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS&9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS$9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS@9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS!9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS*9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS(9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS)9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS+9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-#9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS\9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS?9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS-/9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/#9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness='EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS 9999ns'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness='EXACT_STALENESS/-9999ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'STRONG';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'strong';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'STRONG' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'STRONG' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'STRONG'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to%'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to_'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to&'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to$'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to@'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to!'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to*'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to('STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to)'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to-'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to+'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to-#'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to/'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to\'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to?'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to-/'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to/#'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'STRONG';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'STRONG'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to/-'STRONG';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123-08:00';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123-08:00'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123-08:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123z';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123Z'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'min_read_timestamp 2018-01-02t03:04:05.123+07:45';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP%2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP_2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP&2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP$2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP@2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP!2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP*2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP(2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP)2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP+2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-#2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP\2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP?2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP-/2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/#2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP 2018-01-02T03:04:05.123+07:45'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MIN_READ_TIMESTAMP/-2018-01-02T03:04:05.123+07:45';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321-07:00';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321-07:00'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321-07:00';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321z';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321Z'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321Z';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'read_timestamp 2018-01-02t03:04:05.54321+05:30';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP%2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP_2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP&2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP$2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP@2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP!2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP*2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP(2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP)2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP+2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-#2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP\2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP?2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP-/2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/#2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP 2018-01-02T03:04:05.54321+05:30'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'READ_TIMESTAMP/-2018-01-02T03:04:05.54321+05:30';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 12S';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'max_staleness 12s';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 12s' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 12s' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS%12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS_12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS&12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS$12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS@12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS!12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS*12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS(12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS)12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS+12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-#12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS\12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS?12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-/12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/#12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'MAX_STALENESS 12s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 12s'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/-12s';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 100MS';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'max_staleness 100ms';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS%100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS_100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS&100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS$100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS@100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS!100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS*100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS(100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS)100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS+100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-#100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS\100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS?100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-/100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/#100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'MAX_STALENESS 100ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 100ms'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/-100ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 99999US';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'max_staleness 99999us';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS%99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS_99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS&99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS$99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS@99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS!99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS*99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS(99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS)99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS+99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-#99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS\99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS?99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-/99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/#99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'MAX_STALENESS 99999us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 99999us'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/-99999us';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'MAX_STALENESS 10NS';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'max_staleness 10ns';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS%10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS_10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS&10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS$10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS@10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS!10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS*10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS(10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS)10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS+10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-#10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS\10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS?10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS-/10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/#10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'MAX_STALENESS 10ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS 10ns'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'MAX_STALENESS/-10ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 15S';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'exact_staleness 15s';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS%15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS_15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS&15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS$15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS@15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS!15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS*15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS(15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS)15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS+15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-#15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS\15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS?15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-/15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/#15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'EXACT_STALENESS 15s';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15s'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/-15s';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 1500MS';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'exact_staleness 1500ms';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS%1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS_1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS&1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS$1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS@1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS!1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS*1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS(1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS)1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS+1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-#1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS\1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS?1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-/1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/#1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 1500ms'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/-1500ms';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 15000000US';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'exact_staleness 15000000us';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS%15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS_15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS&15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS$15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS@15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS!15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS*15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS(15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS)15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS+15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-#15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS\15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS?15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-/15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/#15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 15000000us'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/-15000000us';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+SET SPANNER.READ_ONLY_STALENESS TO 'EXACT_STALENESS 9999NS';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'exact_staleness 9999ns';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+ set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+
+
+
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' ;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'
+
+;
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+set
+spanner.read_only_staleness
+to
+'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS%9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS_9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS&9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS$9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS@9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS!9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS*9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS(9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS)9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS+9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-#9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS\9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS?9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS-/9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/#9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS 9999ns'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.read_only_staleness to 'EXACT_STALENESS/-9999ns';
+NEW_CONNECTION;
+set spanner.optimizer_version='1';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_VERSION='1';
+NEW_CONNECTION;
+set spanner.optimizer_version='1';
+NEW_CONNECTION;
+ set spanner.optimizer_version='1';
+NEW_CONNECTION;
+ set spanner.optimizer_version='1';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_version='1';
+NEW_CONNECTION;
+set spanner.optimizer_version='1' ;
+NEW_CONNECTION;
+set spanner.optimizer_version='1' ;
+NEW_CONNECTION;
+set spanner.optimizer_version='1'
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_version='1';
+NEW_CONNECTION;
+set spanner.optimizer_version='1';
+NEW_CONNECTION;
+set
+spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_version='1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='1'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.optimizer_version='1';
+NEW_CONNECTION;
+set spanner.optimizer_version='200';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_VERSION='200';
+NEW_CONNECTION;
+set spanner.optimizer_version='200';
+NEW_CONNECTION;
+ set spanner.optimizer_version='200';
+NEW_CONNECTION;
+ set spanner.optimizer_version='200';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_version='200';
+NEW_CONNECTION;
+set spanner.optimizer_version='200' ;
+NEW_CONNECTION;
+set spanner.optimizer_version='200' ;
+NEW_CONNECTION;
+set spanner.optimizer_version='200'
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_version='200';
+NEW_CONNECTION;
+set spanner.optimizer_version='200';
+NEW_CONNECTION;
+set
+spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_version='200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='200'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.optimizer_version='200';
+NEW_CONNECTION;
+set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_VERSION='LATEST';
+NEW_CONNECTION;
+set spanner.optimizer_version='latest';
+NEW_CONNECTION;
+ set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+ set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+set spanner.optimizer_version='LATEST' ;
+NEW_CONNECTION;
+set spanner.optimizer_version='LATEST' ;
+NEW_CONNECTION;
+set spanner.optimizer_version='LATEST'
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+set
+spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='LATEST'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.optimizer_version='LATEST';
+NEW_CONNECTION;
+set spanner.optimizer_version='';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_VERSION='';
+NEW_CONNECTION;
+set spanner.optimizer_version='';
+NEW_CONNECTION;
+ set spanner.optimizer_version='';
+NEW_CONNECTION;
+ set spanner.optimizer_version='';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_version='';
+NEW_CONNECTION;
+set spanner.optimizer_version='' ;
+NEW_CONNECTION;
+set spanner.optimizer_version='' ;
+NEW_CONNECTION;
+set spanner.optimizer_version=''
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_version='';
+NEW_CONNECTION;
+set spanner.optimizer_version='';
+NEW_CONNECTION;
+set
+spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version='');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_version='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version=''/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.optimizer_version='';
+NEW_CONNECTION;
+set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_VERSION TO '1';
+NEW_CONNECTION;
+set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+ set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+ set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+set spanner.optimizer_version to '1' ;
+NEW_CONNECTION;
+set spanner.optimizer_version to '1' ;
+NEW_CONNECTION;
+set spanner.optimizer_version to '1'
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+set
+spanner.optimizer_version
+to
+'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to%'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to_'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to&'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to$'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to@'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to!'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to*'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to('1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to)'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to+'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-#'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to\'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to?'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-/'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/#'1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_version to '1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '1'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/-'1';
+NEW_CONNECTION;
+set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_VERSION TO '200';
+NEW_CONNECTION;
+set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+ set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+ set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+set spanner.optimizer_version to '200' ;
+NEW_CONNECTION;
+set spanner.optimizer_version to '200' ;
+NEW_CONNECTION;
+set spanner.optimizer_version to '200'
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+set
+spanner.optimizer_version
+to
+'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to%'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to_'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to&'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to$'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to@'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to!'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to*'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to('200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to)'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to+'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-#'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to\'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to?'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-/'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/#'200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_version to '200';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '200'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/-'200';
+NEW_CONNECTION;
+set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_VERSION TO 'LATEST';
+NEW_CONNECTION;
+set spanner.optimizer_version to 'latest';
+NEW_CONNECTION;
+ set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+ set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+set spanner.optimizer_version to 'LATEST' ;
+NEW_CONNECTION;
+set spanner.optimizer_version to 'LATEST' ;
+NEW_CONNECTION;
+set spanner.optimizer_version to 'LATEST'
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+set
+spanner.optimizer_version
+to
+'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to%'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to_'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to&'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to$'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to@'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to!'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to*'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to('LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to)'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to+'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-#'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to\'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to?'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-/'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/#'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_version to 'LATEST';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to 'LATEST'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/-'LATEST';
+NEW_CONNECTION;
+set spanner.optimizer_version to '';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_VERSION TO '';
+NEW_CONNECTION;
+set spanner.optimizer_version to '';
+NEW_CONNECTION;
+ set spanner.optimizer_version to '';
+NEW_CONNECTION;
+ set spanner.optimizer_version to '';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_version to '';
+NEW_CONNECTION;
+set spanner.optimizer_version to '' ;
+NEW_CONNECTION;
+set spanner.optimizer_version to '' ;
+NEW_CONNECTION;
+set spanner.optimizer_version to ''
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_version to '';
+NEW_CONNECTION;
+set spanner.optimizer_version to '';
+NEW_CONNECTION;
+set
+spanner.optimizer_version
+to
+'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to%'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to_'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to&'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to$'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to@'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to!'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to*'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to('';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to '');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to)'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to+'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-#'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to\'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to?'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to-/'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/#'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_version to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to ''/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_version to/-'';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='AUTO_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22utc';
+NEW_CONNECTION;
+ set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+ set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' ;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' ;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set
+spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.optimizer_statistics_package='auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+ set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+ set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='' ;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='' ;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package=''
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+set
+spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package='');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package=''/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.optimizer_statistics_package='';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE TO 'AUTO_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22utc';
+NEW_CONNECTION;
+ set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+ set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' ;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' ;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set
+spanner.optimizer_statistics_package
+to
+'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to%'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to_'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to&'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to$'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to@'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to!'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to*'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to('auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to)'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to-'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to+'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to-#'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to/'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to\'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to?'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to-/'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to/#'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to 'auto_20191128_14_47_22UTC'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to/-'auto_20191128_14_47_22UTC';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE TO '';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+ set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+ set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+
+
+
+set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to '' ;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to '' ;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to ''
+
+;
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+set
+spanner.optimizer_statistics_package
+to
+'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to '' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to%'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to_'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to&'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to$'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to@'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to!'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to*'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to('';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to '');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to)'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to-'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to+'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to-#'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to/'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to\'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to?'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to-/'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to/#'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.optimizer_statistics_package to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to ''/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.optimizer_statistics_package to/-'';
+NEW_CONNECTION;
+set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+SET SPANNER.RETURN_COMMIT_STATS = TRUE;
+NEW_CONNECTION;
+set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+ set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+ set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+
+
+
+set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+set spanner.return_commit_stats = true ;
+NEW_CONNECTION;
+set spanner.return_commit_stats = true ;
+NEW_CONNECTION;
+set spanner.return_commit_stats = true
+
+;
+NEW_CONNECTION;
+set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+set
+spanner.return_commit_stats
+=
+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =%true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =_true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =&true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =$true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =@true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =!true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =*true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =(true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =)true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =-true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =-#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =\true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =?true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =-/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =/#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.return_commit_stats = true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = true/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =/-true;
+NEW_CONNECTION;
+set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+SET SPANNER.RETURN_COMMIT_STATS = FALSE;
+NEW_CONNECTION;
+set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+ set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+ set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+
+
+
+set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+set spanner.return_commit_stats = false ;
+NEW_CONNECTION;
+set spanner.return_commit_stats = false ;
+NEW_CONNECTION;
+set spanner.return_commit_stats = false
+
+;
+NEW_CONNECTION;
+set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+set
+spanner.return_commit_stats
+=
+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =%false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =_false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =&false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =$false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =@false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =!false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =*false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =(false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =)false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =-false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =-#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =\false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =?false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =-/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =/#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.return_commit_stats = false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats = false/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats =/-false;
+NEW_CONNECTION;
+set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+SET SPANNER.RETURN_COMMIT_STATS TO TRUE;
+NEW_CONNECTION;
+set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+ set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+ set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+
+
+
+set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+set spanner.return_commit_stats to true ;
+NEW_CONNECTION;
+set spanner.return_commit_stats to true ;
+NEW_CONNECTION;
+set spanner.return_commit_stats to true
+
+;
+NEW_CONNECTION;
+set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+set
+spanner.return_commit_stats
+to
+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to%true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to_true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to&true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to$true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to@true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to!true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to*true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to(true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to)true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to-true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to+true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to-#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to\true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to?true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to-/true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to/#true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.return_commit_stats to true;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to true/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to/-true;
+NEW_CONNECTION;
+set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+SET SPANNER.RETURN_COMMIT_STATS TO FALSE;
+NEW_CONNECTION;
+set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+ set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+ set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+
+
+
+set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+set spanner.return_commit_stats to false ;
+NEW_CONNECTION;
+set spanner.return_commit_stats to false ;
+NEW_CONNECTION;
+set spanner.return_commit_stats to false
+
+;
+NEW_CONNECTION;
+set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+set
+spanner.return_commit_stats
+to
+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to%false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to_false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to&false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to$false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to@false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to!false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to*false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to(false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false);
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to)false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to-false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to+false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to-#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to\false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to?false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to-/false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to/#false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.return_commit_stats to false;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to false/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.return_commit_stats to/-false;
+NEW_CONNECTION;
+set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+SET SPANNER.STATEMENT_TAG='TAG1';
+NEW_CONNECTION;
+set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+ set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+ set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+
+
+
+set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+set spanner.statement_tag='tag1' ;
+NEW_CONNECTION;
+set spanner.statement_tag='tag1' ;
+NEW_CONNECTION;
+set spanner.statement_tag='tag1'
+
+;
+NEW_CONNECTION;
+set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+set
+spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.statement_tag='tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag1'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.statement_tag='tag1';
+NEW_CONNECTION;
+set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+SET SPANNER.STATEMENT_TAG='TAG2';
+NEW_CONNECTION;
+set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+ set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+ set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+
+
+
+set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+set spanner.statement_tag='tag2' ;
+NEW_CONNECTION;
+set spanner.statement_tag='tag2' ;
+NEW_CONNECTION;
+set spanner.statement_tag='tag2'
+
+;
+NEW_CONNECTION;
+set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+set
+spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.statement_tag='tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='tag2'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.statement_tag='tag2';
+NEW_CONNECTION;
+set spanner.statement_tag='';
+NEW_CONNECTION;
+SET SPANNER.STATEMENT_TAG='';
+NEW_CONNECTION;
+set spanner.statement_tag='';
+NEW_CONNECTION;
+ set spanner.statement_tag='';
+NEW_CONNECTION;
+ set spanner.statement_tag='';
+NEW_CONNECTION;
+
+
+
+set spanner.statement_tag='';
+NEW_CONNECTION;
+set spanner.statement_tag='' ;
+NEW_CONNECTION;
+set spanner.statement_tag='' ;
+NEW_CONNECTION;
+set spanner.statement_tag=''
+
+;
+NEW_CONNECTION;
+set spanner.statement_tag='';
+NEW_CONNECTION;
+set spanner.statement_tag='';
+NEW_CONNECTION;
+set
+spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag='');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.statement_tag='';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag=''/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.statement_tag='';
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+SET SPANNER.STATEMENT_TAG TO 'TAG1';
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+ set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+ set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+
+
+
+set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag1' ;
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag1' ;
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag1'
+
+;
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+set
+spanner.statement_tag
+to
+'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to%'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to_'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to&'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to$'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to@'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to!'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to*'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to('tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to)'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to+'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-#'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to\'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to?'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-/'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/#'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.statement_tag to 'tag1';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag1'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/-'tag1';
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+SET SPANNER.STATEMENT_TAG TO 'TAG2';
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+ set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+ set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+
+
+
+set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag2' ;
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag2' ;
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag2'
+
+;
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+set
+spanner.statement_tag
+to
+'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to%'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to_'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to&'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to$'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to@'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to!'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to*'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to('tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to)'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to+'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-#'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to\'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to?'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-/'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/#'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.statement_tag to 'tag2';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to 'tag2'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/-'tag2';
+NEW_CONNECTION;
+set spanner.statement_tag to '';
+NEW_CONNECTION;
+SET SPANNER.STATEMENT_TAG TO '';
+NEW_CONNECTION;
+set spanner.statement_tag to '';
+NEW_CONNECTION;
+ set spanner.statement_tag to '';
+NEW_CONNECTION;
+ set spanner.statement_tag to '';
+NEW_CONNECTION;
+
+
+
+set spanner.statement_tag to '';
+NEW_CONNECTION;
+set spanner.statement_tag to '' ;
+NEW_CONNECTION;
+set spanner.statement_tag to '' ;
+NEW_CONNECTION;
+set spanner.statement_tag to ''
+
+;
+NEW_CONNECTION;
+set spanner.statement_tag to '';
+NEW_CONNECTION;
+set spanner.statement_tag to '';
+NEW_CONNECTION;
+set
+spanner.statement_tag
+to
+'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to '' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to%'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to_'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to&'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to$'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to@'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to!'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to*'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to('';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to '');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to)'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to+'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-#'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to\'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to?'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to-/'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/#'';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.statement_tag to '';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to ''/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.statement_tag to/-'';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+SET SPANNER.TRANSACTION_TAG='TAG1';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag1' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag1' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag1'
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+set
+spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1' bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1');
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag1'/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.transaction_tag='tag1';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+SET SPANNER.TRANSACTION_TAG='TAG2';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag2' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag2' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag2'
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+set
+spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2' bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2');
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='tag2'/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.transaction_tag='tag2';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+SET SPANNER.TRANSACTION_TAG='';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag=''
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+set
+spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='' bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag='');
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag=''/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.transaction_tag='';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+SET SPANNER.TRANSACTION_TAG TO 'TAG1';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag1' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag1' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag1'
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+set
+spanner.transaction_tag
+to
+'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1' bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to%'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to_'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to&'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to$'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to@'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to!'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to*'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to('tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1');
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to)'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to+'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-#'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to\'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to?'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-/'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/#'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.transaction_tag to 'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag1'/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/-'tag1';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+SET SPANNER.TRANSACTION_TAG TO 'TAG2';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag2' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag2' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag2'
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+set
+spanner.transaction_tag
+to
+'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2' bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to%'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to_'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to&'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to$'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to@'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to!'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to*'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to('tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2');
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to)'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to+'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-#'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to\'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to?'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-/'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/#'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.transaction_tag to 'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to 'tag2'/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/-'tag2';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+SET SPANNER.TRANSACTION_TAG TO '';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+ set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+
+
+
+set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to '' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to '' ;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to ''
+
+;
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+set
+spanner.transaction_tag
+to
+'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to '' bar;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''%;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to%'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''_;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to_'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''&;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to&'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''$;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to$'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''@;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to@'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''!;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to!'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''*;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to*'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''(;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to('';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to '');
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to)'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''+;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to+'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''-#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-#'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''\;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to\'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''?;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to?'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''-/;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to-/'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''/#;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/#'';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.transaction_tag to '';
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to ''/-;
+NEW_CONNECTION;
+set autocommit = false;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.transaction_tag to/-'';
+NEW_CONNECTION;
+set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+SET SPANNER.RPC_PRIORITY='HIGH';
+NEW_CONNECTION;
+set spanner.rpc_priority='high';
+NEW_CONNECTION;
+ set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+ set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+
+
+
+set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+set spanner.rpc_priority='HIGH' ;
+NEW_CONNECTION;
+set spanner.rpc_priority='HIGH' ;
+NEW_CONNECTION;
+set spanner.rpc_priority='HIGH'
+
+;
+NEW_CONNECTION;
+set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+set
+spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='HIGH'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.rpc_priority='HIGH';
+NEW_CONNECTION;
+set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+SET SPANNER.RPC_PRIORITY='MEDIUM';
+NEW_CONNECTION;
+set spanner.rpc_priority='medium';
+NEW_CONNECTION;
+ set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+ set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+
+
+
+set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+set spanner.rpc_priority='MEDIUM' ;
+NEW_CONNECTION;
+set spanner.rpc_priority='MEDIUM' ;
+NEW_CONNECTION;
+set spanner.rpc_priority='MEDIUM'
+
+;
+NEW_CONNECTION;
+set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+set
+spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='MEDIUM'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.rpc_priority='MEDIUM';
+NEW_CONNECTION;
+set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+SET SPANNER.RPC_PRIORITY='LOW';
+NEW_CONNECTION;
+set spanner.rpc_priority='low';
+NEW_CONNECTION;
+ set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+ set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+
+
+
+set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+set spanner.rpc_priority='LOW' ;
+NEW_CONNECTION;
+set spanner.rpc_priority='LOW' ;
+NEW_CONNECTION;
+set spanner.rpc_priority='LOW'
+
+;
+NEW_CONNECTION;
+set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+set
+spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='LOW'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.rpc_priority='LOW';
+NEW_CONNECTION;
+set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+SET SPANNER.RPC_PRIORITY='NULL';
+NEW_CONNECTION;
+set spanner.rpc_priority='null';
+NEW_CONNECTION;
+ set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+ set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+
+
+
+set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+set spanner.rpc_priority='NULL' ;
+NEW_CONNECTION;
+set spanner.rpc_priority='NULL' ;
+NEW_CONNECTION;
+set spanner.rpc_priority='NULL'
+
+;
+NEW_CONNECTION;
+set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+set
+spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set%spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set_spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set&spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set$spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set@spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set!spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set*spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set(spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set)spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set+spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-#spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set\spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set?spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set-/spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/#spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority='NULL'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set/-spanner.rpc_priority='NULL';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+SET SPANNER.RPC_PRIORITY TO 'HIGH';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'high';
+NEW_CONNECTION;
+ set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+ set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+
+
+
+set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'HIGH' ;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'HIGH' ;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'HIGH'
+
+;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+set
+spanner.rpc_priority
+to
+'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to%'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to_'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to&'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to$'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to@'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to!'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to*'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to('HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to)'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to+'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-#'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to\'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to?'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-/'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/#'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.rpc_priority to 'HIGH';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'HIGH'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/-'HIGH';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+SET SPANNER.RPC_PRIORITY TO 'MEDIUM';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'medium';
+NEW_CONNECTION;
+ set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+ set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+
+
+
+set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'MEDIUM' ;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'MEDIUM' ;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'MEDIUM'
+
+;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+set
+spanner.rpc_priority
+to
+'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to%'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to_'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to&'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to$'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to@'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to!'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to*'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to('MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to)'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to+'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-#'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to\'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to?'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-/'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/#'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.rpc_priority to 'MEDIUM';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'MEDIUM'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/-'MEDIUM';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+SET SPANNER.RPC_PRIORITY TO 'LOW';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'low';
+NEW_CONNECTION;
+ set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+ set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+
+
+
+set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'LOW' ;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'LOW' ;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'LOW'
+
+;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+set
+spanner.rpc_priority
+to
+'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to%'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to_'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to&'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to$'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to@'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to!'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to*'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to('LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to)'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to+'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-#'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to\'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to?'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-/'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/#'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.rpc_priority to 'LOW';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'LOW'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/-'LOW';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+SET SPANNER.RPC_PRIORITY TO 'NULL';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'null';
+NEW_CONNECTION;
+ set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+ set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+
+
+
+set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'NULL' ;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'NULL' ;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'NULL'
+
+;
+NEW_CONNECTION;
+set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+set
+spanner.rpc_priority
+to
+'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+foo set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL' bar;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+%set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'%;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to%'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+_set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'_;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to_'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+&set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'&;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to&'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+$set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'$;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to$'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+@set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'@;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to@'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+!set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'!;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to!'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+*set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'*;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to*'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+(set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'(;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to('NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+)set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL');
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to)'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
++set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'+;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to+'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-#set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'-#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-#'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+\set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'\;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to\'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+?set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'?;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to?'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+-/set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'-/;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to-/'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/#set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'/#;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/#'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+/-set spanner.rpc_priority to 'NULL';
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to 'NULL'/-;
+NEW_CONNECTION;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+set spanner.rpc_priority to/-'NULL';
diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/PostgreSQLCommentsTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/CommentsTest.sql
similarity index 100%
rename from google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/PostgreSQLCommentsTest.sql
rename to google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/CommentsTest.sql
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
new file mode 100644
index 00000000000..ac9528cc83d
--- /dev/null
+++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/ConnectionImplGeneratedSqlScriptTest.sql
@@ -0,0 +1,13788 @@
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+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='READ_TIMESTAMP 2022-03-23T14:42:27.293000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:27.293000000Z'
+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 2022-03-23T14:42:27.293000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:27.293000000Z'
+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='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+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='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:27.688000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:27.688000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:27.688000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:27.688000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:28.001000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:28.001000000Z'
+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 2022-03-23T14:42:28.001000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:28.314000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:28.314000000Z'
+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 2022-03-23T14:42:28.314000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:28.314000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:28.639000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:28.639000000Z'
+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 2022-03-23T14:42:28.639000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:28.639000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:28.902000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:28.902000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:28.902000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:28.902000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:29.148000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:29.148000000Z'
+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 2022-03-23T14:42:29.148000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:29.376000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:29.376000000Z'
+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 2022-03-23T14:42:29.376000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:29.657000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:29.657000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:29.657000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:29.941000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:29.941000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:29.941000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.135000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:30.135000000Z'
+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 2022-03-23T14:42:30.135000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=TRUE;
+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='STRONG';
+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='READ_TIMESTAMP 2022-03-23T14:42:30.355000000Z';
+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 2022-03-23T14:42:30.355000000Z';
+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='EXACT_STALENESS 1s';
+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='MAX_STALENESS 100ms';
+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='EXACT_STALENESS 100us';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.594000000Z';
+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 2022-03-23T14:42:30.594000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.790000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:30.790000000Z'
+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 2022-03-23T14:42:30.790000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=TRUE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:30.980000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:30.980000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:31.151000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:31.151000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:31.151000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:31.485000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:31.485000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:31.485000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:31.485000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP'
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP'
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:31.700000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:31.700000000Z'
+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 2022-03-23T14:42:31.700000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+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='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+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='READ_TIMESTAMP 2022-03-23T14:42:32.018000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:32.018000000Z'
+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 2022-03-23T14:42:32.018000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:32.018000000Z'
+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='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+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='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+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);
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+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);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+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='READ_TIMESTAMP 2022-03-23T14:42:32.292000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:32.292000000Z'
+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 2022-03-23T14:42:32.292000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:32.292000000Z'
+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='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+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='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP'
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP'
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+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='READ_TIMESTAMP 2022-03-23T14:42:32.518000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:32.518000000Z'
+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 2022-03-23T14:42:32.518000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:32.518000000Z'
+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='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+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='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:32.770000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:32.770000000Z'
+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 2022-03-23T14:42:32.770000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:32.770000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.AUTOCOMMIT_DML_MODE='TRANSACTIONAL';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','TRANSACTIONAL'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE','PARTITIONED_NON_ATOMIC'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:33.018000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:33.018000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:33.018000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2022-03-23T14:42:33.018000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 100ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:33.206000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:33.206000000Z'
+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 2022-03-23T14:42:33.206000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+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);
+RUN BATCH;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+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);
+RUN BATCH;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+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);
+RUN BATCH;
+SELECT 1 AS TEST;
+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);
+RUN BATCH;
+UPDATE foo SET bar=1;
+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);
+RUN BATCH;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+SET TRANSACTION READ ONLY;
+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);
+RUN BATCH;
+SET TRANSACTION READ WRITE;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+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);
+RUN BATCH;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+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);
+RUN BATCH;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+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);
+RUN BATCH;
+ROLLBACK;
+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);
+RUN BATCH;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+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);
+RUN BATCH;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+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);
+RUN BATCH;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:33.448000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:33.448000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+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);
+RUN BATCH;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:33.449000000Z';
+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);
+RUN BATCH;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+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);
+RUN BATCH;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+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);
+RUN BATCH;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+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);
+RUN BATCH;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+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);
+RUN BATCH;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+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);
+RUN BATCH;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+COMMIT;
+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);
+RUN BATCH;
+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);
+RUN BATCH;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+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);
+RUN BATCH;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+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);
+RUN BATCH;
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+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);
+RUN BATCH;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+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);
+RUN BATCH;
+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);
+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 RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+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);
+ABORT BATCH;
+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 AUTOCOMMIT=TRUE;
+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
+SELECT 1 AS TEST;
+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
+UPDATE foo SET bar=1;
+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);
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+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);
+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
+UPDATE foo SET bar=1;
+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);
+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);
+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);
+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);
+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.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+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);
+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
+SELECT 1 AS TEST;
+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);
+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);
+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
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+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);
+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 TRANSACTION READ ONLY;
+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 TRANSACTION READ WRITE;
+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);
+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 RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+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
+START BATCH DDL;
+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
+START BATCH DML;
+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
+ROLLBACK;
+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.READONLY=TRUE;
+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='STRONG';
+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='READ_TIMESTAMP 2022-03-23T14:42:33.677000000Z';
+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 2022-03-23T14:42:33.677000000Z';
+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='EXACT_STALENESS 1s';
+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='MAX_STALENESS 100ms';
+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='EXACT_STALENESS 100us';
+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 RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+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);
+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);
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+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);
+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);
+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);
+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);
+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 RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+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);
+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);
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+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);
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+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
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+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);
+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
+COMMIT;
+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);
+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 RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+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);
+RUN BATCH;
+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.TRANSACTION_TAG = 'some-tag';
+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
+BEGIN TRANSACTION;
+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);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+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);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:33.887000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:33.887000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP'
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.149000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.149000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:34.149000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.333000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.333000000Z'
+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 2022-03-23T14:42:34.333000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.517000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.517000000Z'
+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 2022-03-23T14:42:34.517000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:34.777000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:34.777000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:34.777000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:35.084000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:35.084000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2022-03-23T14:42:35.084000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP'
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP'
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:35.282000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:35.282000000Z'
+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 2022-03-23T14:42:35.282000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+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='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=TRUE;
+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='STRONG';
+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='READ_TIMESTAMP 2022-03-23T14:42:35.509000000Z';
+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 2022-03-23T14:42:35.509000000Z';
+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='EXACT_STALENESS 1s';
+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='MAX_STALENESS 100ms';
+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='EXACT_STALENESS 100us';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET AUTOCOMMIT=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READONLY=TRUE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:35.756000000Z';
+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 2022-03-23T14:42:35.756000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+ABORT BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',FALSE
+SHOW VARIABLE AUTOCOMMIT;
+SET AUTOCOMMIT=TRUE;
+@EXPECT RESULT_SET 'AUTOCOMMIT',TRUE
+SHOW VARIABLE AUTOCOMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT UPDATE_COUNT 1
+UPDATE foo SET bar=1;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.AUTOCOMMIT_DML_MODE='PARTITIONED_NON_ATOMIC';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'TEST',1
+SELECT 1 AS TEST;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.AUTOCOMMIT_DML_MODE'
+SHOW VARIABLE SPANNER.AUTOCOMMIT_DML_MODE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ ONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET TRANSACTION READ WRITE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READ_TIMESTAMP',null
+SHOW VARIABLE SPANNER.READ_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DDL;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+UPDATE foo SET bar=1;
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DDL;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+START BATCH DML;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SELECT 1 AS TEST;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+START BATCH DML;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+ROLLBACK;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READONLY=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',FALSE
+SHOW VARIABLE SPANNER.READONLY;
+SET SPANNER.READONLY=TRUE;
+@EXPECT RESULT_SET 'SPANNER.READONLY',TRUE
+SHOW VARIABLE SPANNER.READONLY;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2022-03-23T14:42:35.963000000Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2022-03-23T14:42:35.963000000Z'
+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 2022-03-23T14:42:35.963000000Z';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+SET SPANNER.READ_ONLY_STALENESS='MAX_STALENESS 100ms';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 100us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 100us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_RESPONSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.OPTIMIZER_VERSION='1';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','1'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='2';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','2'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='latest';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION','latest'
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+SET SPANNER.OPTIMIZER_VERSION='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_VERSION',''
+SHOW VARIABLE SPANNER.OPTIMIZER_VERSION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.COMMIT_TIMESTAMP',null
+SHOW VARIABLE SPANNER.COMMIT_TIMESTAMP;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='custom-package';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE','custom-package'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE='';
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE',''
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT=DEFAULT;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+COMMIT;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT RESULT_SET 'SPANNER.OPTIMIZER_STATISTICS_PACKAGE'
+SHOW VARIABLE SPANNER.OPTIMIZER_STATISTICS_PACKAGE;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+RUN BATCH;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+SET SPANNER.TRANSACTION_TAG = 'some-tag';
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
+BEGIN TRANSACTION;
+SELECT 1 AS TEST;
+UPDATE foo SET bar=1;
+@EXPECT EXCEPTION FAILED_PRECONDITION
+CREATE TABLE foo (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY (id);
+@EXPECT EXCEPTION FAILED_PRECONDITION
+BEGIN TRANSACTION;
+NEW_CONNECTION;
+SET SPANNER.READONLY=FALSE;
+SET AUTOCOMMIT=FALSE;
diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/SetReadOnlyStalenessTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/SetReadOnlyStalenessTest.sql
new file mode 100644
index 00000000000..76c014526b0
--- /dev/null
+++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/SetReadOnlyStalenessTest.sql
@@ -0,0 +1,575 @@
+/*
+ * Copyright 2022 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.
+ */
+
+-- Test valid values for strong
+SET SPANNER.READ_ONLY_STALENESS='strong';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+SET SPANNER.READ_ONLY_STALENESS='STRONG';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+SET SPANNER.READ_ONLY_STALENESS='Strong';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+SET SPANNER.READ_ONLY_STALENESS = 'strong';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+SET SPANNER.READ_ONLY_STALENESS = 'strong';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+SET SPANNER.READ_ONLY_STALENESS
+ =
+ 'strong';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+SET SPANNER.READ_ONLY_STALENESS='strong';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+SET SPANNER.READ_ONLY_STALENESS='strong';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','STRONG'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+-- Test invalid values for strong
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='strongg';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='sstrong';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='strng';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' strong';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='strong ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' strong ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' strong';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='strong ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' strong ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=strong;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS="strong";
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=`strong`;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='''strong''';
+
+
+-- Test valid values for min_read_timestamp
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='Min_Read_Timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='MIN_READ_TIMESTAMP 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2000-02-29T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2000-02-29T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2004-02-29T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2004-02-29T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2019-01-01T00:00:00Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2019-01-01T00:00:00Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2019-01-01T00:00:00Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2019-01-01T00:00:00Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2019-01-01T00:00:00Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2019-01-01T00:00:00Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+01:00';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-07T12:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01-01:00';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-07T14:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+06:30';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-07T07:06:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+24:00';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MIN_READ_TIMESTAMP 2018-12-06T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+
+-- Test invalid values for min_read_timestamp
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestampp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='mmin_read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_red_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min read timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min-read-timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min%read%timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' min_read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01Z ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' min_read_timestamp 2018-12-07T13:36:00.01Z ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' min_read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01Z ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' min_read_timestamp 2018-12-07T13:36:00.01Z ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=min_read_timestamp 2018-12-07T13:36:00.01Z;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS="min_read_timestamp 2018-12-07T13:36:00.01Z";
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=`min_read_timestamp 2018-12-07T13:36:00.01Z`;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='''min_read_timestamp 2018-12-07T13:36:00.01Z''';
+
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07 13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T3:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.9999999999Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-7T13:36:00.01Z';
+
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+8';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+08';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+08:0';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.0108:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+08:00.0';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+08:000';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01+100:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01*08:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01%08:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01 08:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='min_read_timestamp 2018-12-07T13:36:00.01Z+08:00';
+
+
+
+
+-- Test valid values for read_timestamp
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='Read_Timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='READ_TIMESTAMP 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-07T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2000-02-29T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2000-02-29T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2004-02-29T13:36:00.01Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2004-02-29T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2019-01-01T00:00:00Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2019-01-01T00:00:00Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2019-01-01T00:00:00Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2019-01-01T00:00:00Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2019-01-01T00:00:00Z';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2019-01-01T00:00:00Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+01:00';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-07T12:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01-01:00';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-07T14:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+06:30';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-07T07:06:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+24:00';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','READ_TIMESTAMP 2018-12-06T13:36:00.010000000Z'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+
+-- Test invalid values for read_timestamp
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestampp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='mread_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='red_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read-timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read%timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01Z ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' read_timestamp 2018-12-07T13:36:00.01Z ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' read_timestamp 2018-12-07T13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01Z ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' read_timestamp 2018-12-07T13:36:00.01Z ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=read_timestamp 2018-12-07T13:36:00.01Z;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS="read_timestamp 2018-12-07T13:36:00.01Z";
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=`read_timestamp 2018-12-07T13:36:00.01Z`;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='''read_timestamp 2018-12-07T13:36:00.01Z''';
+
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07 13:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T3:36:00.01Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.9999999999Z';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-7T13:36:00.01Z';
+
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+8';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+08';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+08:0';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.0108:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+08:00.0';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+08:000';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01+100:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01*08:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01%08:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01 08:00';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='read_timestamp 2018-12-07T13:36:00.01Z+08:00';
+
+
+-- Test valid values for exact_staleness
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='Exact_Staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='EXACT_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1ns';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1ns'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 9999s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 9999s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1000ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1001ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1001ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1000us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1001us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1001us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1000ns';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 1001ns';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','EXACT_STALENESS 1001ns'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+
+-- Test invalid values for exact_staleness
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact_stalenesss 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='eexact_staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exct_staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact-staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact%staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' exact_staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' exact_staleness 10s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' exact_staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' exact_staleness 10s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=exact_staleness 10s;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS="exact_staleness 10s";
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=`exact_staleness 10s`;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='''exact_staleness 10s''';
+
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 10mus';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness 999999999999s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness not_a_number';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='exact_staleness';
+
+
+
+-- Test valid values for max_staleness
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_Staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_STALENESS 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1ns';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1ns'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 9999s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 9999s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10s';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 10s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1000ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1s'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1001ms';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1001ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1000us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1ms'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1001us';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1001us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1000ns';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1us'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 1001ns';
+@EXPECT RESULT_SET 'SPANNER.READ_ONLY_STALENESS','MAX_STALENESS 1001ns'
+SHOW VARIABLE SPANNER.READ_ONLY_STALENESS;
+
+
+-- Test invalid values for max_staleness
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max_stalenesss 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='emax_staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='mx_staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max-staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max%staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' max_staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' max_staleness 10s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' max_staleness 10s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=' max_staleness 10s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=max_staleness 10s;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS="max_staleness 10s";
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS=`max_staleness 10s`;
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='''max_staleness 10s''';
+
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 10mus';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max_staleness 999999999999s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max_staleness not_a_number';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET SPANNER.READ_ONLY_STALENESS='max_staleness';
+
diff --git a/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/SetStatementTimeoutTest.sql b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/SetStatementTimeoutTest.sql
new file mode 100644
index 00000000000..d0b80d94f59
--- /dev/null
+++ b/google-cloud-spanner/src/test/resources/com/google/cloud/spanner/connection/postgresql/SetStatementTimeoutTest.sql
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2022 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.
+ */
+
+-- Test valid values
+-- Null (no timeout)
+SET STATEMENT_TIMEOUT=default;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','0'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+-- Seconds
+SET STATEMENT_TIMEOUT='1s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+SET STATEMENT_TIMEOUT = '2s';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','2s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1S';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+-- Milliseconds
+SET STATEMENT_TIMEOUT='1ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1Ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1mS';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1MS';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+-- Microseconds
+SET STATEMENT_TIMEOUT='1us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1Us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1uS';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1US';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+-- Nanoseconds
+SET STATEMENT_TIMEOUT='1ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1Ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1nS';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1NS';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+-- Test flip to higher time unit
+SET STATEMENT_TIMEOUT='1000ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1001ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1001ns'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1000us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1001us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1001us'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1000000ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1000ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1001ms';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1001ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1000000000ns';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT='1000000us';
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+-- No unit (milliseconds)
+SET STATEMENT_TIMEOUT=1;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','1ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT=100;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','100ms'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+SET STATEMENT_TIMEOUT=10000;
+@EXPECT RESULT_SET 'STATEMENT_TIMEOUT','10s'
+SHOW VARIABLE STATEMENT_TIMEOUT;
+
+-- Invalid suffixes
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1m';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1mi';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1h';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1mus';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1n';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1u';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1';
+
+-- Invalid numbers
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='-1s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='a1s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0xas';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='0x1s';
+
+-- Invalid because of spaces
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1 s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT=' 1s';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1s ';
+@EXPECT EXCEPTION INVALID_ARGUMENT
+SET STATEMENT_TIMEOUT='1m s';
diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
index f1233bc91e2..2cecc2ec420 100644
--- a/grpc-google-cloud-spanner-admin-database-v1/pom.xml
+++ b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.21.2
+ 6.22.0
grpc-google-cloud-spanner-admin-database-v1
GRPC library for grpc-google-cloud-spanner-admin-database-v1
com.google.cloud
google-cloud-spanner-parent
- 6.21.2
+ 6.22.0
diff --git a/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java b/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java
index 55afe37254c..184bc2de624 100644
--- a/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java
+++ b/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java
@@ -481,6 +481,49 @@ private DatabaseAdminGrpc() {}
return getCreateBackupMethod;
}
+ private static volatile io.grpc.MethodDescriptor<
+ com.google.spanner.admin.database.v1.CopyBackupRequest, com.google.longrunning.Operation>
+ getCopyBackupMethod;
+
+ @io.grpc.stub.annotations.RpcMethod(
+ fullMethodName = SERVICE_NAME + '/' + "CopyBackup",
+ requestType = com.google.spanner.admin.database.v1.CopyBackupRequest.class,
+ responseType = com.google.longrunning.Operation.class,
+ methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+ public static io.grpc.MethodDescriptor<
+ com.google.spanner.admin.database.v1.CopyBackupRequest, com.google.longrunning.Operation>
+ getCopyBackupMethod() {
+ io.grpc.MethodDescriptor<
+ com.google.spanner.admin.database.v1.CopyBackupRequest,
+ com.google.longrunning.Operation>
+ getCopyBackupMethod;
+ if ((getCopyBackupMethod = DatabaseAdminGrpc.getCopyBackupMethod) == null) {
+ synchronized (DatabaseAdminGrpc.class) {
+ if ((getCopyBackupMethod = DatabaseAdminGrpc.getCopyBackupMethod) == null) {
+ DatabaseAdminGrpc.getCopyBackupMethod =
+ getCopyBackupMethod =
+ io.grpc.MethodDescriptor
+ .
+ newBuilder()
+ .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CopyBackup"))
+ .setSampledToLocalTracing(true)
+ .setRequestMarshaller(
+ io.grpc.protobuf.ProtoUtils.marshaller(
+ com.google.spanner.admin.database.v1.CopyBackupRequest
+ .getDefaultInstance()))
+ .setResponseMarshaller(
+ io.grpc.protobuf.ProtoUtils.marshaller(
+ com.google.longrunning.Operation.getDefaultInstance()))
+ .setSchemaDescriptor(new DatabaseAdminMethodDescriptorSupplier("CopyBackup"))
+ .build();
+ }
+ }
+ }
+ return getCopyBackupMethod;
+ }
+
private static volatile io.grpc.MethodDescriptor<
com.google.spanner.admin.database.v1.GetBackupRequest,
com.google.spanner.admin.database.v1.Backup>
@@ -1054,6 +1097,30 @@ public void createBackup(
getCreateBackupMethod(), responseObserver);
}
+ /**
+ *
+ *
+ *
+ * Starts copying a Cloud Spanner Backup.
+ * The returned backup [long-running operation][google.longrunning.Operation]
+ * will have a name of the format
+ * `projects/<project>/instances/<instance>/backups/<backup>/operations/<operation_id>`
+ * and can be used to track copying of the backup. The operation is associated
+ * with the destination backup.
+ * The [metadata][google.longrunning.Operation.metadata] field type is
+ * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * The [response][google.longrunning.Operation.response] field type is
+ * [Backup][google.spanner.admin.database.v1.Backup], if successful. Cancelling the returned operation will stop the
+ * copying and delete the backup.
+ * Concurrent CopyBackup requests can run on the same source backup.
+ *
+ */
+ public void copyBackup(
+ com.google.spanner.admin.database.v1.CopyBackupRequest request,
+ io.grpc.stub.StreamObserver responseObserver) {
+ io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCopyBackupMethod(), responseObserver);
+ }
+
/**
*
*
@@ -1256,6 +1323,12 @@ public final io.grpc.ServerServiceDefinition bindService() {
new MethodHandlers<
com.google.spanner.admin.database.v1.CreateBackupRequest,
com.google.longrunning.Operation>(this, METHODID_CREATE_BACKUP)))
+ .addMethod(
+ getCopyBackupMethod(),
+ io.grpc.stub.ServerCalls.asyncUnaryCall(
+ new MethodHandlers<
+ com.google.spanner.admin.database.v1.CopyBackupRequest,
+ com.google.longrunning.Operation>(this, METHODID_COPY_BACKUP)))
.addMethod(
getGetBackupMethod(),
io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -1541,6 +1614,31 @@ public void createBackup(
responseObserver);
}
+ /**
+ *
+ *
+ *
+ * Starts copying a Cloud Spanner Backup.
+ * The returned backup [long-running operation][google.longrunning.Operation]
+ * will have a name of the format
+ * `projects/<project>/instances/<instance>/backups/<backup>/operations/<operation_id>`
+ * and can be used to track copying of the backup. The operation is associated
+ * with the destination backup.
+ * The [metadata][google.longrunning.Operation.metadata] field type is
+ * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * The [response][google.longrunning.Operation.response] field type is
+ * [Backup][google.spanner.admin.database.v1.Backup], if successful. Cancelling the returned operation will stop the
+ * copying and delete the backup.
+ * Concurrent CopyBackup requests can run on the same source backup.
+ *
+ */
+ public void copyBackup(
+ com.google.spanner.admin.database.v1.CopyBackupRequest request,
+ io.grpc.stub.StreamObserver responseObserver) {
+ io.grpc.stub.ClientCalls.asyncUnaryCall(
+ getChannel().newCall(getCopyBackupMethod(), getCallOptions()), request, responseObserver);
+ }
+
/**
*
*
@@ -1892,6 +1990,30 @@ public com.google.longrunning.Operation createBackup(
getChannel(), getCreateBackupMethod(), getCallOptions(), request);
}
+ /**
+ *
+ *
+ *
+ * Starts copying a Cloud Spanner Backup.
+ * The returned backup [long-running operation][google.longrunning.Operation]
+ * will have a name of the format
+ * `projects/<project>/instances/<instance>/backups/<backup>/operations/<operation_id>`
+ * and can be used to track copying of the backup. The operation is associated
+ * with the destination backup.
+ * The [metadata][google.longrunning.Operation.metadata] field type is
+ * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * The [response][google.longrunning.Operation.response] field type is
+ * [Backup][google.spanner.admin.database.v1.Backup], if successful. Cancelling the returned operation will stop the
+ * copying and delete the backup.
+ * Concurrent CopyBackup requests can run on the same source backup.
+ *
+ */
+ public com.google.longrunning.Operation copyBackup(
+ com.google.spanner.admin.database.v1.CopyBackupRequest request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getCopyBackupMethod(), getCallOptions(), request);
+ }
+
/**
*
*
@@ -2226,6 +2348,30 @@ protected DatabaseAdminFutureStub build(
getChannel().newCall(getCreateBackupMethod(), getCallOptions()), request);
}
+ /**
+ *
+ *
+ *
+ * Starts copying a Cloud Spanner Backup.
+ * The returned backup [long-running operation][google.longrunning.Operation]
+ * will have a name of the format
+ * `projects/<project>/instances/<instance>/backups/<backup>/operations/<operation_id>`
+ * and can be used to track copying of the backup. The operation is associated
+ * with the destination backup.
+ * The [metadata][google.longrunning.Operation.metadata] field type is
+ * [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * The [response][google.longrunning.Operation.response] field type is
+ * [Backup][google.spanner.admin.database.v1.Backup], if successful. Cancelling the returned operation will stop the
+ * copying and delete the backup.
+ * Concurrent CopyBackup requests can run on the same source backup.
+ *
+ */
+ public com.google.common.util.concurrent.ListenableFuture
+ copyBackup(com.google.spanner.admin.database.v1.CopyBackupRequest request) {
+ return io.grpc.stub.ClientCalls.futureUnaryCall(
+ getChannel().newCall(getCopyBackupMethod(), getCallOptions()), request);
+ }
+
/**
*
*
@@ -2369,13 +2515,14 @@ protected DatabaseAdminFutureStub build(
private static final int METHODID_GET_IAM_POLICY = 7;
private static final int METHODID_TEST_IAM_PERMISSIONS = 8;
private static final int METHODID_CREATE_BACKUP = 9;
- private static final int METHODID_GET_BACKUP = 10;
- private static final int METHODID_UPDATE_BACKUP = 11;
- private static final int METHODID_DELETE_BACKUP = 12;
- private static final int METHODID_LIST_BACKUPS = 13;
- private static final int METHODID_RESTORE_DATABASE = 14;
- private static final int METHODID_LIST_DATABASE_OPERATIONS = 15;
- private static final int METHODID_LIST_BACKUP_OPERATIONS = 16;
+ private static final int METHODID_COPY_BACKUP = 10;
+ private static final int METHODID_GET_BACKUP = 11;
+ private static final int METHODID_UPDATE_BACKUP = 12;
+ private static final int METHODID_DELETE_BACKUP = 13;
+ private static final int METHODID_LIST_BACKUPS = 14;
+ private static final int METHODID_RESTORE_DATABASE = 15;
+ private static final int METHODID_LIST_DATABASE_OPERATIONS = 16;
+ private static final int METHODID_LIST_BACKUP_OPERATIONS = 17;
private static final class MethodHandlers
implements io.grpc.stub.ServerCalls.UnaryMethod,
@@ -2450,6 +2597,11 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv
(com.google.spanner.admin.database.v1.CreateBackupRequest) request,
(io.grpc.stub.StreamObserver) responseObserver);
break;
+ case METHODID_COPY_BACKUP:
+ serviceImpl.copyBackup(
+ (com.google.spanner.admin.database.v1.CopyBackupRequest) request,
+ (io.grpc.stub.StreamObserver) responseObserver);
+ break;
case METHODID_GET_BACKUP:
serviceImpl.getBackup(
(com.google.spanner.admin.database.v1.GetBackupRequest) request,
@@ -2567,6 +2719,7 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() {
.addMethod(getGetIamPolicyMethod())
.addMethod(getTestIamPermissionsMethod())
.addMethod(getCreateBackupMethod())
+ .addMethod(getCopyBackupMethod())
.addMethod(getGetBackupMethod())
.addMethod(getUpdateBackupMethod())
.addMethod(getDeleteBackupMethod())
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index ac35300d525..9dc8ebb4169 100644
--- a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.21.2
+ 6.22.0
grpc-google-cloud-spanner-admin-instance-v1
GRPC library for grpc-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.21.2
+ 6.22.0
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index df1548b6f09..a313fdbbc31 100644
--- a/grpc-google-cloud-spanner-v1/pom.xml
+++ b/grpc-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.21.2
+ 6.22.0
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.21.2
+ 6.22.0
diff --git a/pom.xml b/pom.xml
index e5b9423849c..82eb9eedbe0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.21.2
+ 6.22.0
Google Cloud Spanner Parent
https://github.com/googleapis/java-spanner
@@ -62,37 +62,37 @@
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.21.2
+ 6.22.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.21.2
+ 6.22.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.21.2
+ 6.22.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.21.2
+ 6.22.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.21.2
+ 6.22.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.21.2
+ 6.22.0
com.google.cloud
google-cloud-spanner
- 6.21.2
+ 6.22.0
@@ -141,7 +141,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.10.0
+ 3.10.1
1.8
1.8
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index d7ff275fb74..5eaf913f945 100644
--- a/proto-google-cloud-spanner-admin-database-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-database-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.21.2
+ 6.22.0
proto-google-cloud-spanner-admin-database-v1
PROTO library for proto-google-cloud-spanner-admin-database-v1
com.google.cloud
google-cloud-spanner-parent
- 6.21.2
+ 6.22.0
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java
index 3a974718685..ff197cea3fb 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java
@@ -43,6 +43,7 @@ private Backup() {
state_ = 0;
referencingDatabases_ = com.google.protobuf.LazyStringArrayList.EMPTY;
databaseDialect_ = 0;
+ referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
}
@java.lang.Override
@@ -178,6 +179,31 @@ private Backup(
int rawValue = input.readEnum();
databaseDialect_ = rawValue;
+ break;
+ }
+ case 90:
+ {
+ java.lang.String s = input.readStringRequireUtf8();
+ if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+ referencingBackups_ = new com.google.protobuf.LazyStringArrayList();
+ mutable_bitField0_ |= 0x00000002;
+ }
+ referencingBackups_.add(s);
+ break;
+ }
+ case 98:
+ {
+ com.google.protobuf.Timestamp.Builder subBuilder = null;
+ if (maxExpireTime_ != null) {
+ subBuilder = maxExpireTime_.toBuilder();
+ }
+ maxExpireTime_ =
+ input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+ if (subBuilder != null) {
+ subBuilder.mergeFrom(maxExpireTime_);
+ maxExpireTime_ = subBuilder.buildPartial();
+ }
+
break;
}
default:
@@ -197,6 +223,9 @@ private Backup(
if (((mutable_bitField0_ & 0x00000001) != 0)) {
referencingDatabases_ = referencingDatabases_.getUnmodifiableView();
}
+ if (((mutable_bitField0_ & 0x00000002) != 0)) {
+ referencingBackups_ = referencingBackups_.getUnmodifiableView();
+ }
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
@@ -920,6 +949,165 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect()
: result;
}
+ public static final int REFERENCING_BACKUPS_FIELD_NUMBER = 11;
+ private com.google.protobuf.LazyStringList referencingBackups_;
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return A list containing the referencingBackups.
+ */
+ public com.google.protobuf.ProtocolStringList getReferencingBackupsList() {
+ return referencingBackups_;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The count of referencingBackups.
+ */
+ public int getReferencingBackupsCount() {
+ return referencingBackups_.size();
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param index The index of the element to return.
+ * @return The referencingBackups at the given index.
+ */
+ public java.lang.String getReferencingBackups(int index) {
+ return referencingBackups_.get(index);
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param index The index of the value to return.
+ * @return The bytes of the referencingBackups at the given index.
+ */
+ public com.google.protobuf.ByteString getReferencingBackupsBytes(int index) {
+ return referencingBackups_.getByteString(index);
+ }
+
+ public static final int MAX_EXPIRE_TIME_FIELD_NUMBER = 12;
+ private com.google.protobuf.Timestamp maxExpireTime_;
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ *
+ * @return Whether the maxExpireTime field is set.
+ */
+ @java.lang.Override
+ public boolean hasMaxExpireTime() {
+ return maxExpireTime_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ *
+ * @return The maxExpireTime.
+ */
+ @java.lang.Override
+ public com.google.protobuf.Timestamp getMaxExpireTime() {
+ return maxExpireTime_ == null
+ ? com.google.protobuf.Timestamp.getDefaultInstance()
+ : maxExpireTime_;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ @java.lang.Override
+ public com.google.protobuf.TimestampOrBuilder getMaxExpireTimeOrBuilder() {
+ return getMaxExpireTime();
+ }
+
private byte memoizedIsInitialized = -1;
@java.lang.Override
@@ -967,6 +1155,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
.getNumber()) {
output.writeEnum(10, databaseDialect_);
}
+ for (int i = 0; i < referencingBackups_.size(); i++) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 11, referencingBackups_.getRaw(i));
+ }
+ if (maxExpireTime_ != null) {
+ output.writeMessage(12, getMaxExpireTime());
+ }
unknownFields.writeTo(output);
}
@@ -1013,6 +1207,17 @@ public int getSerializedSize() {
.getNumber()) {
size += com.google.protobuf.CodedOutputStream.computeEnumSize(10, databaseDialect_);
}
+ {
+ int dataSize = 0;
+ for (int i = 0; i < referencingBackups_.size(); i++) {
+ dataSize += computeStringSizeNoTag(referencingBackups_.getRaw(i));
+ }
+ size += dataSize;
+ size += 1 * getReferencingBackupsList().size();
+ }
+ if (maxExpireTime_ != null) {
+ size += com.google.protobuf.CodedOutputStream.computeMessageSize(12, getMaxExpireTime());
+ }
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
@@ -1051,6 +1256,11 @@ public boolean equals(final java.lang.Object obj) {
if (!getEncryptionInfo().equals(other.getEncryptionInfo())) return false;
}
if (databaseDialect_ != other.databaseDialect_) return false;
+ if (!getReferencingBackupsList().equals(other.getReferencingBackupsList())) return false;
+ if (hasMaxExpireTime() != other.hasMaxExpireTime()) return false;
+ if (hasMaxExpireTime()) {
+ if (!getMaxExpireTime().equals(other.getMaxExpireTime())) return false;
+ }
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@@ -1092,6 +1302,14 @@ public int hashCode() {
}
hash = (37 * hash) + DATABASE_DIALECT_FIELD_NUMBER;
hash = (53 * hash) + databaseDialect_;
+ if (getReferencingBackupsCount() > 0) {
+ hash = (37 * hash) + REFERENCING_BACKUPS_FIELD_NUMBER;
+ hash = (53 * hash) + getReferencingBackupsList().hashCode();
+ }
+ if (hasMaxExpireTime()) {
+ hash = (37 * hash) + MAX_EXPIRE_TIME_FIELD_NUMBER;
+ hash = (53 * hash) + getMaxExpireTime().hashCode();
+ }
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
@@ -1273,6 +1491,14 @@ public Builder clear() {
}
databaseDialect_ = 0;
+ referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+ bitField0_ = (bitField0_ & ~0x00000002);
+ if (maxExpireTimeBuilder_ == null) {
+ maxExpireTime_ = null;
+ } else {
+ maxExpireTime_ = null;
+ maxExpireTimeBuilder_ = null;
+ }
return this;
}
@@ -1331,6 +1557,16 @@ public com.google.spanner.admin.database.v1.Backup buildPartial() {
result.encryptionInfo_ = encryptionInfoBuilder_.build();
}
result.databaseDialect_ = databaseDialect_;
+ if (((bitField0_ & 0x00000002) != 0)) {
+ referencingBackups_ = referencingBackups_.getUnmodifiableView();
+ bitField0_ = (bitField0_ & ~0x00000002);
+ }
+ result.referencingBackups_ = referencingBackups_;
+ if (maxExpireTimeBuilder_ == null) {
+ result.maxExpireTime_ = maxExpireTime_;
+ } else {
+ result.maxExpireTime_ = maxExpireTimeBuilder_.build();
+ }
onBuilt();
return result;
}
@@ -1419,6 +1655,19 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Backup other) {
if (other.databaseDialect_ != 0) {
setDatabaseDialectValue(other.getDatabaseDialectValue());
}
+ if (!other.referencingBackups_.isEmpty()) {
+ if (referencingBackups_.isEmpty()) {
+ referencingBackups_ = other.referencingBackups_;
+ bitField0_ = (bitField0_ & ~0x00000002);
+ } else {
+ ensureReferencingBackupsIsMutable();
+ referencingBackups_.addAll(other.referencingBackups_);
+ }
+ onChanged();
+ }
+ if (other.hasMaxExpireTime()) {
+ mergeMaxExpireTime(other.getMaxExpireTime());
+ }
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
@@ -3094,6 +3343,485 @@ public Builder clearDatabaseDialect() {
return this;
}
+ private com.google.protobuf.LazyStringList referencingBackups_ =
+ com.google.protobuf.LazyStringArrayList.EMPTY;
+
+ private void ensureReferencingBackupsIsMutable() {
+ if (!((bitField0_ & 0x00000002) != 0)) {
+ referencingBackups_ = new com.google.protobuf.LazyStringArrayList(referencingBackups_);
+ bitField0_ |= 0x00000002;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return A list containing the referencingBackups.
+ */
+ public com.google.protobuf.ProtocolStringList getReferencingBackupsList() {
+ return referencingBackups_.getUnmodifiableView();
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The count of referencingBackups.
+ */
+ public int getReferencingBackupsCount() {
+ return referencingBackups_.size();
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param index The index of the element to return.
+ * @return The referencingBackups at the given index.
+ */
+ public java.lang.String getReferencingBackups(int index) {
+ return referencingBackups_.get(index);
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param index The index of the value to return.
+ * @return The bytes of the referencingBackups at the given index.
+ */
+ public com.google.protobuf.ByteString getReferencingBackupsBytes(int index) {
+ return referencingBackups_.getByteString(index);
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param index The index to set the value at.
+ * @param value The referencingBackups to set.
+ * @return This builder for chaining.
+ */
+ public Builder setReferencingBackups(int index, java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureReferencingBackupsIsMutable();
+ referencingBackups_.set(index, value);
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param value The referencingBackups to add.
+ * @return This builder for chaining.
+ */
+ public Builder addReferencingBackups(java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureReferencingBackupsIsMutable();
+ referencingBackups_.add(value);
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param values The referencingBackups to add.
+ * @return This builder for chaining.
+ */
+ public Builder addAllReferencingBackups(java.lang.Iterable values) {
+ ensureReferencingBackupsIsMutable();
+ com.google.protobuf.AbstractMessageLite.Builder.addAll(values, referencingBackups_);
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearReferencingBackups() {
+ referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+ bitField0_ = (bitField0_ & ~0x00000002);
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param value The bytes of the referencingBackups to add.
+ * @return This builder for chaining.
+ */
+ public Builder addReferencingBackupsBytes(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+ ensureReferencingBackupsIsMutable();
+ referencingBackups_.add(value);
+ onChanged();
+ return this;
+ }
+
+ private com.google.protobuf.Timestamp maxExpireTime_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>
+ maxExpireTimeBuilder_;
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ *
+ * @return Whether the maxExpireTime field is set.
+ */
+ public boolean hasMaxExpireTime() {
+ return maxExpireTimeBuilder_ != null || maxExpireTime_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ *
+ * @return The maxExpireTime.
+ */
+ public com.google.protobuf.Timestamp getMaxExpireTime() {
+ if (maxExpireTimeBuilder_ == null) {
+ return maxExpireTime_ == null
+ ? com.google.protobuf.Timestamp.getDefaultInstance()
+ : maxExpireTime_;
+ } else {
+ return maxExpireTimeBuilder_.getMessage();
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ public Builder setMaxExpireTime(com.google.protobuf.Timestamp value) {
+ if (maxExpireTimeBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ maxExpireTime_ = value;
+ onChanged();
+ } else {
+ maxExpireTimeBuilder_.setMessage(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ public Builder setMaxExpireTime(com.google.protobuf.Timestamp.Builder builderForValue) {
+ if (maxExpireTimeBuilder_ == null) {
+ maxExpireTime_ = builderForValue.build();
+ onChanged();
+ } else {
+ maxExpireTimeBuilder_.setMessage(builderForValue.build());
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ public Builder mergeMaxExpireTime(com.google.protobuf.Timestamp value) {
+ if (maxExpireTimeBuilder_ == null) {
+ if (maxExpireTime_ != null) {
+ maxExpireTime_ =
+ com.google.protobuf.Timestamp.newBuilder(maxExpireTime_)
+ .mergeFrom(value)
+ .buildPartial();
+ } else {
+ maxExpireTime_ = value;
+ }
+ onChanged();
+ } else {
+ maxExpireTimeBuilder_.mergeFrom(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ public Builder clearMaxExpireTime() {
+ if (maxExpireTimeBuilder_ == null) {
+ maxExpireTime_ = null;
+ onChanged();
+ } else {
+ maxExpireTime_ = null;
+ maxExpireTimeBuilder_ = null;
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ public com.google.protobuf.Timestamp.Builder getMaxExpireTimeBuilder() {
+
+ onChanged();
+ return getMaxExpireTimeFieldBuilder().getBuilder();
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ public com.google.protobuf.TimestampOrBuilder getMaxExpireTimeOrBuilder() {
+ if (maxExpireTimeBuilder_ != null) {
+ return maxExpireTimeBuilder_.getMessageOrBuilder();
+ } else {
+ return maxExpireTime_ == null
+ ? com.google.protobuf.Timestamp.getDefaultInstance()
+ : maxExpireTime_;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>
+ getMaxExpireTimeFieldBuilder() {
+ if (maxExpireTimeBuilder_ == null) {
+ maxExpireTimeBuilder_ =
+ new com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>(
+ getMaxExpireTime(), getParentForChildren(), isClean());
+ maxExpireTime_ = null;
+ }
+ return maxExpireTimeBuilder_;
+ }
+
@java.lang.Override
public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
index 8810b28ee0c..e3fe5ccf08c 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
@@ -433,4 +433,140 @@ public interface BackupOrBuilder
* @return The databaseDialect.
*/
com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect();
+
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return A list containing the referencingBackups.
+ */
+ java.util.List getReferencingBackupsList();
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The count of referencingBackups.
+ */
+ int getReferencingBackupsCount();
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param index The index of the element to return.
+ * @return The referencingBackups at the given index.
+ */
+ java.lang.String getReferencingBackups(int index);
+ /**
+ *
+ *
+ *
+ * Output only. The names of the destination backups being created by copying
+ * this source backup. The backup names are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ * Referencing backups may exist in different instances. The existence of
+ * any referencing backup prevents the backup from being deleted. When the
+ * copy operation is done (either successfully completed or cancelled or the
+ * destination backup is deleted), the reference to the backup is removed.
+ *
+ *
+ *
+ * repeated string referencing_backups = 11 [(.google.api.field_behavior) = OUTPUT_ONLY, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param index The index of the value to return.
+ * @return The bytes of the referencingBackups at the given index.
+ */
+ com.google.protobuf.ByteString getReferencingBackupsBytes(int index);
+
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ *
+ * @return Whether the maxExpireTime field is set.
+ */
+ boolean hasMaxExpireTime();
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ *
+ * @return The maxExpireTime.
+ */
+ com.google.protobuf.Timestamp getMaxExpireTime();
+ /**
+ *
+ *
+ *
+ * Output only. The max allowed expiration time of the backup, with
+ * microseconds granularity. A backup's expiration time can be configured in
+ * multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ * copying an existing backup, the expiration time specified must be
+ * less than `Backup.max_expire_time`.
+ *
+ *
+ *
+ * .google.protobuf.Timestamp max_expire_time = 12 [(.google.api.field_behavior) = OUTPUT_ONLY];
+ *
+ */
+ com.google.protobuf.TimestampOrBuilder getMaxExpireTimeOrBuilder();
}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
index aafa5c2fc9b..d5a258d0e52 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
@@ -39,6 +39,14 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r
internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_descriptor;
static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_fieldAccessorTable;
+ static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor;
+ static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_google_spanner_admin_database_v1_CopyBackupRequest_fieldAccessorTable;
+ static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor;
+ static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_fieldAccessorTable;
static final com.google.protobuf.Descriptors.Descriptor
internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor;
static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
@@ -75,6 +83,10 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r
internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor;
static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_fieldAccessorTable;
+ static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor;
+ static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
return descriptor;
@@ -86,90 +98,115 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
java.lang.String[] descriptorData = {
"\n-google/spanner/admin/database/v1/backu"
+ "p.proto\022 google.spanner.admin.database.v"
- + "1\032\034google/api/annotations.proto\032\037google/"
- + "api/field_behavior.proto\032\031google/api/res"
- + "ource.proto\032#google/longrunning/operatio"
- + "ns.proto\032 google/protobuf/field_mask.pro"
- + "to\032\037google/protobuf/timestamp.proto\032-goo"
- + "gle/spanner/admin/database/v1/common.pro"
- + "to\"\305\005\n\006Backup\0226\n\010database\030\002 \001(\tB$\372A!\n\037sp"
- + "anner.googleapis.com/Database\0220\n\014version"
- + "_time\030\t \001(\0132\032.google.protobuf.Timestamp\022"
- + "/\n\013expire_time\030\003 \001(\0132\032.google.protobuf.T"
- + "imestamp\022\014\n\004name\030\001 \001(\t\0224\n\013create_time\030\004 "
- + "\001(\0132\032.google.protobuf.TimestampB\003\340A\003\022\027\n\n"
- + "size_bytes\030\005 \001(\003B\003\340A\003\022B\n\005state\030\006 \001(\0162..g"
- + "oogle.spanner.admin.database.v1.Backup.S"
- + "tateB\003\340A\003\022F\n\025referencing_databases\030\007 \003(\t"
- + "B\'\340A\003\372A!\n\037spanner.googleapis.com/Databas"
- + "e\022N\n\017encryption_info\030\010 \001(\01320.google.span"
- + "ner.admin.database.v1.EncryptionInfoB\003\340A"
- + "\003\022P\n\020database_dialect\030\n \001(\01621.google.spa"
- + "nner.admin.database.v1.DatabaseDialectB\003"
- + "\340A\003\"7\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010C"
- + "REATING\020\001\022\t\n\005READY\020\002:\\\352AY\n\035spanner.googl"
- + "eapis.com/Backup\0228projects/{project}/ins"
- + "tances/{instance}/backups/{backup}\"\205\002\n\023C"
- + "reateBackupRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372"
- + "A!\n\037spanner.googleapis.com/Instance\022\026\n\tb"
- + "ackup_id\030\002 \001(\tB\003\340A\002\022=\n\006backup\030\003 \001(\0132(.go"
- + "ogle.spanner.admin.database.v1.BackupB\003\340"
- + "A\002\022^\n\021encryption_config\030\004 \001(\0132>.google.s"
- + "panner.admin.database.v1.CreateBackupEnc"
- + "ryptionConfigB\003\340A\001\"\370\001\n\024CreateBackupMetad"
- + "ata\0220\n\004name\030\001 \001(\tB\"\372A\037\n\035spanner.googleap"
- + "is.com/Backup\0226\n\010database\030\002 \001(\tB$\372A!\n\037sp"
- + "anner.googleapis.com/Database\022E\n\010progres"
- + "s\030\003 \001(\01323.google.spanner.admin.database."
- + "v1.OperationProgress\022/\n\013cancel_time\030\004 \001("
- + "\0132\032.google.protobuf.Timestamp\"\212\001\n\023Update"
- + "BackupRequest\022=\n\006backup\030\001 \001(\0132(.google.s"
- + "panner.admin.database.v1.BackupB\003\340A\002\0224\n\013"
- + "update_mask\030\002 \001(\0132\032.google.protobuf.Fiel"
- + "dMaskB\003\340A\002\"G\n\020GetBackupRequest\0223\n\004name\030\001"
- + " \001(\tB%\340A\002\372A\037\n\035spanner.googleapis.com/Bac"
- + "kup\"J\n\023DeleteBackupRequest\0223\n\004name\030\001 \001(\t"
- + "B%\340A\002\372A\037\n\035spanner.googleapis.com/Backup\""
- + "\204\001\n\022ListBackupsRequest\0227\n\006parent\030\001 \001(\tB\'"
- + "\340A\002\372A!\n\037spanner.googleapis.com/Instance\022"
- + "\016\n\006filter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npa"
- + "ge_token\030\004 \001(\t\"i\n\023ListBackupsResponse\0229\n"
- + "\007backups\030\001 \003(\0132(.google.spanner.admin.da"
- + "tabase.v1.Backup\022\027\n\017next_page_token\030\002 \001("
- + "\t\"\215\001\n\033ListBackupOperationsRequest\0227\n\006par"
- + "ent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.co"
- + "m/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_size\030"
- + "\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"j\n\034ListBackupO"
- + "perationsResponse\0221\n\noperations\030\001 \003(\0132\035."
- + "google.longrunning.Operation\022\027\n\017next_pag"
- + "e_token\030\002 \001(\t\"\342\001\n\nBackupInfo\0222\n\006backup\030\001"
- + " \001(\tB\"\372A\037\n\035spanner.googleapis.com/Backup"
- + "\0220\n\014version_time\030\004 \001(\0132\032.google.protobuf"
- + ".Timestamp\022/\n\013create_time\030\002 \001(\0132\032.google"
- + ".protobuf.Timestamp\022=\n\017source_database\030\003"
- + " \001(\tB$\372A!\n\037spanner.googleapis.com/Databa"
- + "se\"\335\002\n\034CreateBackupEncryptionConfig\022k\n\017e"
- + "ncryption_type\030\001 \001(\0162M.google.spanner.ad"
- + "min.database.v1.CreateBackupEncryptionCo"
- + "nfig.EncryptionTypeB\003\340A\002\022?\n\014kms_key_name"
- + "\030\002 \001(\tB)\340A\001\372A#\n!cloudkms.googleapis.com/"
- + "CryptoKey\"\216\001\n\016EncryptionType\022\037\n\033ENCRYPTI"
- + "ON_TYPE_UNSPECIFIED\020\000\022\033\n\027USE_DATABASE_EN"
- + "CRYPTION\020\001\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020"
- + "\002\022\037\n\033CUSTOMER_MANAGED_ENCRYPTION\020\003B\377\001\n$c"
- + "om.google.spanner.admin.database.v1B\013Bac"
- + "kupProtoP\001ZHgoogle.golang.org/genproto/g"
- + "oogleapis/spanner/admin/database/v1;data"
- + "base\252\002&Google.Cloud.Spanner.Admin.Databa"
- + "se.V1\312\002&Google\\Cloud\\Spanner\\Admin\\Datab"
- + "ase\\V1\352\002+Google::Cloud::Spanner::Admin::"
- + "Database::V1b\006proto3"
+ + "1\032\037google/api/field_behavior.proto\032\031goog"
+ + "le/api/resource.proto\032#google/longrunnin"
+ + "g/operations.proto\032 google/protobuf/fiel"
+ + "d_mask.proto\032\037google/protobuf/timestamp."
+ + "proto\032-google/spanner/admin/database/v1/"
+ + "common.proto\"\303\006\n\006Backup\0226\n\010database\030\002 \001("
+ + "\tB$\372A!\n\037spanner.googleapis.com/Database\022"
+ + "0\n\014version_time\030\t \001(\0132\032.google.protobuf."
+ + "Timestamp\022/\n\013expire_time\030\003 \001(\0132\032.google."
+ + "protobuf.Timestamp\022\014\n\004name\030\001 \001(\t\0224\n\013crea"
+ + "te_time\030\004 \001(\0132\032.google.protobuf.Timestam"
+ + "pB\003\340A\003\022\027\n\nsize_bytes\030\005 \001(\003B\003\340A\003\022B\n\005state"
+ + "\030\006 \001(\0162..google.spanner.admin.database.v"
+ + "1.Backup.StateB\003\340A\003\022F\n\025referencing_datab"
+ + "ases\030\007 \003(\tB\'\340A\003\372A!\n\037spanner.googleapis.c"
+ + "om/Database\022N\n\017encryption_info\030\010 \001(\01320.g"
+ + "oogle.spanner.admin.database.v1.Encrypti"
+ + "onInfoB\003\340A\003\022P\n\020database_dialect\030\n \001(\01621."
+ + "google.spanner.admin.database.v1.Databas"
+ + "eDialectB\003\340A\003\022B\n\023referencing_backups\030\013 \003"
+ + "(\tB%\340A\003\372A\037\n\035spanner.googleapis.com/Backu"
+ + "p\0228\n\017max_expire_time\030\014 \001(\0132\032.google.prot"
+ + "obuf.TimestampB\003\340A\003\"7\n\005State\022\025\n\021STATE_UN"
+ + "SPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005READY\020\002:\\\352A"
+ + "Y\n\035spanner.googleapis.com/Backup\0228projec"
+ + "ts/{project}/instances/{instance}/backup"
+ + "s/{backup}\"\205\002\n\023CreateBackupRequest\0227\n\006pa"
+ + "rent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.c"
+ + "om/Instance\022\026\n\tbackup_id\030\002 \001(\tB\003\340A\002\022=\n\006b"
+ + "ackup\030\003 \001(\0132(.google.spanner.admin.datab"
+ + "ase.v1.BackupB\003\340A\002\022^\n\021encryption_config\030"
+ + "\004 \001(\0132>.google.spanner.admin.database.v1"
+ + ".CreateBackupEncryptionConfigB\003\340A\001\"\370\001\n\024C"
+ + "reateBackupMetadata\0220\n\004name\030\001 \001(\tB\"\372A\037\n\035"
+ + "spanner.googleapis.com/Backup\0226\n\010databas"
+ + "e\030\002 \001(\tB$\372A!\n\037spanner.googleapis.com/Dat"
+ + "abase\022E\n\010progress\030\003 \001(\01323.google.spanner"
+ + ".admin.database.v1.OperationProgress\022/\n\013"
+ + "cancel_time\030\004 \001(\0132\032.google.protobuf.Time"
+ + "stamp\"\266\002\n\021CopyBackupRequest\0227\n\006parent\030\001 "
+ + "\001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Inst"
+ + "ance\022\026\n\tbackup_id\030\002 \001(\tB\003\340A\002\022<\n\rsource_b"
+ + "ackup\030\003 \001(\tB%\340A\002\372A\037\n\035spanner.googleapis."
+ + "com/Backup\0224\n\013expire_time\030\004 \001(\0132\032.google"
+ + ".protobuf.TimestampB\003\340A\002\022\\\n\021encryption_c"
+ + "onfig\030\005 \001(\0132<.google.spanner.admin.datab"
+ + "ase.v1.CopyBackupEncryptionConfigB\003\340A\001\"\371"
+ + "\001\n\022CopyBackupMetadata\0220\n\004name\030\001 \001(\tB\"\372A\037"
+ + "\n\035spanner.googleapis.com/Backup\0229\n\rsourc"
+ + "e_backup\030\002 \001(\tB\"\372A\037\n\035spanner.googleapis."
+ + "com/Backup\022E\n\010progress\030\003 \001(\01323.google.sp"
+ + "anner.admin.database.v1.OperationProgres"
+ + "s\022/\n\013cancel_time\030\004 \001(\0132\032.google.protobuf"
+ + ".Timestamp\"\212\001\n\023UpdateBackupRequest\022=\n\006ba"
+ + "ckup\030\001 \001(\0132(.google.spanner.admin.databa"
+ + "se.v1.BackupB\003\340A\002\0224\n\013update_mask\030\002 \001(\0132\032"
+ + ".google.protobuf.FieldMaskB\003\340A\002\"G\n\020GetBa"
+ + "ckupRequest\0223\n\004name\030\001 \001(\tB%\340A\002\372A\037\n\035spann"
+ + "er.googleapis.com/Backup\"J\n\023DeleteBackup"
+ + "Request\0223\n\004name\030\001 \001(\tB%\340A\002\372A\037\n\035spanner.g"
+ + "oogleapis.com/Backup\"\204\001\n\022ListBackupsRequ"
+ + "est\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.goo"
+ + "gleapis.com/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\t"
+ + "page_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"i\n\023L"
+ + "istBackupsResponse\0229\n\007backups\030\001 \003(\0132(.go"
+ + "ogle.spanner.admin.database.v1.Backup\022\027\n"
+ + "\017next_page_token\030\002 \001(\t\"\215\001\n\033ListBackupOpe"
+ + "rationsRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037"
+ + "spanner.googleapis.com/Instance\022\016\n\006filte"
+ + "r\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_token"
+ + "\030\004 \001(\t\"j\n\034ListBackupOperationsResponse\0221"
+ + "\n\noperations\030\001 \003(\0132\035.google.longrunning."
+ + "Operation\022\027\n\017next_page_token\030\002 \001(\t\"\342\001\n\nB"
+ + "ackupInfo\0222\n\006backup\030\001 \001(\tB\"\372A\037\n\035spanner."
+ + "googleapis.com/Backup\0220\n\014version_time\030\004 "
+ + "\001(\0132\032.google.protobuf.Timestamp\022/\n\013creat"
+ + "e_time\030\002 \001(\0132\032.google.protobuf.Timestamp"
+ + "\022=\n\017source_database\030\003 \001(\tB$\372A!\n\037spanner."
+ + "googleapis.com/Database\"\335\002\n\034CreateBackup"
+ + "EncryptionConfig\022k\n\017encryption_type\030\001 \001("
+ + "\0162M.google.spanner.admin.database.v1.Cre"
+ + "ateBackupEncryptionConfig.EncryptionType"
+ + "B\003\340A\002\022?\n\014kms_key_name\030\002 \001(\tB)\340A\001\372A#\n!clo"
+ + "udkms.googleapis.com/CryptoKey\"\216\001\n\016Encry"
+ + "ptionType\022\037\n\033ENCRYPTION_TYPE_UNSPECIFIED"
+ + "\020\000\022\033\n\027USE_DATABASE_ENCRYPTION\020\001\022\035\n\031GOOGL"
+ + "E_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MANAG"
+ + "ED_ENCRYPTION\020\003\"\351\002\n\032CopyBackupEncryption"
+ + "Config\022i\n\017encryption_type\030\001 \001(\0162K.google"
+ + ".spanner.admin.database.v1.CopyBackupEnc"
+ + "ryptionConfig.EncryptionTypeB\003\340A\002\022?\n\014kms"
+ + "_key_name\030\002 \001(\tB)\340A\001\372A#\n!cloudkms.google"
+ + "apis.com/CryptoKey\"\236\001\n\016EncryptionType\022\037\n"
+ + "\033ENCRYPTION_TYPE_UNSPECIFIED\020\000\022+\n\'USE_CO"
+ + "NFIG_DEFAULT_OR_BACKUP_ENCRYPTION\020\001\022\035\n\031G"
+ + "OOGLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_M"
+ + "ANAGED_ENCRYPTION\020\003B\377\001\n$com.google.spann"
+ + "er.admin.database.v1B\013BackupProtoP\001ZHgoo"
+ + "gle.golang.org/genproto/googleapis/spann"
+ + "er/admin/database/v1;database\252\002&Google.C"
+ + "loud.Spanner.Admin.Database.V1\312\002&Google\\"
+ + "Cloud\\Spanner\\Admin\\Database\\V1\352\002+Google"
+ + "::Cloud::Spanner::Admin::Database::V1b\006p"
+ + "roto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
com.google.api.FieldBehaviorProto.getDescriptor(),
com.google.api.ResourceProto.getDescriptor(),
com.google.longrunning.OperationsProto.getDescriptor(),
@@ -193,6 +230,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"ReferencingDatabases",
"EncryptionInfo",
"DatabaseDialect",
+ "ReferencingBackups",
+ "MaxExpireTime",
});
internal_static_google_spanner_admin_database_v1_CreateBackupRequest_descriptor =
getDescriptor().getMessageTypes().get(1);
@@ -210,8 +249,24 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new java.lang.String[] {
"Name", "Database", "Progress", "CancelTime",
});
- internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor =
+ internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor =
getDescriptor().getMessageTypes().get(3);
+ internal_static_google_spanner_admin_database_v1_CopyBackupRequest_fieldAccessorTable =
+ new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor,
+ new java.lang.String[] {
+ "Parent", "BackupId", "SourceBackup", "ExpireTime", "EncryptionConfig",
+ });
+ internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor =
+ getDescriptor().getMessageTypes().get(4);
+ internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_fieldAccessorTable =
+ new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor,
+ new java.lang.String[] {
+ "Name", "SourceBackup", "Progress", "CancelTime",
+ });
+ internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor =
+ getDescriptor().getMessageTypes().get(5);
internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor,
@@ -219,7 +274,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"Backup", "UpdateMask",
});
internal_static_google_spanner_admin_database_v1_GetBackupRequest_descriptor =
- getDescriptor().getMessageTypes().get(4);
+ getDescriptor().getMessageTypes().get(6);
internal_static_google_spanner_admin_database_v1_GetBackupRequest_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_GetBackupRequest_descriptor,
@@ -227,7 +282,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"Name",
});
internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_descriptor =
- getDescriptor().getMessageTypes().get(5);
+ getDescriptor().getMessageTypes().get(7);
internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_descriptor,
@@ -235,7 +290,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"Name",
});
internal_static_google_spanner_admin_database_v1_ListBackupsRequest_descriptor =
- getDescriptor().getMessageTypes().get(6);
+ getDescriptor().getMessageTypes().get(8);
internal_static_google_spanner_admin_database_v1_ListBackupsRequest_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_ListBackupsRequest_descriptor,
@@ -243,7 +298,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"Parent", "Filter", "PageSize", "PageToken",
});
internal_static_google_spanner_admin_database_v1_ListBackupsResponse_descriptor =
- getDescriptor().getMessageTypes().get(7);
+ getDescriptor().getMessageTypes().get(9);
internal_static_google_spanner_admin_database_v1_ListBackupsResponse_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_ListBackupsResponse_descriptor,
@@ -251,7 +306,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"Backups", "NextPageToken",
});
internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_descriptor =
- getDescriptor().getMessageTypes().get(8);
+ getDescriptor().getMessageTypes().get(10);
internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_descriptor,
@@ -259,7 +314,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"Parent", "Filter", "PageSize", "PageToken",
});
internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_descriptor =
- getDescriptor().getMessageTypes().get(9);
+ getDescriptor().getMessageTypes().get(11);
internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_descriptor,
@@ -267,7 +322,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"Operations", "NextPageToken",
});
internal_static_google_spanner_admin_database_v1_BackupInfo_descriptor =
- getDescriptor().getMessageTypes().get(10);
+ getDescriptor().getMessageTypes().get(12);
internal_static_google_spanner_admin_database_v1_BackupInfo_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_BackupInfo_descriptor,
@@ -275,13 +330,21 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"Backup", "VersionTime", "CreateTime", "SourceDatabase",
});
internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor =
- getDescriptor().getMessageTypes().get(11);
+ getDescriptor().getMessageTypes().get(13);
internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor,
new java.lang.String[] {
"EncryptionType", "KmsKeyName",
});
+ internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor =
+ getDescriptor().getMessageTypes().get(14);
+ internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_fieldAccessorTable =
+ new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor,
+ new java.lang.String[] {
+ "EncryptionType", "KmsKeyName",
+ });
com.google.protobuf.ExtensionRegistry registry =
com.google.protobuf.ExtensionRegistry.newInstance();
registry.add(com.google.api.FieldBehaviorProto.fieldBehavior);
@@ -289,7 +352,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
registry.add(com.google.api.ResourceProto.resourceReference);
com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor(
descriptor, registry);
- com.google.api.AnnotationsProto.getDescriptor();
com.google.api.FieldBehaviorProto.getDescriptor();
com.google.api.ResourceProto.getDescriptor();
com.google.longrunning.OperationsProto.getDescriptor();
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
index 157e9098686..73dfc1efb12 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
@@ -50,46 +50,45 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
java.lang.String[] descriptorData = {
"\n-google/spanner/admin/database/v1/commo"
+ "n.proto\022 google.spanner.admin.database.v"
- + "1\032\034google/api/annotations.proto\032\037google/"
- + "api/field_behavior.proto\032\031google/api/res"
- + "ource.proto\032\037google/protobuf/timestamp.p"
- + "roto\032\027google/rpc/status.proto\"\213\001\n\021Operat"
- + "ionProgress\022\030\n\020progress_percent\030\001 \001(\005\022.\n"
- + "\nstart_time\030\002 \001(\0132\032.google.protobuf.Time"
- + "stamp\022,\n\010end_time\030\003 \001(\0132\032.google.protobu"
- + "f.Timestamp\"P\n\020EncryptionConfig\022<\n\014kms_k"
- + "ey_name\030\002 \001(\tB&\372A#\n!cloudkms.googleapis."
- + "com/CryptoKey\"\302\002\n\016EncryptionInfo\022S\n\017encr"
- + "yption_type\030\003 \001(\01625.google.spanner.admin"
- + ".database.v1.EncryptionInfo.TypeB\003\340A\003\0222\n"
- + "\021encryption_status\030\004 \001(\0132\022.google.rpc.St"
- + "atusB\003\340A\003\022I\n\017kms_key_version\030\002 \001(\tB0\340A\003\372"
- + "A*\n(cloudkms.googleapis.com/CryptoKeyVer"
- + "sion\"\\\n\004Type\022\024\n\020TYPE_UNSPECIFIED\020\000\022\035\n\031GO"
- + "OGLE_DEFAULT_ENCRYPTION\020\001\022\037\n\033CUSTOMER_MA"
- + "NAGED_ENCRYPTION\020\002*\\\n\017DatabaseDialect\022 \n"
- + "\034DATABASE_DIALECT_UNSPECIFIED\020\000\022\027\n\023GOOGL"
- + "E_STANDARD_SQL\020\001\022\016\n\nPOSTGRESQL\020\002B\244\004\n$com"
- + ".google.spanner.admin.database.v1B\013Commo"
- + "nProtoP\001ZHgoogle.golang.org/genproto/goo"
- + "gleapis/spanner/admin/database/v1;databa"
- + "se\252\002&Google.Cloud.Spanner.Admin.Database"
- + ".V1\312\002&Google\\Cloud\\Spanner\\Admin\\Databas"
- + "e\\V1\352\002+Google::Cloud::Spanner::Admin::Da"
- + "tabase::V1\352Ax\n!cloudkms.googleapis.com/C"
- + "ryptoKey\022Sprojects/{project}/locations/{"
- + "location}/keyRings/{key_ring}/cryptoKeys"
- + "/{crypto_key}\352A\246\001\n(cloudkms.googleapis.c"
- + "om/CryptoKeyVersion\022zprojects/{project}/"
- + "locations/{location}/keyRings/{key_ring}"
- + "/cryptoKeys/{crypto_key}/cryptoKeyVersio"
- + "ns/{crypto_key_version}b\006proto3"
+ + "1\032\037google/api/field_behavior.proto\032\031goog"
+ + "le/api/resource.proto\032\037google/protobuf/t"
+ + "imestamp.proto\032\027google/rpc/status.proto\""
+ + "\213\001\n\021OperationProgress\022\030\n\020progress_percen"
+ + "t\030\001 \001(\005\022.\n\nstart_time\030\002 \001(\0132\032.google.pro"
+ + "tobuf.Timestamp\022,\n\010end_time\030\003 \001(\0132\032.goog"
+ + "le.protobuf.Timestamp\"P\n\020EncryptionConfi"
+ + "g\022<\n\014kms_key_name\030\002 \001(\tB&\372A#\n!cloudkms.g"
+ + "oogleapis.com/CryptoKey\"\302\002\n\016EncryptionIn"
+ + "fo\022S\n\017encryption_type\030\003 \001(\01625.google.spa"
+ + "nner.admin.database.v1.EncryptionInfo.Ty"
+ + "peB\003\340A\003\0222\n\021encryption_status\030\004 \001(\0132\022.goo"
+ + "gle.rpc.StatusB\003\340A\003\022I\n\017kms_key_version\030\002"
+ + " \001(\tB0\340A\003\372A*\n(cloudkms.googleapis.com/Cr"
+ + "yptoKeyVersion\"\\\n\004Type\022\024\n\020TYPE_UNSPECIFI"
+ + "ED\020\000\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020\001\022\037\n\033C"
+ + "USTOMER_MANAGED_ENCRYPTION\020\002*\\\n\017Database"
+ + "Dialect\022 \n\034DATABASE_DIALECT_UNSPECIFIED\020"
+ + "\000\022\027\n\023GOOGLE_STANDARD_SQL\020\001\022\016\n\nPOSTGRESQL"
+ + "\020\002B\244\004\n$com.google.spanner.admin.database"
+ + ".v1B\013CommonProtoP\001ZHgoogle.golang.org/ge"
+ + "nproto/googleapis/spanner/admin/database"
+ + "/v1;database\252\002&Google.Cloud.Spanner.Admi"
+ + "n.Database.V1\312\002&Google\\Cloud\\Spanner\\Adm"
+ + "in\\Database\\V1\352\002+Google::Cloud::Spanner:"
+ + ":Admin::Database::V1\352Ax\n!cloudkms.google"
+ + "apis.com/CryptoKey\022Sprojects/{project}/l"
+ + "ocations/{location}/keyRings/{key_ring}/"
+ + "cryptoKeys/{crypto_key}\352A\246\001\n(cloudkms.go"
+ + "ogleapis.com/CryptoKeyVersion\022zprojects/"
+ + "{project}/locations/{location}/keyRings/"
+ + "{key_ring}/cryptoKeys/{crypto_key}/crypt"
+ + "oKeyVersions/{crypto_key_version}b\006proto"
+ + "3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
com.google.api.FieldBehaviorProto.getDescriptor(),
com.google.api.ResourceProto.getDescriptor(),
com.google.protobuf.TimestampProto.getDescriptor(),
@@ -126,7 +125,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
registry.add(com.google.api.ResourceProto.resourceReference);
com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor(
descriptor, registry);
- com.google.api.AnnotationsProto.getDescriptor();
com.google.api.FieldBehaviorProto.getDescriptor();
com.google.api.ResourceProto.getDescriptor();
com.google.protobuf.TimestampProto.getDescriptor();
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java
new file mode 100644
index 00000000000..ea29df0725f
--- /dev/null
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java
@@ -0,0 +1,1057 @@
+/*
+ * Copyright 2020 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
+ *
+ * https://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.
+ */
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: google/spanner/admin/database/v1/backup.proto
+
+package com.google.spanner.admin.database.v1;
+
+/**
+ *
+ *
+ *
+ * Encryption configuration for the copied backup.
+ *
+ *
+ * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupEncryptionConfig}
+ */
+public final class CopyBackupEncryptionConfig extends com.google.protobuf.GeneratedMessageV3
+ implements
+ // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CopyBackupEncryptionConfig)
+ CopyBackupEncryptionConfigOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use CopyBackupEncryptionConfig.newBuilder() to construct.
+ private CopyBackupEncryptionConfig(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+
+ private CopyBackupEncryptionConfig() {
+ encryptionType_ = 0;
+ kmsKeyName_ = "";
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+ return new CopyBackupEncryptionConfig();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+ return this.unknownFields;
+ }
+
+ private CopyBackupEncryptionConfig(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 8:
+ {
+ int rawValue = input.readEnum();
+
+ encryptionType_ = rawValue;
+ break;
+ }
+ case 18:
+ {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ kmsKeyName_ = s;
+ break;
+ }
+ default:
+ {
+ if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+ } finally {
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.class,
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder.class);
+ }
+
+ /**
+ *
+ *
+ *
+ * Encryption types for the backup.
+ *
+ *
+ * Protobuf enum {@code
+ * google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType}
+ */
+ public enum EncryptionType implements com.google.protobuf.ProtocolMessageEnum {
+ /**
+ *
+ *
+ *
+ * Unspecified. Do not use.
+ *
+ *
+ * ENCRYPTION_TYPE_UNSPECIFIED = 0;
+ */
+ ENCRYPTION_TYPE_UNSPECIFIED(0),
+ /**
+ *
+ *
+ *
+ * This is the default option for [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup]
+ * when [encryption_config][google.spanner.admin.database.v1.CopyBackupEncryptionConfig] is not specified.
+ * For example, if the source backup is using `Customer_Managed_Encryption`,
+ * the backup will be using the same Cloud KMS key as the source backup.
+ *
+ *
+ * USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION = 1;
+ */
+ USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION(1),
+ /**
+ *
+ *
+ *
+ * Use Google default encryption.
+ *
+ *
+ * GOOGLE_DEFAULT_ENCRYPTION = 2;
+ */
+ GOOGLE_DEFAULT_ENCRYPTION(2),
+ /**
+ *
+ *
+ *
+ * Use customer managed encryption. If specified, `kms_key_name`
+ * must contain a valid Cloud KMS key.
+ *
+ *
+ * CUSTOMER_MANAGED_ENCRYPTION = 3;
+ */
+ CUSTOMER_MANAGED_ENCRYPTION(3),
+ UNRECOGNIZED(-1),
+ ;
+
+ /**
+ *
+ *
+ *
+ * Unspecified. Do not use.
+ *
+ *
+ * ENCRYPTION_TYPE_UNSPECIFIED = 0;
+ */
+ public static final int ENCRYPTION_TYPE_UNSPECIFIED_VALUE = 0;
+ /**
+ *
+ *
+ *
+ * This is the default option for [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup]
+ * when [encryption_config][google.spanner.admin.database.v1.CopyBackupEncryptionConfig] is not specified.
+ * For example, if the source backup is using `Customer_Managed_Encryption`,
+ * the backup will be using the same Cloud KMS key as the source backup.
+ *
+ *
+ * USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION = 1;
+ */
+ public static final int USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION_VALUE = 1;
+ /**
+ *
+ *
+ *
+ * Use Google default encryption.
+ *
+ *
+ * GOOGLE_DEFAULT_ENCRYPTION = 2;
+ */
+ public static final int GOOGLE_DEFAULT_ENCRYPTION_VALUE = 2;
+ /**
+ *
+ *
+ *
+ * Use customer managed encryption. If specified, `kms_key_name`
+ * must contain a valid Cloud KMS key.
+ *
+ *
+ * CUSTOMER_MANAGED_ENCRYPTION = 3;
+ */
+ public static final int CUSTOMER_MANAGED_ENCRYPTION_VALUE = 3;
+
+ public final int getNumber() {
+ if (this == UNRECOGNIZED) {
+ throw new java.lang.IllegalArgumentException(
+ "Can't get the number of an unknown enum value.");
+ }
+ return value;
+ }
+
+ /**
+ * @param value The numeric wire value of the corresponding enum entry.
+ * @return The enum associated with the given numeric wire value.
+ * @deprecated Use {@link #forNumber(int)} instead.
+ */
+ @java.lang.Deprecated
+ public static EncryptionType valueOf(int value) {
+ return forNumber(value);
+ }
+
+ /**
+ * @param value The numeric wire value of the corresponding enum entry.
+ * @return The enum associated with the given numeric wire value.
+ */
+ public static EncryptionType forNumber(int value) {
+ switch (value) {
+ case 0:
+ return ENCRYPTION_TYPE_UNSPECIFIED;
+ case 1:
+ return USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION;
+ case 2:
+ return GOOGLE_DEFAULT_ENCRYPTION;
+ case 3:
+ return CUSTOMER_MANAGED_ENCRYPTION;
+ default:
+ return null;
+ }
+ }
+
+ public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() {
+ return internalValueMap;
+ }
+
+ private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap =
+ new com.google.protobuf.Internal.EnumLiteMap() {
+ public EncryptionType findValueByNumber(int number) {
+ return EncryptionType.forNumber(number);
+ }
+ };
+
+ public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
+ if (this == UNRECOGNIZED) {
+ throw new java.lang.IllegalStateException(
+ "Can't get the descriptor of an unrecognized enum value.");
+ }
+ return getDescriptor().getValues().get(ordinal());
+ }
+
+ public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
+ return getDescriptor();
+ }
+
+ public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
+ return com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.getDescriptor()
+ .getEnumTypes()
+ .get(0);
+ }
+
+ private static final EncryptionType[] VALUES = values();
+
+ public static EncryptionType valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+ if (desc.getType() != getDescriptor()) {
+ throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
+ }
+ if (desc.getIndex() == -1) {
+ return UNRECOGNIZED;
+ }
+ return VALUES[desc.getIndex()];
+ }
+
+ private final int value;
+
+ private EncryptionType(int value) {
+ this.value = value;
+ }
+
+ // @@protoc_insertion_point(enum_scope:google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType)
+ }
+
+ public static final int ENCRYPTION_TYPE_FIELD_NUMBER = 1;
+ private int encryptionType_;
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The enum numeric value on the wire for encryptionType.
+ */
+ @java.lang.Override
+ public int getEncryptionTypeValue() {
+ return encryptionType_;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The encryptionType.
+ */
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType
+ getEncryptionType() {
+ @SuppressWarnings("deprecation")
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType result =
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType.valueOf(
+ encryptionType_);
+ return result == null
+ ? com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType
+ .UNRECOGNIZED
+ : result;
+ }
+
+ public static final int KMS_KEY_NAME_FIELD_NUMBER = 2;
+ private volatile java.lang.Object kmsKeyName_;
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The kmsKeyName.
+ */
+ @java.lang.Override
+ public java.lang.String getKmsKeyName() {
+ java.lang.Object ref = kmsKeyName_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ kmsKeyName_ = s;
+ return s;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for kmsKeyName.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getKmsKeyNameBytes() {
+ java.lang.Object ref = kmsKeyName_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ kmsKeyName_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+ if (encryptionType_
+ != com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType
+ .ENCRYPTION_TYPE_UNSPECIFIED
+ .getNumber()) {
+ output.writeEnum(1, encryptionType_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kmsKeyName_);
+ }
+ unknownFields.writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (encryptionType_
+ != com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType
+ .ENCRYPTION_TYPE_UNSPECIFIED
+ .getNumber()) {
+ size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, encryptionType_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kmsKeyName_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kmsKeyName_);
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig)) {
+ return super.equals(obj);
+ }
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig other =
+ (com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig) obj;
+
+ if (encryptionType_ != other.encryptionType_) return false;
+ if (!getKmsKeyName().equals(other.getKmsKeyName())) return false;
+ if (!unknownFields.equals(other.unknownFields)) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + ENCRYPTION_TYPE_FIELD_NUMBER;
+ hash = (53 * hash) + encryptionType_;
+ hash = (37 * hash) + KMS_KEY_NAME_FIELD_NUMBER;
+ hash = (53 * hash) + getKmsKeyName().hashCode();
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseDelimitedFrom(
+ java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseDelimitedFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ *
+ *
+ *
+ * Encryption configuration for the copied backup.
+ *
+ *
+ * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupEncryptionConfig}
+ */
+ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder
+ implements
+ // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CopyBackupEncryptionConfig)
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.class,
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder.class);
+ }
+
+ // Construct using com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+ }
+
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ encryptionType_ = 0;
+
+ kmsKeyName_ = "";
+
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig
+ getDefaultInstanceForType() {
+ return com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig build() {
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig buildPartial() {
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig result =
+ new com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig(this);
+ result.encryptionType_ = encryptionType_;
+ result.kmsKeyName_ = kmsKeyName_;
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+ return super.setField(field, value);
+ }
+
+ @java.lang.Override
+ public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+
+ @java.lang.Override
+ public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig) {
+ return mergeFrom((com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig) other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig other) {
+ if (other
+ == com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.getDefaultInstance())
+ return this;
+ if (other.encryptionType_ != 0) {
+ setEncryptionTypeValue(other.getEncryptionTypeValue());
+ }
+ if (!other.getKmsKeyName().isEmpty()) {
+ kmsKeyName_ = other.kmsKeyName_;
+ onChanged();
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage =
+ (com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig)
+ e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private int encryptionType_ = 0;
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The enum numeric value on the wire for encryptionType.
+ */
+ @java.lang.Override
+ public int getEncryptionTypeValue() {
+ return encryptionType_;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @param value The enum numeric value on the wire for encryptionType to set.
+ * @return This builder for chaining.
+ */
+ public Builder setEncryptionTypeValue(int value) {
+
+ encryptionType_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The encryptionType.
+ */
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType
+ getEncryptionType() {
+ @SuppressWarnings("deprecation")
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType result =
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType.valueOf(
+ encryptionType_);
+ return result == null
+ ? com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType
+ .UNRECOGNIZED
+ : result;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @param value The encryptionType to set.
+ * @return This builder for chaining.
+ */
+ public Builder setEncryptionType(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ encryptionType_ = value.getNumber();
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearEncryptionType() {
+
+ encryptionType_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object kmsKeyName_ = "";
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The kmsKeyName.
+ */
+ public java.lang.String getKmsKeyName() {
+ java.lang.Object ref = kmsKeyName_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ kmsKeyName_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for kmsKeyName.
+ */
+ public com.google.protobuf.ByteString getKmsKeyNameBytes() {
+ java.lang.Object ref = kmsKeyName_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ kmsKeyName_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param value The kmsKeyName to set.
+ * @return This builder for chaining.
+ */
+ public Builder setKmsKeyName(java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ kmsKeyName_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearKmsKeyName() {
+
+ kmsKeyName_ = getDefaultInstance().getKmsKeyName();
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param value The bytes for kmsKeyName to set.
+ * @return This builder for chaining.
+ */
+ public Builder setKmsKeyNameBytes(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ kmsKeyName_ = value;
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+ // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CopyBackupEncryptionConfig)
+ }
+
+ // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.CopyBackupEncryptionConfig)
+ private static final com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig
+ DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig();
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig
+ getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser PARSER =
+ new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public CopyBackupEncryptionConfig parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new CopyBackupEncryptionConfig(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig
+ getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java
new file mode 100644
index 00000000000..a6117dfb660
--- /dev/null
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2020 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
+ *
+ * https://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.
+ */
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: google/spanner/admin/database/v1/backup.proto
+
+package com.google.spanner.admin.database.v1;
+
+public interface CopyBackupEncryptionConfigOrBuilder
+ extends
+ // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CopyBackupEncryptionConfig)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The enum numeric value on the wire for encryptionType.
+ */
+ int getEncryptionTypeValue();
+ /**
+ *
+ *
+ *
+ * Required. The encryption type of the backup.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType encryption_type = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The encryptionType.
+ */
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.EncryptionType
+ getEncryptionType();
+
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The kmsKeyName.
+ */
+ java.lang.String getKmsKeyName();
+ /**
+ *
+ *
+ *
+ * Optional. The Cloud KMS key that will be used to protect the backup.
+ * This field should be set only when
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ * `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ * `projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>`.
+ *
+ *
+ *
+ * string kms_key_name = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for kmsKeyName.
+ */
+ com.google.protobuf.ByteString getKmsKeyNameBytes();
+}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java
new file mode 100644
index 00000000000..01e37326459
--- /dev/null
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java
@@ -0,0 +1,1541 @@
+/*
+ * Copyright 2020 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
+ *
+ * https://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.
+ */
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: google/spanner/admin/database/v1/backup.proto
+
+package com.google.spanner.admin.database.v1;
+
+/**
+ *
+ *
+ *
+ * Metadata type for the google.longrunning.Operation returned by
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup].
+ *
+ *
+ * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupMetadata}
+ */
+public final class CopyBackupMetadata extends com.google.protobuf.GeneratedMessageV3
+ implements
+ // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CopyBackupMetadata)
+ CopyBackupMetadataOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use CopyBackupMetadata.newBuilder() to construct.
+ private CopyBackupMetadata(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+
+ private CopyBackupMetadata() {
+ name_ = "";
+ sourceBackup_ = "";
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+ return new CopyBackupMetadata();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+ return this.unknownFields;
+ }
+
+ private CopyBackupMetadata(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10:
+ {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ name_ = s;
+ break;
+ }
+ case 18:
+ {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ sourceBackup_ = s;
+ break;
+ }
+ case 26:
+ {
+ com.google.spanner.admin.database.v1.OperationProgress.Builder subBuilder = null;
+ if (progress_ != null) {
+ subBuilder = progress_.toBuilder();
+ }
+ progress_ =
+ input.readMessage(
+ com.google.spanner.admin.database.v1.OperationProgress.parser(),
+ extensionRegistry);
+ if (subBuilder != null) {
+ subBuilder.mergeFrom(progress_);
+ progress_ = subBuilder.buildPartial();
+ }
+
+ break;
+ }
+ case 34:
+ {
+ com.google.protobuf.Timestamp.Builder subBuilder = null;
+ if (cancelTime_ != null) {
+ subBuilder = cancelTime_.toBuilder();
+ }
+ cancelTime_ =
+ input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+ if (subBuilder != null) {
+ subBuilder.mergeFrom(cancelTime_);
+ cancelTime_ = subBuilder.buildPartial();
+ }
+
+ break;
+ }
+ default:
+ {
+ if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+ } finally {
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.google.spanner.admin.database.v1.CopyBackupMetadata.class,
+ com.google.spanner.admin.database.v1.CopyBackupMetadata.Builder.class);
+ }
+
+ public static final int NAME_FIELD_NUMBER = 1;
+ private volatile java.lang.Object name_;
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The name.
+ */
+ @java.lang.Override
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ name_ = s;
+ return s;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The bytes for name.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int SOURCE_BACKUP_FIELD_NUMBER = 2;
+ private volatile java.lang.Object sourceBackup_;
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The sourceBackup.
+ */
+ @java.lang.Override
+ public java.lang.String getSourceBackup() {
+ java.lang.Object ref = sourceBackup_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ sourceBackup_ = s;
+ return s;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The bytes for sourceBackup.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getSourceBackupBytes() {
+ java.lang.Object ref = sourceBackup_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ sourceBackup_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int PROGRESS_FIELD_NUMBER = 3;
+ private com.google.spanner.admin.database.v1.OperationProgress progress_;
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ *
+ * @return Whether the progress field is set.
+ */
+ @java.lang.Override
+ public boolean hasProgress() {
+ return progress_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ *
+ * @return The progress.
+ */
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.OperationProgress getProgress() {
+ return progress_ == null
+ ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance()
+ : progress_;
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgressOrBuilder() {
+ return getProgress();
+ }
+
+ public static final int CANCEL_TIME_FIELD_NUMBER = 4;
+ private com.google.protobuf.Timestamp cancelTime_;
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ *
+ * @return Whether the cancelTime field is set.
+ */
+ @java.lang.Override
+ public boolean hasCancelTime() {
+ return cancelTime_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ *
+ * @return The cancelTime.
+ */
+ @java.lang.Override
+ public com.google.protobuf.Timestamp getCancelTime() {
+ return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_;
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ @java.lang.Override
+ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() {
+ return getCancelTime();
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, sourceBackup_);
+ }
+ if (progress_ != null) {
+ output.writeMessage(3, getProgress());
+ }
+ if (cancelTime_ != null) {
+ output.writeMessage(4, getCancelTime());
+ }
+ unknownFields.writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, sourceBackup_);
+ }
+ if (progress_ != null) {
+ size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getProgress());
+ }
+ if (cancelTime_ != null) {
+ size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getCancelTime());
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.google.spanner.admin.database.v1.CopyBackupMetadata)) {
+ return super.equals(obj);
+ }
+ com.google.spanner.admin.database.v1.CopyBackupMetadata other =
+ (com.google.spanner.admin.database.v1.CopyBackupMetadata) obj;
+
+ if (!getName().equals(other.getName())) return false;
+ if (!getSourceBackup().equals(other.getSourceBackup())) return false;
+ if (hasProgress() != other.hasProgress()) return false;
+ if (hasProgress()) {
+ if (!getProgress().equals(other.getProgress())) return false;
+ }
+ if (hasCancelTime() != other.hasCancelTime()) return false;
+ if (hasCancelTime()) {
+ if (!getCancelTime().equals(other.getCancelTime())) return false;
+ }
+ if (!unknownFields.equals(other.unknownFields)) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + NAME_FIELD_NUMBER;
+ hash = (53 * hash) + getName().hashCode();
+ hash = (37 * hash) + SOURCE_BACKUP_FIELD_NUMBER;
+ hash = (53 * hash) + getSourceBackup().hashCode();
+ if (hasProgress()) {
+ hash = (37 * hash) + PROGRESS_FIELD_NUMBER;
+ hash = (53 * hash) + getProgress().hashCode();
+ }
+ if (hasCancelTime()) {
+ hash = (37 * hash) + CANCEL_TIME_FIELD_NUMBER;
+ hash = (53 * hash) + getCancelTime().hashCode();
+ }
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseDelimitedFrom(
+ java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseDelimitedFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(
+ com.google.spanner.admin.database.v1.CopyBackupMetadata prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ *
+ *
+ *
+ * Metadata type for the google.longrunning.Operation returned by
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup].
+ *
+ *
+ * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupMetadata}
+ */
+ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder
+ implements
+ // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CopyBackupMetadata)
+ com.google.spanner.admin.database.v1.CopyBackupMetadataOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.google.spanner.admin.database.v1.CopyBackupMetadata.class,
+ com.google.spanner.admin.database.v1.CopyBackupMetadata.Builder.class);
+ }
+
+ // Construct using com.google.spanner.admin.database.v1.CopyBackupMetadata.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+ }
+
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ name_ = "";
+
+ sourceBackup_ = "";
+
+ if (progressBuilder_ == null) {
+ progress_ = null;
+ } else {
+ progress_ = null;
+ progressBuilder_ = null;
+ }
+ if (cancelTimeBuilder_ == null) {
+ cancelTime_ = null;
+ } else {
+ cancelTime_ = null;
+ cancelTimeBuilder_ = null;
+ }
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupMetadata getDefaultInstanceForType() {
+ return com.google.spanner.admin.database.v1.CopyBackupMetadata.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupMetadata build() {
+ com.google.spanner.admin.database.v1.CopyBackupMetadata result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupMetadata buildPartial() {
+ com.google.spanner.admin.database.v1.CopyBackupMetadata result =
+ new com.google.spanner.admin.database.v1.CopyBackupMetadata(this);
+ result.name_ = name_;
+ result.sourceBackup_ = sourceBackup_;
+ if (progressBuilder_ == null) {
+ result.progress_ = progress_;
+ } else {
+ result.progress_ = progressBuilder_.build();
+ }
+ if (cancelTimeBuilder_ == null) {
+ result.cancelTime_ = cancelTime_;
+ } else {
+ result.cancelTime_ = cancelTimeBuilder_.build();
+ }
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+ return super.setField(field, value);
+ }
+
+ @java.lang.Override
+ public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+
+ @java.lang.Override
+ public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.google.spanner.admin.database.v1.CopyBackupMetadata) {
+ return mergeFrom((com.google.spanner.admin.database.v1.CopyBackupMetadata) other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.google.spanner.admin.database.v1.CopyBackupMetadata other) {
+ if (other == com.google.spanner.admin.database.v1.CopyBackupMetadata.getDefaultInstance())
+ return this;
+ if (!other.getName().isEmpty()) {
+ name_ = other.name_;
+ onChanged();
+ }
+ if (!other.getSourceBackup().isEmpty()) {
+ sourceBackup_ = other.sourceBackup_;
+ onChanged();
+ }
+ if (other.hasProgress()) {
+ mergeProgress(other.getProgress());
+ }
+ if (other.hasCancelTime()) {
+ mergeCancelTime(other.getCancelTime());
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ com.google.spanner.admin.database.v1.CopyBackupMetadata parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage =
+ (com.google.spanner.admin.database.v1.CopyBackupMetadata) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private java.lang.Object name_ = "";
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The name.
+ */
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ name_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The bytes for name.
+ */
+ public com.google.protobuf.ByteString getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @param value The name to set.
+ * @return This builder for chaining.
+ */
+ public Builder setName(java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ name_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearName() {
+
+ name_ = getDefaultInstance().getName();
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @param value The bytes for name to set.
+ * @return This builder for chaining.
+ */
+ public Builder setNameBytes(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ name_ = value;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object sourceBackup_ = "";
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The sourceBackup.
+ */
+ public java.lang.String getSourceBackup() {
+ java.lang.Object ref = sourceBackup_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ sourceBackup_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The bytes for sourceBackup.
+ */
+ public com.google.protobuf.ByteString getSourceBackupBytes() {
+ java.lang.Object ref = sourceBackup_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ sourceBackup_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @param value The sourceBackup to set.
+ * @return This builder for chaining.
+ */
+ public Builder setSourceBackup(java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ sourceBackup_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearSourceBackup() {
+
+ sourceBackup_ = getDefaultInstance().getSourceBackup();
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @param value The bytes for sourceBackup to set.
+ * @return This builder for chaining.
+ */
+ public Builder setSourceBackupBytes(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ sourceBackup_ = value;
+ onChanged();
+ return this;
+ }
+
+ private com.google.spanner.admin.database.v1.OperationProgress progress_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.spanner.admin.database.v1.OperationProgress,
+ com.google.spanner.admin.database.v1.OperationProgress.Builder,
+ com.google.spanner.admin.database.v1.OperationProgressOrBuilder>
+ progressBuilder_;
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ *
+ * @return Whether the progress field is set.
+ */
+ public boolean hasProgress() {
+ return progressBuilder_ != null || progress_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ *
+ * @return The progress.
+ */
+ public com.google.spanner.admin.database.v1.OperationProgress getProgress() {
+ if (progressBuilder_ == null) {
+ return progress_ == null
+ ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance()
+ : progress_;
+ } else {
+ return progressBuilder_.getMessage();
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ public Builder setProgress(com.google.spanner.admin.database.v1.OperationProgress value) {
+ if (progressBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ progress_ = value;
+ onChanged();
+ } else {
+ progressBuilder_.setMessage(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ public Builder setProgress(
+ com.google.spanner.admin.database.v1.OperationProgress.Builder builderForValue) {
+ if (progressBuilder_ == null) {
+ progress_ = builderForValue.build();
+ onChanged();
+ } else {
+ progressBuilder_.setMessage(builderForValue.build());
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ public Builder mergeProgress(com.google.spanner.admin.database.v1.OperationProgress value) {
+ if (progressBuilder_ == null) {
+ if (progress_ != null) {
+ progress_ =
+ com.google.spanner.admin.database.v1.OperationProgress.newBuilder(progress_)
+ .mergeFrom(value)
+ .buildPartial();
+ } else {
+ progress_ = value;
+ }
+ onChanged();
+ } else {
+ progressBuilder_.mergeFrom(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ public Builder clearProgress() {
+ if (progressBuilder_ == null) {
+ progress_ = null;
+ onChanged();
+ } else {
+ progress_ = null;
+ progressBuilder_ = null;
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgressBuilder() {
+
+ onChanged();
+ return getProgressFieldBuilder().getBuilder();
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgressOrBuilder() {
+ if (progressBuilder_ != null) {
+ return progressBuilder_.getMessageOrBuilder();
+ } else {
+ return progress_ == null
+ ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance()
+ : progress_;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.spanner.admin.database.v1.OperationProgress,
+ com.google.spanner.admin.database.v1.OperationProgress.Builder,
+ com.google.spanner.admin.database.v1.OperationProgressOrBuilder>
+ getProgressFieldBuilder() {
+ if (progressBuilder_ == null) {
+ progressBuilder_ =
+ new com.google.protobuf.SingleFieldBuilderV3<
+ com.google.spanner.admin.database.v1.OperationProgress,
+ com.google.spanner.admin.database.v1.OperationProgress.Builder,
+ com.google.spanner.admin.database.v1.OperationProgressOrBuilder>(
+ getProgress(), getParentForChildren(), isClean());
+ progress_ = null;
+ }
+ return progressBuilder_;
+ }
+
+ private com.google.protobuf.Timestamp cancelTime_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>
+ cancelTimeBuilder_;
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ *
+ * @return Whether the cancelTime field is set.
+ */
+ public boolean hasCancelTime() {
+ return cancelTimeBuilder_ != null || cancelTime_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ *
+ * @return The cancelTime.
+ */
+ public com.google.protobuf.Timestamp getCancelTime() {
+ if (cancelTimeBuilder_ == null) {
+ return cancelTime_ == null
+ ? com.google.protobuf.Timestamp.getDefaultInstance()
+ : cancelTime_;
+ } else {
+ return cancelTimeBuilder_.getMessage();
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ public Builder setCancelTime(com.google.protobuf.Timestamp value) {
+ if (cancelTimeBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ cancelTime_ = value;
+ onChanged();
+ } else {
+ cancelTimeBuilder_.setMessage(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForValue) {
+ if (cancelTimeBuilder_ == null) {
+ cancelTime_ = builderForValue.build();
+ onChanged();
+ } else {
+ cancelTimeBuilder_.setMessage(builderForValue.build());
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ public Builder mergeCancelTime(com.google.protobuf.Timestamp value) {
+ if (cancelTimeBuilder_ == null) {
+ if (cancelTime_ != null) {
+ cancelTime_ =
+ com.google.protobuf.Timestamp.newBuilder(cancelTime_).mergeFrom(value).buildPartial();
+ } else {
+ cancelTime_ = value;
+ }
+ onChanged();
+ } else {
+ cancelTimeBuilder_.mergeFrom(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ public Builder clearCancelTime() {
+ if (cancelTimeBuilder_ == null) {
+ cancelTime_ = null;
+ onChanged();
+ } else {
+ cancelTime_ = null;
+ cancelTimeBuilder_ = null;
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() {
+
+ onChanged();
+ return getCancelTimeFieldBuilder().getBuilder();
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() {
+ if (cancelTimeBuilder_ != null) {
+ return cancelTimeBuilder_.getMessageOrBuilder();
+ } else {
+ return cancelTime_ == null
+ ? com.google.protobuf.Timestamp.getDefaultInstance()
+ : cancelTime_;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>
+ getCancelTimeFieldBuilder() {
+ if (cancelTimeBuilder_ == null) {
+ cancelTimeBuilder_ =
+ new com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>(
+ getCancelTime(), getParentForChildren(), isClean());
+ cancelTime_ = null;
+ }
+ return cancelTimeBuilder_;
+ }
+
+ @java.lang.Override
+ public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+ // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CopyBackupMetadata)
+ }
+
+ // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.CopyBackupMetadata)
+ private static final com.google.spanner.admin.database.v1.CopyBackupMetadata DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.CopyBackupMetadata();
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupMetadata getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser PARSER =
+ new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public CopyBackupMetadata parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new CopyBackupMetadata(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupMetadata getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java
new file mode 100644
index 00000000000..f977fe6fb38
--- /dev/null
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2020 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
+ *
+ * https://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.
+ */
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: google/spanner/admin/database/v1/backup.proto
+
+package com.google.spanner.admin.database.v1;
+
+public interface CopyBackupMetadataOrBuilder
+ extends
+ // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CopyBackupMetadata)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The name.
+ */
+ java.lang.String getName();
+ /**
+ *
+ *
+ *
+ * The name of the backup being created through the copy operation.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string name = 1 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The bytes for name.
+ */
+ com.google.protobuf.ByteString getNameBytes();
+
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The sourceBackup.
+ */
+ java.lang.String getSourceBackup();
+ /**
+ *
+ *
+ *
+ * The name of the source backup that is being copied.
+ * Values are of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string source_backup = 2 [(.google.api.resource_reference) = { ... }
+ *
+ * @return The bytes for sourceBackup.
+ */
+ com.google.protobuf.ByteString getSourceBackupBytes();
+
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ *
+ * @return Whether the progress field is set.
+ */
+ boolean hasProgress();
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ *
+ * @return The progress.
+ */
+ com.google.spanner.admin.database.v1.OperationProgress getProgress();
+ /**
+ *
+ *
+ *
+ * The progress of the
+ * [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ *
+ *
+ * .google.spanner.admin.database.v1.OperationProgress progress = 3;
+ */
+ com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgressOrBuilder();
+
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ *
+ * @return Whether the cancelTime field is set.
+ */
+ boolean hasCancelTime();
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ *
+ * @return The cancelTime.
+ */
+ com.google.protobuf.Timestamp getCancelTime();
+ /**
+ *
+ *
+ *
+ * The time at which cancellation of CopyBackup operation was received.
+ * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ * starts asynchronous cancellation on a long-running operation. The server
+ * makes a best effort to cancel the operation, but success is not guaranteed.
+ * Clients can use
+ * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ * other methods to check whether the cancellation succeeded or whether the
+ * operation completed despite cancellation. On successful cancellation,
+ * the operation is not deleted; instead, it becomes an operation with
+ * an [Operation.error][google.longrunning.Operation.error] value with a
+ * [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ * corresponding to `Code.CANCELLED`.
+ *
+ *
+ * .google.protobuf.Timestamp cancel_time = 4;
+ */
+ com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder();
+}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java
new file mode 100644
index 00000000000..3e5aa64bae9
--- /dev/null
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java
@@ -0,0 +1,1769 @@
+/*
+ * Copyright 2020 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
+ *
+ * https://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.
+ */
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: google/spanner/admin/database/v1/backup.proto
+
+package com.google.spanner.admin.database.v1;
+
+/**
+ *
+ *
+ *
+ * The request for [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup].
+ *
+ *
+ * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupRequest}
+ */
+public final class CopyBackupRequest extends com.google.protobuf.GeneratedMessageV3
+ implements
+ // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.CopyBackupRequest)
+ CopyBackupRequestOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use CopyBackupRequest.newBuilder() to construct.
+ private CopyBackupRequest(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+
+ private CopyBackupRequest() {
+ parent_ = "";
+ backupId_ = "";
+ sourceBackup_ = "";
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+ return new CopyBackupRequest();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+ return this.unknownFields;
+ }
+
+ private CopyBackupRequest(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10:
+ {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ parent_ = s;
+ break;
+ }
+ case 18:
+ {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ backupId_ = s;
+ break;
+ }
+ case 26:
+ {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ sourceBackup_ = s;
+ break;
+ }
+ case 34:
+ {
+ com.google.protobuf.Timestamp.Builder subBuilder = null;
+ if (expireTime_ != null) {
+ subBuilder = expireTime_.toBuilder();
+ }
+ expireTime_ =
+ input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+ if (subBuilder != null) {
+ subBuilder.mergeFrom(expireTime_);
+ expireTime_ = subBuilder.buildPartial();
+ }
+
+ break;
+ }
+ case 42:
+ {
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder subBuilder =
+ null;
+ if (encryptionConfig_ != null) {
+ subBuilder = encryptionConfig_.toBuilder();
+ }
+ encryptionConfig_ =
+ input.readMessage(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.parser(),
+ extensionRegistry);
+ if (subBuilder != null) {
+ subBuilder.mergeFrom(encryptionConfig_);
+ encryptionConfig_ = subBuilder.buildPartial();
+ }
+
+ break;
+ }
+ default:
+ {
+ if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+ } finally {
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.google.spanner.admin.database.v1.CopyBackupRequest.class,
+ com.google.spanner.admin.database.v1.CopyBackupRequest.Builder.class);
+ }
+
+ public static final int PARENT_FIELD_NUMBER = 1;
+ private volatile java.lang.Object parent_;
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The parent.
+ */
+ @java.lang.Override
+ public java.lang.String getParent() {
+ java.lang.Object ref = parent_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ parent_ = s;
+ return s;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for parent.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getParentBytes() {
+ java.lang.Object ref = parent_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ parent_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int BACKUP_ID_FIELD_NUMBER = 2;
+ private volatile java.lang.Object backupId_;
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The backupId.
+ */
+ @java.lang.Override
+ public java.lang.String getBackupId() {
+ java.lang.Object ref = backupId_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ backupId_ = s;
+ return s;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The bytes for backupId.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getBackupIdBytes() {
+ java.lang.Object ref = backupId_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ backupId_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int SOURCE_BACKUP_FIELD_NUMBER = 3;
+ private volatile java.lang.Object sourceBackup_;
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The sourceBackup.
+ */
+ @java.lang.Override
+ public java.lang.String getSourceBackup() {
+ java.lang.Object ref = sourceBackup_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ sourceBackup_ = s;
+ return s;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for sourceBackup.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getSourceBackupBytes() {
+ java.lang.Object ref = sourceBackup_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ sourceBackup_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int EXPIRE_TIME_FIELD_NUMBER = 4;
+ private com.google.protobuf.Timestamp expireTime_;
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return Whether the expireTime field is set.
+ */
+ @java.lang.Override
+ public boolean hasExpireTime() {
+ return expireTime_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The expireTime.
+ */
+ @java.lang.Override
+ public com.google.protobuf.Timestamp getExpireTime() {
+ return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ @java.lang.Override
+ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() {
+ return getExpireTime();
+ }
+
+ public static final int ENCRYPTION_CONFIG_FIELD_NUMBER = 5;
+ private com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryptionConfig_;
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the encryptionConfig field is set.
+ */
+ @java.lang.Override
+ public boolean hasEncryptionConfig() {
+ return encryptionConfig_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The encryptionConfig.
+ */
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig getEncryptionConfig() {
+ return encryptionConfig_ == null
+ ? com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.getDefaultInstance()
+ : encryptionConfig_;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder
+ getEncryptionConfigOrBuilder() {
+ return getEncryptionConfig();
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, backupId_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 3, sourceBackup_);
+ }
+ if (expireTime_ != null) {
+ output.writeMessage(4, getExpireTime());
+ }
+ if (encryptionConfig_ != null) {
+ output.writeMessage(5, getEncryptionConfig());
+ }
+ unknownFields.writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backupId_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, backupId_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceBackup_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, sourceBackup_);
+ }
+ if (expireTime_ != null) {
+ size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getExpireTime());
+ }
+ if (encryptionConfig_ != null) {
+ size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getEncryptionConfig());
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.google.spanner.admin.database.v1.CopyBackupRequest)) {
+ return super.equals(obj);
+ }
+ com.google.spanner.admin.database.v1.CopyBackupRequest other =
+ (com.google.spanner.admin.database.v1.CopyBackupRequest) obj;
+
+ if (!getParent().equals(other.getParent())) return false;
+ if (!getBackupId().equals(other.getBackupId())) return false;
+ if (!getSourceBackup().equals(other.getSourceBackup())) return false;
+ if (hasExpireTime() != other.hasExpireTime()) return false;
+ if (hasExpireTime()) {
+ if (!getExpireTime().equals(other.getExpireTime())) return false;
+ }
+ if (hasEncryptionConfig() != other.hasEncryptionConfig()) return false;
+ if (hasEncryptionConfig()) {
+ if (!getEncryptionConfig().equals(other.getEncryptionConfig())) return false;
+ }
+ if (!unknownFields.equals(other.unknownFields)) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + PARENT_FIELD_NUMBER;
+ hash = (53 * hash) + getParent().hashCode();
+ hash = (37 * hash) + BACKUP_ID_FIELD_NUMBER;
+ hash = (53 * hash) + getBackupId().hashCode();
+ hash = (37 * hash) + SOURCE_BACKUP_FIELD_NUMBER;
+ hash = (53 * hash) + getSourceBackup().hashCode();
+ if (hasExpireTime()) {
+ hash = (37 * hash) + EXPIRE_TIME_FIELD_NUMBER;
+ hash = (53 * hash) + getExpireTime().hashCode();
+ }
+ if (hasEncryptionConfig()) {
+ hash = (37 * hash) + ENCRYPTION_CONFIG_FIELD_NUMBER;
+ hash = (53 * hash) + getEncryptionConfig().hashCode();
+ }
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseDelimitedFrom(
+ java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseDelimitedFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(
+ com.google.spanner.admin.database.v1.CopyBackupRequest prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ *
+ *
+ *
+ * The request for [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup].
+ *
+ *
+ * Protobuf type {@code google.spanner.admin.database.v1.CopyBackupRequest}
+ */
+ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder
+ implements
+ // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.CopyBackupRequest)
+ com.google.spanner.admin.database.v1.CopyBackupRequestOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.google.spanner.admin.database.v1.CopyBackupRequest.class,
+ com.google.spanner.admin.database.v1.CopyBackupRequest.Builder.class);
+ }
+
+ // Construct using com.google.spanner.admin.database.v1.CopyBackupRequest.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+ }
+
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ parent_ = "";
+
+ backupId_ = "";
+
+ sourceBackup_ = "";
+
+ if (expireTimeBuilder_ == null) {
+ expireTime_ = null;
+ } else {
+ expireTime_ = null;
+ expireTimeBuilder_ = null;
+ }
+ if (encryptionConfigBuilder_ == null) {
+ encryptionConfig_ = null;
+ } else {
+ encryptionConfig_ = null;
+ encryptionConfigBuilder_ = null;
+ }
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+ return com.google.spanner.admin.database.v1.BackupProto
+ .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupRequest getDefaultInstanceForType() {
+ return com.google.spanner.admin.database.v1.CopyBackupRequest.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupRequest build() {
+ com.google.spanner.admin.database.v1.CopyBackupRequest result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupRequest buildPartial() {
+ com.google.spanner.admin.database.v1.CopyBackupRequest result =
+ new com.google.spanner.admin.database.v1.CopyBackupRequest(this);
+ result.parent_ = parent_;
+ result.backupId_ = backupId_;
+ result.sourceBackup_ = sourceBackup_;
+ if (expireTimeBuilder_ == null) {
+ result.expireTime_ = expireTime_;
+ } else {
+ result.expireTime_ = expireTimeBuilder_.build();
+ }
+ if (encryptionConfigBuilder_ == null) {
+ result.encryptionConfig_ = encryptionConfig_;
+ } else {
+ result.encryptionConfig_ = encryptionConfigBuilder_.build();
+ }
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+ return super.setField(field, value);
+ }
+
+ @java.lang.Override
+ public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+
+ @java.lang.Override
+ public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.google.spanner.admin.database.v1.CopyBackupRequest) {
+ return mergeFrom((com.google.spanner.admin.database.v1.CopyBackupRequest) other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.google.spanner.admin.database.v1.CopyBackupRequest other) {
+ if (other == com.google.spanner.admin.database.v1.CopyBackupRequest.getDefaultInstance())
+ return this;
+ if (!other.getParent().isEmpty()) {
+ parent_ = other.parent_;
+ onChanged();
+ }
+ if (!other.getBackupId().isEmpty()) {
+ backupId_ = other.backupId_;
+ onChanged();
+ }
+ if (!other.getSourceBackup().isEmpty()) {
+ sourceBackup_ = other.sourceBackup_;
+ onChanged();
+ }
+ if (other.hasExpireTime()) {
+ mergeExpireTime(other.getExpireTime());
+ }
+ if (other.hasEncryptionConfig()) {
+ mergeEncryptionConfig(other.getEncryptionConfig());
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ com.google.spanner.admin.database.v1.CopyBackupRequest parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage =
+ (com.google.spanner.admin.database.v1.CopyBackupRequest) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private java.lang.Object parent_ = "";
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The parent.
+ */
+ public java.lang.String getParent() {
+ java.lang.Object ref = parent_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ parent_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for parent.
+ */
+ public com.google.protobuf.ByteString getParentBytes() {
+ java.lang.Object ref = parent_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ parent_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param value The parent to set.
+ * @return This builder for chaining.
+ */
+ public Builder setParent(java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ parent_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearParent() {
+
+ parent_ = getDefaultInstance().getParent();
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param value The bytes for parent to set.
+ * @return This builder for chaining.
+ */
+ public Builder setParentBytes(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ parent_ = value;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object backupId_ = "";
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The backupId.
+ */
+ public java.lang.String getBackupId() {
+ java.lang.Object ref = backupId_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ backupId_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The bytes for backupId.
+ */
+ public com.google.protobuf.ByteString getBackupIdBytes() {
+ java.lang.Object ref = backupId_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ backupId_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @param value The backupId to set.
+ * @return This builder for chaining.
+ */
+ public Builder setBackupId(java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ backupId_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearBackupId() {
+
+ backupId_ = getDefaultInstance().getBackupId();
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @param value The bytes for backupId to set.
+ * @return This builder for chaining.
+ */
+ public Builder setBackupIdBytes(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ backupId_ = value;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object sourceBackup_ = "";
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The sourceBackup.
+ */
+ public java.lang.String getSourceBackup() {
+ java.lang.Object ref = sourceBackup_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ sourceBackup_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for sourceBackup.
+ */
+ public com.google.protobuf.ByteString getSourceBackupBytes() {
+ java.lang.Object ref = sourceBackup_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+ sourceBackup_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param value The sourceBackup to set.
+ * @return This builder for chaining.
+ */
+ public Builder setSourceBackup(java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ sourceBackup_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearSourceBackup() {
+
+ sourceBackup_ = getDefaultInstance().getSourceBackup();
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @param value The bytes for sourceBackup to set.
+ * @return This builder for chaining.
+ */
+ public Builder setSourceBackupBytes(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ sourceBackup_ = value;
+ onChanged();
+ return this;
+ }
+
+ private com.google.protobuf.Timestamp expireTime_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>
+ expireTimeBuilder_;
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return Whether the expireTime field is set.
+ */
+ public boolean hasExpireTime() {
+ return expireTimeBuilder_ != null || expireTime_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The expireTime.
+ */
+ public com.google.protobuf.Timestamp getExpireTime() {
+ if (expireTimeBuilder_ == null) {
+ return expireTime_ == null
+ ? com.google.protobuf.Timestamp.getDefaultInstance()
+ : expireTime_;
+ } else {
+ return expireTimeBuilder_.getMessage();
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ public Builder setExpireTime(com.google.protobuf.Timestamp value) {
+ if (expireTimeBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ expireTime_ = value;
+ onChanged();
+ } else {
+ expireTimeBuilder_.setMessage(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForValue) {
+ if (expireTimeBuilder_ == null) {
+ expireTime_ = builderForValue.build();
+ onChanged();
+ } else {
+ expireTimeBuilder_.setMessage(builderForValue.build());
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ public Builder mergeExpireTime(com.google.protobuf.Timestamp value) {
+ if (expireTimeBuilder_ == null) {
+ if (expireTime_ != null) {
+ expireTime_ =
+ com.google.protobuf.Timestamp.newBuilder(expireTime_).mergeFrom(value).buildPartial();
+ } else {
+ expireTime_ = value;
+ }
+ onChanged();
+ } else {
+ expireTimeBuilder_.mergeFrom(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ public Builder clearExpireTime() {
+ if (expireTimeBuilder_ == null) {
+ expireTime_ = null;
+ onChanged();
+ } else {
+ expireTime_ = null;
+ expireTimeBuilder_ = null;
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() {
+
+ onChanged();
+ return getExpireTimeFieldBuilder().getBuilder();
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() {
+ if (expireTimeBuilder_ != null) {
+ return expireTimeBuilder_.getMessageOrBuilder();
+ } else {
+ return expireTime_ == null
+ ? com.google.protobuf.Timestamp.getDefaultInstance()
+ : expireTime_;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>
+ getExpireTimeFieldBuilder() {
+ if (expireTimeBuilder_ == null) {
+ expireTimeBuilder_ =
+ new com.google.protobuf.SingleFieldBuilderV3<
+ com.google.protobuf.Timestamp,
+ com.google.protobuf.Timestamp.Builder,
+ com.google.protobuf.TimestampOrBuilder>(
+ getExpireTime(), getParentForChildren(), isClean());
+ expireTime_ = null;
+ }
+ return expireTimeBuilder_;
+ }
+
+ private com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryptionConfig_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig,
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder,
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder>
+ encryptionConfigBuilder_;
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the encryptionConfig field is set.
+ */
+ public boolean hasEncryptionConfig() {
+ return encryptionConfigBuilder_ != null || encryptionConfig_ != null;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The encryptionConfig.
+ */
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig getEncryptionConfig() {
+ if (encryptionConfigBuilder_ == null) {
+ return encryptionConfig_ == null
+ ? com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.getDefaultInstance()
+ : encryptionConfig_;
+ } else {
+ return encryptionConfigBuilder_.getMessage();
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder setEncryptionConfig(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig value) {
+ if (encryptionConfigBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ encryptionConfig_ = value;
+ onChanged();
+ } else {
+ encryptionConfigBuilder_.setMessage(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder setEncryptionConfig(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder builderForValue) {
+ if (encryptionConfigBuilder_ == null) {
+ encryptionConfig_ = builderForValue.build();
+ onChanged();
+ } else {
+ encryptionConfigBuilder_.setMessage(builderForValue.build());
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder mergeEncryptionConfig(
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig value) {
+ if (encryptionConfigBuilder_ == null) {
+ if (encryptionConfig_ != null) {
+ encryptionConfig_ =
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.newBuilder(
+ encryptionConfig_)
+ .mergeFrom(value)
+ .buildPartial();
+ } else {
+ encryptionConfig_ = value;
+ }
+ onChanged();
+ } else {
+ encryptionConfigBuilder_.mergeFrom(value);
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder clearEncryptionConfig() {
+ if (encryptionConfigBuilder_ == null) {
+ encryptionConfig_ = null;
+ onChanged();
+ } else {
+ encryptionConfig_ = null;
+ encryptionConfigBuilder_ = null;
+ }
+
+ return this;
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder
+ getEncryptionConfigBuilder() {
+
+ onChanged();
+ return getEncryptionConfigFieldBuilder().getBuilder();
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder
+ getEncryptionConfigOrBuilder() {
+ if (encryptionConfigBuilder_ != null) {
+ return encryptionConfigBuilder_.getMessageOrBuilder();
+ } else {
+ return encryptionConfig_ == null
+ ? com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.getDefaultInstance()
+ : encryptionConfig_;
+ }
+ }
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig,
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder,
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder>
+ getEncryptionConfigFieldBuilder() {
+ if (encryptionConfigBuilder_ == null) {
+ encryptionConfigBuilder_ =
+ new com.google.protobuf.SingleFieldBuilderV3<
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig,
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig.Builder,
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder>(
+ getEncryptionConfig(), getParentForChildren(), isClean());
+ encryptionConfig_ = null;
+ }
+ return encryptionConfigBuilder_;
+ }
+
+ @java.lang.Override
+ public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+ // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.CopyBackupRequest)
+ }
+
+ // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.CopyBackupRequest)
+ private static final com.google.spanner.admin.database.v1.CopyBackupRequest DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.CopyBackupRequest();
+ }
+
+ public static com.google.spanner.admin.database.v1.CopyBackupRequest getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser PARSER =
+ new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public CopyBackupRequest parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new CopyBackupRequest(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.spanner.admin.database.v1.CopyBackupRequest getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java
new file mode 100644
index 00000000000..5a8be05a57e
--- /dev/null
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2020 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
+ *
+ * https://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.
+ */
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: google/spanner/admin/database/v1/backup.proto
+
+package com.google.spanner.admin.database.v1;
+
+public interface CopyBackupRequestOrBuilder
+ extends
+ // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.CopyBackupRequest)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The parent.
+ */
+ java.lang.String getParent();
+ /**
+ *
+ *
+ *
+ * Required. The name of the destination instance that will contain the backup copy.
+ * Values are of the form: `projects/<project>/instances/<instance>`.
+ *
+ *
+ *
+ * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for parent.
+ */
+ com.google.protobuf.ByteString getParentBytes();
+
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The backupId.
+ */
+ java.lang.String getBackupId();
+ /**
+ *
+ *
+ *
+ * Required. The id of the backup copy.
+ * The `backup_id` appended to `parent` forms the full backup_uri of the form
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ * string backup_id = 2 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The bytes for backupId.
+ */
+ com.google.protobuf.ByteString getBackupIdBytes();
+
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The sourceBackup.
+ */
+ java.lang.String getSourceBackup();
+ /**
+ *
+ *
+ *
+ * Required. The source backup to be copied.
+ * The source backup needs to be in READY state for it to be copied.
+ * Once CopyBackup is in progress, the source backup cannot be deleted or
+ * cleaned up on expiration until CopyBackup is finished.
+ * Values are of the form:
+ * `projects/<project>/instances/<instance>/backups/<backup>`.
+ *
+ *
+ *
+ * string source_backup = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... }
+ *
+ *
+ * @return The bytes for sourceBackup.
+ */
+ com.google.protobuf.ByteString getSourceBackupBytes();
+
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return Whether the expireTime field is set.
+ */
+ boolean hasExpireTime();
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ *
+ * @return The expireTime.
+ */
+ com.google.protobuf.Timestamp getExpireTime();
+ /**
+ *
+ *
+ *
+ * Required. The expiration time of the backup in microsecond granularity.
+ * The expiration time must be at least 6 hours and at most 366 days
+ * from the `create_time` of the source backup. Once the `expire_time` has
+ * passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ * to free the resources used by the backup.
+ *
+ *
+ * .google.protobuf.Timestamp expire_time = 4 [(.google.api.field_behavior) = REQUIRED];
+ *
+ */
+ com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder();
+
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the encryptionConfig field is set.
+ */
+ boolean hasEncryptionConfig();
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The encryptionConfig.
+ */
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfig getEncryptionConfig();
+ /**
+ *
+ *
+ *
+ * Optional. The encryption configuration used to encrypt the backup. If this field is
+ * not specified, the backup will use the same
+ * encryption configuration as the source backup by default, namely
+ * [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ * `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ *
+ *
+ *
+ * .google.spanner.admin.database.v1.CopyBackupEncryptionConfig encryption_config = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ com.google.spanner.admin.database.v1.CopyBackupEncryptionConfigOrBuilder
+ getEncryptionConfigOrBuilder();
+}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java
index 44a4c392f2c..a28e28e18f7 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java
@@ -208,6 +208,8 @@ public com.google.protobuf.ByteString getParentBytes() {
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -216,8 +218,11 @@ public com.google.protobuf.ByteString getParentBytes() {
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -226,6 +231,29 @@ public com.google.protobuf.ByteString getParentBytes() {
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
@@ -262,6 +290,8 @@ public java.lang.String getFilter() {
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -270,8 +300,11 @@ public java.lang.String getFilter() {
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -280,6 +313,29 @@ public java.lang.String getFilter() {
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
@@ -884,6 +940,8 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -892,8 +950,11 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -902,6 +963,29 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
@@ -937,6 +1021,8 @@ public java.lang.String getFilter() {
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -945,8 +1031,11 @@ public java.lang.String getFilter() {
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -955,6 +1044,29 @@ public java.lang.String getFilter() {
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
@@ -990,6 +1102,8 @@ public com.google.protobuf.ByteString getFilterBytes() {
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -998,8 +1112,11 @@ public com.google.protobuf.ByteString getFilterBytes() {
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -1008,6 +1125,29 @@ public com.google.protobuf.ByteString getFilterBytes() {
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
@@ -1042,6 +1182,8 @@ public Builder setFilter(java.lang.String value) {
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -1050,8 +1192,11 @@ public Builder setFilter(java.lang.String value) {
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -1060,6 +1205,29 @@ public Builder setFilter(java.lang.String value) {
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
@@ -1090,6 +1258,8 @@ public Builder clearFilter() {
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -1098,8 +1268,11 @@ public Builder clearFilter() {
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -1108,6 +1281,29 @@ public Builder clearFilter() {
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
index 6d48d7f5f3f..4d862ccc097 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
@@ -72,6 +72,8 @@ public interface ListBackupOperationsRequestOrBuilder
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -80,8 +82,11 @@ public interface ListBackupOperationsRequestOrBuilder
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -90,6 +95,29 @@ public interface ListBackupOperationsRequestOrBuilder
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
@@ -115,6 +143,8 @@ public interface ListBackupOperationsRequestOrBuilder
* for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -123,8 +153,11 @@ public interface ListBackupOperationsRequestOrBuilder
* you can specify AND, OR, and NOT logic explicitly.
* Here are a few examples:
* * `done:true` - The operation is complete.
- * * `metadata.database:prod` - The database the backup was taken from has
- * a name containing the string "prod".
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `metadata.database:prod` - Returns operations where:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ * * The database the backup was taken from has a name containing the
+ * string "prod".
* * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
* `(metadata.name:howl) AND` \
* `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -133,6 +166,29 @@ public interface ListBackupOperationsRequestOrBuilder
* * The backup name contains the string "howl".
* * The operation started before 2018-03-28T14:50:00Z.
* * The operation resulted in an error.
+ * * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ * `(metadata.source_backup:test) AND` \
+ * `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ * * The source backup of the copied backup name contains the string
+ * "test".
+ * * The operation started before 2022-01-18T14:50:00Z.
+ * * The operation resulted in an error.
+ * * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ * `(metadata.database:test_db)) OR` \
+ * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ * AND` \
+ * `(metadata.source_backup:test_bkp)) AND` \
+ * `(error:*)` - Returns operations where:
+ * * The operation's metadata matches either of criteria:
+ * * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ * database the backup was taken from has name containing string
+ * "test_db"
+ * * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ * backup the backup was copied from has name containing string
+ * "test_bkp"
+ * * The operation resulted in an error.
*
*
* string filter = 2;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
index f9b74a69539..be50a78b625 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
@@ -135,11 +135,11 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -156,11 +156,11 @@ public java.util.List getOperationsList() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -178,11 +178,11 @@ public java.util.List getOperationsList() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -199,11 +199,11 @@ public int getOperationsCount() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -220,11 +220,11 @@ public com.google.longrunning.Operation getOperations(int index) {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -695,11 +695,11 @@ private void ensureOperationsIsMutable() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -719,11 +719,11 @@ public java.util.List getOperationsList() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -743,11 +743,11 @@ public int getOperationsCount() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -767,11 +767,11 @@ public com.google.longrunning.Operation getOperations(int index) {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -797,11 +797,11 @@ public Builder setOperations(int index, com.google.longrunning.Operation value)
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -825,11 +825,11 @@ public Builder setOperations(
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -855,11 +855,11 @@ public Builder addOperations(com.google.longrunning.Operation value) {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -885,11 +885,11 @@ public Builder addOperations(int index, com.google.longrunning.Operation value)
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -912,11 +912,11 @@ public Builder addOperations(com.google.longrunning.Operation.Builder builderFor
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -940,11 +940,11 @@ public Builder addOperations(
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -968,11 +968,11 @@ public Builder addAllOperations(
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -995,11 +995,11 @@ public Builder clearOperations() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -1022,11 +1022,11 @@ public Builder removeOperations(int index) {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -1042,11 +1042,11 @@ public com.google.longrunning.Operation.Builder getOperationsBuilder(int index)
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -1066,11 +1066,11 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -1091,11 +1091,11 @@ public com.google.longrunning.OperationOrBuilder getOperationsOrBuilder(int inde
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -1112,11 +1112,11 @@ public com.google.longrunning.Operation.Builder addOperationsBuilder() {
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -1133,11 +1133,11 @@ public com.google.longrunning.Operation.Builder addOperationsBuilder(int index)
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java
index 05c3031f8d7..f170588152b 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java
@@ -29,11 +29,11 @@ public interface ListBackupOperationsResponseOrBuilder
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -47,11 +47,11 @@ public interface ListBackupOperationsResponseOrBuilder
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -65,11 +65,11 @@ public interface ListBackupOperationsResponseOrBuilder
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -83,11 +83,11 @@ public interface ListBackupOperationsResponseOrBuilder
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
@@ -101,11 +101,11 @@ public interface ListBackupOperationsResponseOrBuilder
*
* The list of matching backup [long-running
* operations][google.longrunning.Operation]. Each operation's name will be
- * prefixed by the backup's name and the operation's
- * [metadata][google.longrunning.Operation.metadata] will be of type
- * [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- * pending or have completed/failed/canceled within the last 7 days.
- * Operations returned are ordered by
+ * prefixed by the backup's name. The operation's
+ * [metadata][google.longrunning.Operation.metadata] field type
+ * `metadata.type_url` describes the type of the metadata. Operations returned
+ * include those that are pending or have completed/failed/canceled within the
+ * last 7 days. Operations returned are ordered by
* `operation.metadata.value.progress.start_time` in descending order starting
* from the most recently started operation.
*
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
index ed376a6f05d..da529706e56 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
@@ -208,6 +208,8 @@ public com.google.protobuf.ByteString getParentBytes() {
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -264,6 +266,8 @@ public java.lang.String getFilter() {
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -892,6 +896,8 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -947,6 +953,8 @@ public java.lang.String getFilter() {
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -1002,6 +1010,8 @@ public com.google.protobuf.ByteString getFilterBytes() {
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -1056,6 +1066,8 @@ public Builder setFilter(java.lang.String value) {
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -1106,6 +1118,8 @@ public Builder clearFilter() {
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
index 38eb5693e1a..e020307e57f 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
@@ -72,6 +72,8 @@ public interface ListDatabaseOperationsRequestOrBuilder
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
@@ -117,6 +119,8 @@ public interface ListDatabaseOperationsRequestOrBuilder
* for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
* `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
* * `metadata.<field_name>` - any field in metadata.value.
+ * `metadata.@type` must be specified first, if filtering on metadata
+ * fields.
* * `error` - Error associated with the long-running operation.
* * `response.@type` - the type of response.
* * `response.<field_name>` - any field in response.value.
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
index 1acad6985e1..8aa471048a2 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
@@ -116,214 +116,221 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "source.proto\032\036google/iam/v1/iam_policy.p"
+ "roto\032\032google/iam/v1/policy.proto\032#google"
+ "/longrunning/operations.proto\032\033google/pr"
- + "otobuf/empty.proto\032 google/protobuf/fiel"
- + "d_mask.proto\032\037google/protobuf/timestamp."
- + "proto\032-google/spanner/admin/database/v1/"
- + "backup.proto\032-google/spanner/admin/datab"
- + "ase/v1/common.proto\"\253\001\n\013RestoreInfo\022H\n\013s"
- + "ource_type\030\001 \001(\01623.google.spanner.admin."
+ + "otobuf/empty.proto\032\037google/protobuf/time"
+ + "stamp.proto\032-google/spanner/admin/databa"
+ + "se/v1/backup.proto\032-google/spanner/admin"
+ + "/database/v1/common.proto\"\253\001\n\013RestoreInf"
+ + "o\022H\n\013source_type\030\001 \001(\01623.google.spanner."
+ + "admin.database.v1.RestoreSourceType\022C\n\013b"
+ + "ackup_info\030\002 \001(\0132,.google.spanner.admin."
+ + "database.v1.BackupInfoH\000B\r\n\013source_info\""
+ + "\220\006\n\010Database\022\021\n\004name\030\001 \001(\tB\003\340A\002\022D\n\005state"
+ + "\030\002 \001(\01620.google.spanner.admin.database.v"
+ + "1.Database.StateB\003\340A\003\0224\n\013create_time\030\003 \001"
+ + "(\0132\032.google.protobuf.TimestampB\003\340A\003\022H\n\014r"
+ + "estore_info\030\004 \001(\0132-.google.spanner.admin"
+ + ".database.v1.RestoreInfoB\003\340A\003\022R\n\021encrypt"
+ + "ion_config\030\005 \001(\01322.google.spanner.admin."
+ + "database.v1.EncryptionConfigB\003\340A\003\022N\n\017enc"
+ + "ryption_info\030\010 \003(\01320.google.spanner.admi"
+ + "n.database.v1.EncryptionInfoB\003\340A\003\022%\n\030ver"
+ + "sion_retention_period\030\006 \001(\tB\003\340A\003\022>\n\025earl"
+ + "iest_version_time\030\007 \001(\0132\032.google.protobu"
+ + "f.TimestampB\003\340A\003\022\033\n\016default_leader\030\t \001(\t"
+ + "B\003\340A\003\022P\n\020database_dialect\030\n \001(\01621.google"
+ + ".spanner.admin.database.v1.DatabaseDiale"
+ + "ctB\003\340A\003\"M\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022"
+ + "\014\n\010CREATING\020\001\022\t\n\005READY\020\002\022\024\n\020READY_OPTIMI"
+ + "ZING\020\003:b\352A_\n\037spanner.googleapis.com/Data"
+ + "base\022\n\025earliest_v"
- + "ersion_time\030\007 \001(\0132\032.google.protobuf.Time"
- + "stampB\003\340A\003\022\033\n\016default_leader\030\t \001(\tB\003\340A\003\022"
- + "P\n\020database_dialect\030\n \001(\01621.google.spann"
- + "er.admin.database.v1.DatabaseDialectB\003\340A"
- + "\003\"M\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CRE"
- + "ATING\020\001\022\t\n\005READY\020\002\022\024\n\020READY_OPTIMIZING\020\003"
- + ":b\352A_\n\037spanner.googleapis.com/Database\022<"
- + "projects/{project}/instances/{instance}/"
- + "databases/{database}\"v\n\024ListDatabasesReq"
- + "uest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.go"
- + "ogleapis.com/Instance\022\021\n\tpage_size\030\003 \001(\005"
- + "\022\022\n\npage_token\030\004 \001(\t\"o\n\025ListDatabasesRes"
- + "ponse\022=\n\tdatabases\030\001 \003(\0132*.google.spanne"
- + "r.admin.database.v1.Database\022\027\n\017next_pag"
- + "e_token\030\002 \001(\t\"\264\002\n\025CreateDatabaseRequest\022"
- + "7\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googlea"
- + "pis.com/Instance\022\035\n\020create_statement\030\002 \001"
- + "(\tB\003\340A\002\022\035\n\020extra_statements\030\003 \003(\tB\003\340A\001\022R"
- + "\n\021encryption_config\030\004 \001(\01322.google.spann"
- + "er.admin.database.v1.EncryptionConfigB\003\340"
- + "A\001\022P\n\020database_dialect\030\005 \001(\01621.google.sp"
- + "anner.admin.database.v1.DatabaseDialectB"
- + "\003\340A\001\"P\n\026CreateDatabaseMetadata\0226\n\010databa"
- + "se\030\001 \001(\tB$\372A!\n\037spanner.googleapis.com/Da"
- + "tabase\"K\n\022GetDatabaseRequest\0225\n\004name\030\001 \001"
- + "(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Datab"
- + "ase\"\204\001\n\030UpdateDatabaseDdlRequest\0229\n\010data"
- + "base\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.c"
- + "om/Database\022\027\n\nstatements\030\002 \003(\tB\003\340A\002\022\024\n\014"
- + "operation_id\030\003 \001(\t\"\375\001\n\031UpdateDatabaseDdl"
- + "Metadata\0226\n\010database\030\001 \001(\tB$\372A!\n\037spanner"
- + ".googleapis.com/Database\022\022\n\nstatements\030\002"
- + " \003(\t\0225\n\021commit_timestamps\030\003 \003(\0132\032.google"
- + ".protobuf.Timestamp\022\026\n\tthrottled\030\004 \001(\010B\003"
- + "\340A\003\022E\n\010progress\030\005 \003(\01323.google.spanner.a"
- + "dmin.database.v1.OperationProgress\"P\n\023Dr"
- + "opDatabaseRequest\0229\n\010database\030\001 \001(\tB\'\340A\002"
- + "\372A!\n\037spanner.googleapis.com/Database\"R\n\025"
- + "GetDatabaseDdlRequest\0229\n\010database\030\001 \001(\tB"
- + "\'\340A\002\372A!\n\037spanner.googleapis.com/Database"
- + "\",\n\026GetDatabaseDdlResponse\022\022\n\nstatements"
- + "\030\001 \003(\t\"\217\001\n\035ListDatabaseOperationsRequest"
- + "\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.google"
- + "apis.com/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpag"
- + "e_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"l\n\036List"
- + "DatabaseOperationsResponse\0221\n\noperations"
- + "\030\001 \003(\0132\035.google.longrunning.Operation\022\027\n"
- + "\017next_page_token\030\002 \001(\t\"\216\002\n\026RestoreDataba"
- + "seRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spann"
- + "er.googleapis.com/Instance\022\030\n\013database_i"
- + "d\030\002 \001(\tB\003\340A\002\0224\n\006backup\030\003 \001(\tB\"\372A\037\n\035spann"
- + "er.googleapis.com/BackupH\000\022a\n\021encryption"
- + "_config\030\004 \001(\0132A.google.spanner.admin.dat"
- + "abase.v1.RestoreDatabaseEncryptionConfig"
- + "B\003\340A\001B\010\n\006source\"\363\002\n\037RestoreDatabaseEncry"
- + "ptionConfig\022n\n\017encryption_type\030\001 \001(\0162P.g"
- + "oogle.spanner.admin.database.v1.RestoreD"
- + "atabaseEncryptionConfig.EncryptionTypeB\003"
- + "\340A\002\022?\n\014kms_key_name\030\002 \001(\tB)\340A\001\372A#\n!cloud"
- + "kms.googleapis.com/CryptoKey\"\236\001\n\016Encrypt"
- + "ionType\022\037\n\033ENCRYPTION_TYPE_UNSPECIFIED\020\000"
- + "\022+\n\'USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPT"
- + "ION\020\001\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033"
- + "CUSTOMER_MANAGED_ENCRYPTION\020\003\"\215\003\n\027Restor"
- + "eDatabaseMetadata\0222\n\004name\030\001 \001(\tB$\372A!\n\037sp"
- + "anner.googleapis.com/Database\022H\n\013source_"
- + "type\030\002 \001(\01623.google.spanner.admin.databa"
- + "se.v1.RestoreSourceType\022C\n\013backup_info\030\003"
- + " \001(\0132,.google.spanner.admin.database.v1."
- + "BackupInfoH\000\022E\n\010progress\030\004 \001(\01323.google."
- + "spanner.admin.database.v1.OperationProgr"
- + "ess\022/\n\013cancel_time\030\005 \001(\0132\032.google.protob"
- + "uf.Timestamp\022(\n optimize_database_operat"
- + "ion_name\030\006 \001(\tB\r\n\013source_info\"\235\001\n Optimi"
- + "zeRestoredDatabaseMetadata\0222\n\004name\030\001 \001(\t"
- + "B$\372A!\n\037spanner.googleapis.com/Database\022E"
- + "\n\010progress\030\002 \001(\01323.google.spanner.admin."
- + "database.v1.OperationProgress*5\n\021Restore"
- + "SourceType\022\024\n\020TYPE_UNSPECIFIED\020\000\022\n\n\006BACK"
- + "UP\020\0012\223\037\n\rDatabaseAdmin\022\300\001\n\rListDatabases"
- + "\0226.google.spanner.admin.database.v1.List"
- + "DatabasesRequest\0327.google.spanner.admin."
- + "database.v1.ListDatabasesResponse\">\202\323\344\223\002"
- + "/\022-/v1/{parent=projects/*/instances/*}/d"
- + "atabases\332A\006parent\022\244\002\n\016CreateDatabase\0227.g"
- + "oogle.spanner.admin.database.v1.CreateDa"
- + "tabaseRequest\032\035.google.longrunning.Opera"
- + "tion\"\271\001\202\323\344\223\0022\"-/v1/{parent=projects/*/in"
- + "stances/*}/databases:\001*\332A\027parent,create_"
- + "statement\312Ad\n)google.spanner.admin.datab"
- + "ase.v1.Database\0227google.spanner.admin.da"
- + "tabase.v1.CreateDatabaseMetadata\022\255\001\n\013Get"
- + "Database\0224.google.spanner.admin.database"
- + ".v1.GetDatabaseRequest\032*.google.spanner."
- + "admin.database.v1.Database\"<\202\323\344\223\002/\022-/v1/"
- + "{name=projects/*/instances/*/databases/*"
- + "}\332A\004name\022\235\002\n\021UpdateDatabaseDdl\022:.google."
- + "spanner.admin.database.v1.UpdateDatabase"
- + "DdlRequest\032\035.google.longrunning.Operatio"
- + "n\"\254\001\202\323\344\223\002:25/v1/{database=projects/*/ins"
- + "tances/*/databases/*}/ddl:\001*\332A\023database,"
- + "statements\312AS\n\025google.protobuf.Empty\022:go"
- + "ogle.spanner.admin.database.v1.UpdateDat"
- + "abaseDdlMetadata\022\243\001\n\014DropDatabase\0225.goog"
- + "le.spanner.admin.database.v1.DropDatabas"
- + "eRequest\032\026.google.protobuf.Empty\"D\202\323\344\223\0023"
- + "*1/v1/{database=projects/*/instances/*/d"
- + "atabases/*}\332A\010database\022\315\001\n\016GetDatabaseDd"
- + "l\0227.google.spanner.admin.database.v1.Get"
- + "DatabaseDdlRequest\0328.google.spanner.admi"
- + "n.database.v1.GetDatabaseDdlResponse\"H\202\323"
- + "\344\223\0027\0225/v1/{database=projects/*/instances"
- + "/*/databases/*}/ddl\332A\010database\022\353\001\n\014SetIa"
- + "mPolicy\022\".google.iam.v1.SetIamPolicyRequ"
- + "est\032\025.google.iam.v1.Policy\"\237\001\202\323\344\223\002\206\001\">/v"
- + "1/{resource=projects/*/instances/*/datab"
- + "ases/*}:setIamPolicy:\001*ZA\"/v1/"
- + "{resource=projects/*/instances/*/databas"
- + "es/*}:getIamPolicy:\001*ZA\".google.spanner.admin"
- + ".database.v1.ListBackupOperationsRespons"
- + "e\"E\202\323\344\223\0026\0224/v1/{parent=projects/*/instan"
- + "ces/*}/backupOperations\332A\006parent\032x\312A\026spa"
- + "nner.googleapis.com\322A\\https://www.google"
- + "apis.com/auth/cloud-platform,https://www"
- + ".googleapis.com/auth/spanner.adminB\332\002\n$c"
- + "om.google.spanner.admin.database.v1B\031Spa"
- + "nnerDatabaseAdminProtoP\001ZHgoogle.golang."
- + "org/genproto/googleapis/spanner/admin/da"
- + "tabase/v1;database\252\002&Google.Cloud.Spanne"
- + "r.Admin.Database.V1\312\002&Google\\Cloud\\Spann"
- + "er\\Admin\\Database\\V1\352\002+Google::Cloud::Sp"
- + "anner::Admin::Database::V1\352AJ\n\037spanner.g"
- + "oogleapis.com/Instance\022\'projects/{projec"
- + "t}/instances/{instance}b\006proto3"
+ + "info\030\003 \001(\0132,.google.spanner.admin.databa"
+ + "se.v1.BackupInfoH\000\022E\n\010progress\030\004 \001(\01323.g"
+ + "oogle.spanner.admin.database.v1.Operatio"
+ + "nProgress\022/\n\013cancel_time\030\005 \001(\0132\032.google."
+ + "protobuf.Timestamp\022(\n optimize_database_"
+ + "operation_name\030\006 \001(\tB\r\n\013source_info\"\235\001\n "
+ + "OptimizeRestoredDatabaseMetadata\0222\n\004name"
+ + "\030\001 \001(\tB$\372A!\n\037spanner.googleapis.com/Data"
+ + "base\022E\n\010progress\030\002 \001(\01323.google.spanner."
+ + "admin.database.v1.OperationProgress*5\n\021R"
+ + "estoreSourceType\022\024\n\020TYPE_UNSPECIFIED\020\000\022\n"
+ + "\n\006BACKUP\020\0012\302!\n\rDatabaseAdmin\022\300\001\n\rListDat"
+ + "abases\0226.google.spanner.admin.database.v"
+ + "1.ListDatabasesRequest\0327.google.spanner."
+ + "admin.database.v1.ListDatabasesResponse\""
+ + ">\202\323\344\223\002/\022-/v1/{parent=projects/*/instance"
+ + "s/*}/databases\332A\006parent\022\244\002\n\016CreateDataba"
+ + "se\0227.google.spanner.admin.database.v1.Cr"
+ + "eateDatabaseRequest\032\035.google.longrunning"
+ + ".Operation\"\271\001\202\323\344\223\0022\"-/v1/{parent=project"
+ + "s/*/instances/*}/databases:\001*\332A\027parent,c"
+ + "reate_statement\312Ad\n)google.spanner.admin"
+ + ".database.v1.Database\0227google.spanner.ad"
+ + "min.database.v1.CreateDatabaseMetadata\022\255"
+ + "\001\n\013GetDatabase\0224.google.spanner.admin.da"
+ + "tabase.v1.GetDatabaseRequest\032*.google.sp"
+ + "anner.admin.database.v1.Database\"<\202\323\344\223\002/"
+ + "\022-/v1/{name=projects/*/instances/*/datab"
+ + "ases/*}\332A\004name\022\235\002\n\021UpdateDatabaseDdl\022:.g"
+ + "oogle.spanner.admin.database.v1.UpdateDa"
+ + "tabaseDdlRequest\032\035.google.longrunning.Op"
+ + "eration\"\254\001\202\323\344\223\002:25/v1/{database=projects"
+ + "/*/instances/*/databases/*}/ddl:\001*\332A\023dat"
+ + "abase,statements\312AS\n\025google.protobuf.Emp"
+ + "ty\022:google.spanner.admin.database.v1.Upd"
+ + "ateDatabaseDdlMetadata\022\243\001\n\014DropDatabase\022"
+ + "5.google.spanner.admin.database.v1.DropD"
+ + "atabaseRequest\032\026.google.protobuf.Empty\"D"
+ + "\202\323\344\223\0023*1/v1/{database=projects/*/instanc"
+ + "es/*/databases/*}\332A\010database\022\315\001\n\016GetData"
+ + "baseDdl\0227.google.spanner.admin.database."
+ + "v1.GetDatabaseDdlRequest\0328.google.spanne"
+ + "r.admin.database.v1.GetDatabaseDdlRespon"
+ + "se\"H\202\323\344\223\0027\0225/v1/{database=projects/*/ins"
+ + "tances/*/databases/*}/ddl\332A\010database\022\353\001\n"
+ + "\014SetIamPolicy\022\".google.iam.v1.SetIamPoli"
+ + "cyRequest\032\025.google.iam.v1.Policy\"\237\001\202\323\344\223\002"
+ + "\206\001\">/v1/{resource=projects/*/instances/*"
+ + "/databases/*}:setIamPolicy:\001*ZA\"/v1/{resource=projects/*/instances/*/d"
+ + "atabases/*}:getIamPolicy:\001*ZA\".google.spanner.admin.database.v"
+ + "1.ListBackupOperationsResponse\"E\202\323\344\223\0026\0224"
+ + "/v1/{parent=projects/*/instances/*}/back"
+ + "upOperations\332A\006parent\032x\312A\026spanner.google"
+ + "apis.com\322A\\https://www.googleapis.com/au"
+ + "th/cloud-platform,https://www.googleapis"
+ + ".com/auth/spanner.adminB\332\002\n$com.google.s"
+ + "panner.admin.database.v1B\031SpannerDatabas"
+ + "eAdminProtoP\001ZHgoogle.golang.org/genprot"
+ + "o/googleapis/spanner/admin/database/v1;d"
+ + "atabase\252\002&Google.Cloud.Spanner.Admin.Dat"
+ + "abase.V1\312\002&Google\\Cloud\\Spanner\\Admin\\Da"
+ + "tabase\\V1\352\002+Google::Cloud::Spanner::Admi"
+ + "n::Database::V1\352AJ\n\037spanner.googleapis.c"
+ + "om/Instance\022\'projects/{project}/instance"
+ + "s/{instance}b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -337,7 +344,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
com.google.iam.v1.PolicyProto.getDescriptor(),
com.google.longrunning.OperationsProto.getDescriptor(),
com.google.protobuf.EmptyProto.getDescriptor(),
- com.google.protobuf.FieldMaskProto.getDescriptor(),
com.google.protobuf.TimestampProto.getDescriptor(),
com.google.spanner.admin.database.v1.BackupProto.getDescriptor(),
com.google.spanner.admin.database.v1.CommonProto.getDescriptor(),
@@ -522,7 +528,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
com.google.iam.v1.PolicyProto.getDescriptor();
com.google.longrunning.OperationsProto.getDescriptor();
com.google.protobuf.EmptyProto.getDescriptor();
- com.google.protobuf.FieldMaskProto.getDescriptor();
com.google.protobuf.TimestampProto.getDescriptor();
com.google.spanner.admin.database.v1.BackupProto.getDescriptor();
com.google.spanner.admin.database.v1.CommonProto.getDescriptor();
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto
index 1e9ce30058a..5e019543eb9 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto
@@ -1,4 +1,4 @@
-// Copyright 2021 Google LLC
+// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@ syntax = "proto3";
package google.spanner.admin.database.v1;
-import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/longrunning/operations.proto";
@@ -120,6 +119,27 @@ message Backup {
// Output only. The database dialect information for the backup.
DatabaseDialect database_dialect = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+ // Output only. The names of the destination backups being created by copying
+ // this source backup. The backup names are of the form
+ // `projects//instances//backups/`.
+ // Referencing backups may exist in different instances. The existence of
+ // any referencing backup prevents the backup from being deleted. When the
+ // copy operation is done (either successfully completed or cancelled or the
+ // destination backup is deleted), the reference to the backup is removed.
+ repeated string referencing_backups = 11 [
+ (google.api.field_behavior) = OUTPUT_ONLY,
+ (google.api.resource_reference) = {
+ type: "spanner.googleapis.com/Backup"
+ }
+ ];
+
+ // Output only. The max allowed expiration time of the backup, with
+ // microseconds granularity. A backup's expiration time can be configured in
+ // multiple APIs: CreateBackup, UpdateBackup, CopyBackup. When updating or
+ // copying an existing backup, the expiration time specified must be
+ // less than `Backup.max_expire_time`.
+ google.protobuf.Timestamp max_expire_time = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// The request for [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup].
@@ -185,6 +205,86 @@ message CreateBackupMetadata {
google.protobuf.Timestamp cancel_time = 4;
}
+// The request for [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup].
+message CopyBackupRequest {
+ // Required. The name of the destination instance that will contain the backup copy.
+ // Values are of the form: `projects//instances/`.
+ string parent = 1 [
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.resource_reference) = {
+ type: "spanner.googleapis.com/Instance"
+ }
+ ];
+
+ // Required. The id of the backup copy.
+ // The `backup_id` appended to `parent` forms the full backup_uri of the form
+ // `projects//instances//backups/`.
+ string backup_id = 2 [(google.api.field_behavior) = REQUIRED];
+
+ // Required. The source backup to be copied.
+ // The source backup needs to be in READY state for it to be copied.
+ // Once CopyBackup is in progress, the source backup cannot be deleted or
+ // cleaned up on expiration until CopyBackup is finished.
+ // Values are of the form:
+ // `projects//instances//backups/`.
+ string source_backup = 3 [
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.resource_reference) = {
+ type: "spanner.googleapis.com/Backup"
+ }
+ ];
+
+ // Required. The expiration time of the backup in microsecond granularity.
+ // The expiration time must be at least 6 hours and at most 366 days
+ // from the `create_time` of the source backup. Once the `expire_time` has
+ // passed, the backup is eligible to be automatically deleted by Cloud Spanner
+ // to free the resources used by the backup.
+ google.protobuf.Timestamp expire_time = 4 [(google.api.field_behavior) = REQUIRED];
+
+ // Optional. The encryption configuration used to encrypt the backup. If this field is
+ // not specified, the backup will use the same
+ // encryption configuration as the source backup by default, namely
+ // [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] =
+ // `USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION`.
+ CopyBackupEncryptionConfig encryption_config = 5 [(google.api.field_behavior) = OPTIONAL];
+}
+
+// Metadata type for the google.longrunning.Operation returned by
+// [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup].
+message CopyBackupMetadata {
+ // The name of the backup being created through the copy operation.
+ // Values are of the form
+ // `projects//instances//backups/`.
+ string name = 1 [(google.api.resource_reference) = {
+ type: "spanner.googleapis.com/Backup"
+ }];
+
+ // The name of the source backup that is being copied.
+ // Values are of the form
+ // `projects//instances//backups/`.
+ string source_backup = 2 [(google.api.resource_reference) = {
+ type: "spanner.googleapis.com/Backup"
+ }];
+
+ // The progress of the
+ // [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup] operation.
+ OperationProgress progress = 3;
+
+ // The time at which cancellation of CopyBackup operation was received.
+ // [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
+ // starts asynchronous cancellation on a long-running operation. The server
+ // makes a best effort to cancel the operation, but success is not guaranteed.
+ // Clients can use
+ // [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ // other methods to check whether the cancellation succeeded or whether the
+ // operation completed despite cancellation. On successful cancellation,
+ // the operation is not deleted; instead, it becomes an operation with
+ // an [Operation.error][google.longrunning.Operation.error] value with a
+ // [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ // corresponding to `Code.CANCELLED`.
+ google.protobuf.Timestamp cancel_time = 4;
+}
+
// The request for [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup].
message UpdateBackupRequest {
// Required. The backup to update. `backup.name`, and the fields to be updated
@@ -327,6 +427,8 @@ message ListBackupOperationsRequest {
// for [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] is
// `type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata`.
// * `metadata.` - any field in metadata.value.
+ // `metadata.@type` must be specified first if filtering on metadata
+ // fields.
// * `error` - Error associated with the long-running operation.
// * `response.@type` - the type of response.
// * `response.` - any field in response.value.
@@ -338,8 +440,11 @@ message ListBackupOperationsRequest {
// Here are a few examples:
//
// * `done:true` - The operation is complete.
- // * `metadata.database:prod` - The database the backup was taken from has
- // a name containing the string "prod".
+ // * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ // `metadata.database:prod` - Returns operations where:
+ // * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata].
+ // * The database the backup was taken from has a name containing the
+ // string "prod".
// * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
// `(metadata.name:howl) AND` \
// `(metadata.progress.start_time < \"2018-03-28T14:50:00Z\") AND` \
@@ -348,6 +453,29 @@ message ListBackupOperationsRequest {
// * The backup name contains the string "howl".
// * The operation started before 2018-03-28T14:50:00Z.
// * The operation resulted in an error.
+ // * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND` \
+ // `(metadata.source_backup:test) AND` \
+ // `(metadata.progress.start_time < \"2022-01-18T14:50:00Z\") AND` \
+ // `(error:*)` - Returns operations where:
+ // * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ // * The source backup of the copied backup name contains the string
+ // "test".
+ // * The operation started before 2022-01-18T14:50:00Z.
+ // * The operation resulted in an error.
+ // * `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
+ // `(metadata.database:test_db)) OR` \
+ // `((metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata)
+ // AND` \
+ // `(metadata.source_backup:test_bkp)) AND` \
+ // `(error:*)` - Returns operations where:
+ // * The operation's metadata matches either of criteria:
+ // * The operation's metadata type is [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata] AND the
+ // database the backup was taken from has name containing string
+ // "test_db"
+ // * The operation's metadata type is [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata] AND the
+ // backup the backup was copied from has name containing string
+ // "test_bkp"
+ // * The operation resulted in an error.
string filter = 2;
// Number of operations to be returned in the response. If 0 or
@@ -366,11 +494,11 @@ message ListBackupOperationsRequest {
message ListBackupOperationsResponse {
// The list of matching backup [long-running
// operations][google.longrunning.Operation]. Each operation's name will be
- // prefixed by the backup's name and the operation's
- // [metadata][google.longrunning.Operation.metadata] will be of type
- // [CreateBackupMetadata][google.spanner.admin.database.v1.CreateBackupMetadata]. Operations returned include those that are
- // pending or have completed/failed/canceled within the last 7 days.
- // Operations returned are ordered by
+ // prefixed by the backup's name. The operation's
+ // [metadata][google.longrunning.Operation.metadata] field type
+ // `metadata.type_url` describes the type of the metadata. Operations returned
+ // include those that are pending or have completed/failed/canceled within the
+ // last 7 days. Operations returned are ordered by
// `operation.metadata.value.progress.start_time` in descending order starting
// from the most recently started operation.
repeated google.longrunning.Operation operations = 1;
@@ -442,3 +570,40 @@ message CreateBackupEncryptionConfig {
}
];
}
+
+// Encryption configuration for the copied backup.
+message CopyBackupEncryptionConfig {
+ // Encryption types for the backup.
+ enum EncryptionType {
+ // Unspecified. Do not use.
+ ENCRYPTION_TYPE_UNSPECIFIED = 0;
+
+ // This is the default option for [CopyBackup][google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup]
+ // when [encryption_config][google.spanner.admin.database.v1.CopyBackupEncryptionConfig] is not specified.
+ // For example, if the source backup is using `Customer_Managed_Encryption`,
+ // the backup will be using the same Cloud KMS key as the source backup.
+ USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION = 1;
+
+ // Use Google default encryption.
+ GOOGLE_DEFAULT_ENCRYPTION = 2;
+
+ // Use customer managed encryption. If specified, `kms_key_name`
+ // must contain a valid Cloud KMS key.
+ CUSTOMER_MANAGED_ENCRYPTION = 3;
+ }
+
+ // Required. The encryption type of the backup.
+ EncryptionType encryption_type = 1 [(google.api.field_behavior) = REQUIRED];
+
+ // Optional. The Cloud KMS key that will be used to protect the backup.
+ // This field should be set only when
+ // [encryption_type][google.spanner.admin.database.v1.CopyBackupEncryptionConfig.encryption_type] is
+ // `CUSTOMER_MANAGED_ENCRYPTION`. Values are of the form
+ // `projects//locations//keyRings//cryptoKeys/`.
+ string kms_key_name = 2 [
+ (google.api.field_behavior) = OPTIONAL,
+ (google.api.resource_reference) = {
+ type: "cloudkms.googleapis.com/CryptoKey"
+ }
+ ];
+}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto
index 739a486458e..720ebb95dbc 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto
@@ -1,4 +1,4 @@
-// Copyright 2021 Google LLC
+// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@ syntax = "proto3";
package google.spanner.admin.database.v1;
-import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/timestamp.proto";
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
index 89d582412db..38023e0721c 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
@@ -1,4 +1,4 @@
-// Copyright 2021 Google LLC
+// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -24,7 +24,6 @@ import "google/iam/v1/iam_policy.proto";
import "google/iam/v1/policy.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
-import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
import "google/spanner/admin/database/v1/backup.proto";
import "google/spanner/admin/database/v1/common.proto";
@@ -216,6 +215,30 @@ service DatabaseAdmin {
};
}
+ // Starts copying a Cloud Spanner Backup.
+ // The returned backup [long-running operation][google.longrunning.Operation]
+ // will have a name of the format
+ // `projects//instances//backups//operations/`
+ // and can be used to track copying of the backup. The operation is associated
+ // with the destination backup.
+ // The [metadata][google.longrunning.Operation.metadata] field type is
+ // [CopyBackupMetadata][google.spanner.admin.database.v1.CopyBackupMetadata].
+ // The [response][google.longrunning.Operation.response] field type is
+ // [Backup][google.spanner.admin.database.v1.Backup], if successful. Cancelling the returned operation will stop the
+ // copying and delete the backup.
+ // Concurrent CopyBackup requests can run on the same source backup.
+ rpc CopyBackup(CopyBackupRequest) returns (google.longrunning.Operation) {
+ option (google.api.http) = {
+ post: "/v1/{parent=projects/*/instances/*}/backups:copy"
+ body: "*"
+ };
+ option (google.api.method_signature) = "parent,backup_id,source_backup,expire_time";
+ option (google.longrunning.operation_info) = {
+ response_type: "google.spanner.admin.database.v1.Backup"
+ metadata_type: "google.spanner.admin.database.v1.CopyBackupMetadata"
+ };
+ }
+
// Gets metadata on a pending or completed [Backup][google.spanner.admin.database.v1.Backup].
rpc GetBackup(GetBackupRequest) returns (Backup) {
option (google.api.http) = {
@@ -645,6 +668,8 @@ message ListDatabaseOperationsRequest {
// for [RestoreDatabaseMetadata][google.spanner.admin.database.v1.RestoreDatabaseMetadata] is
// `type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata`.
// * `metadata.` - any field in metadata.value.
+ // `metadata.@type` must be specified first, if filtering on metadata
+ // fields.
// * `error` - Error associated with the long-running operation.
// * `response.@type` - the type of response.
// * `response.` - any field in response.value.
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index a7427b26a85..fef4b58ca4d 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.21.2
+ 6.22.0
proto-google-cloud-spanner-admin-instance-v1
PROTO library for proto-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.21.2
+ 6.22.0
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index a6358c7dbd9..7f0e1bf8ef5 100644
--- a/proto-google-cloud-spanner-v1/pom.xml
+++ b/proto-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.21.2
+ 6.22.0
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.21.2
+ 6.22.0
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java
index e093354a31b..8aa46a48cd7 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java
@@ -45,26 +45,22 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
static {
java.lang.String[] descriptorData = {
"\n\'google/spanner/v1/commit_response.prot"
- + "o\022\021google.spanner.v1\032\034google/api/annotat"
- + "ions.proto\032\036google/protobuf/duration.pro"
- + "to\032\037google/protobuf/timestamp.proto\"\262\001\n\016"
- + "CommitResponse\0224\n\020commit_timestamp\030\001 \001(\013"
- + "2\032.google.protobuf.Timestamp\022C\n\014commit_s"
- + "tats\030\002 \001(\0132-.google.spanner.v1.CommitRes"
- + "ponse.CommitStats\032%\n\013CommitStats\022\026\n\016muta"
- + "tion_count\030\001 \001(\003B\271\001\n\025com.google.spanner."
- + "v1B\023CommitResponseProtoP\001Z8google.golang"
- + ".org/genproto/googleapis/spanner/v1;span"
- + "ner\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\C"
- + "loud\\Spanner\\V1\352\002\032Google::Cloud::Spanner"
- + "::V1b\006proto3"
+ + "o\022\021google.spanner.v1\032\037google/protobuf/ti"
+ + "mestamp.proto\"\262\001\n\016CommitResponse\0224\n\020comm"
+ + "it_timestamp\030\001 \001(\0132\032.google.protobuf.Tim"
+ + "estamp\022C\n\014commit_stats\030\002 \001(\0132-.google.sp"
+ + "anner.v1.CommitResponse.CommitStats\032%\n\013C"
+ + "ommitStats\022\026\n\016mutation_count\030\001 \001(\003B\271\001\n\025c"
+ + "om.google.spanner.v1B\023CommitResponseProt"
+ + "oP\001Z8google.golang.org/genproto/googleap"
+ + "is/spanner/v1;spanner\252\002\027Google.Cloud.Spa"
+ + "nner.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Goog"
+ + "le::Cloud::Spanner::V1b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
- com.google.protobuf.DurationProto.getDescriptor(),
com.google.protobuf.TimestampProto.getDescriptor(),
});
internal_static_google_spanner_v1_CommitResponse_descriptor =
@@ -83,8 +79,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new java.lang.String[] {
"MutationCount",
});
- com.google.api.AnnotationsProto.getDescriptor();
- com.google.protobuf.DurationProto.getDescriptor();
com.google.protobuf.TimestampProto.getDescriptor();
}
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java
index 6c95c92573d..b79f3d8169b 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java
@@ -45,28 +45,26 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
static {
java.lang.String[] descriptorData = {
"\n\034google/spanner/v1/keys.proto\022\021google.s"
- + "panner.v1\032\034google/api/annotations.proto\032"
- + "\034google/protobuf/struct.proto\"\364\001\n\010KeyRan"
- + "ge\0222\n\014start_closed\030\001 \001(\0132\032.google.protob"
- + "uf.ListValueH\000\0220\n\nstart_open\030\002 \001(\0132\032.goo"
- + "gle.protobuf.ListValueH\000\0220\n\nend_closed\030\003"
- + " \001(\0132\032.google.protobuf.ListValueH\001\022.\n\010en"
- + "d_open\030\004 \001(\0132\032.google.protobuf.ListValue"
- + "H\001B\020\n\016start_key_typeB\016\n\014end_key_type\"l\n\006"
- + "KeySet\022(\n\004keys\030\001 \003(\0132\032.google.protobuf.L"
- + "istValue\022+\n\006ranges\030\002 \003(\0132\033.google.spanne"
- + "r.v1.KeyRange\022\013\n\003all\030\003 \001(\010B\257\001\n\025com.googl"
- + "e.spanner.v1B\tKeysProtoP\001Z8google.golang"
- + ".org/genproto/googleapis/spanner/v1;span"
- + "ner\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\C"
- + "loud\\Spanner\\V1\352\002\032Google::Cloud::Spanner"
- + "::V1b\006proto3"
+ + "panner.v1\032\034google/protobuf/struct.proto\""
+ + "\364\001\n\010KeyRange\0222\n\014start_closed\030\001 \001(\0132\032.goo"
+ + "gle.protobuf.ListValueH\000\0220\n\nstart_open\030\002"
+ + " \001(\0132\032.google.protobuf.ListValueH\000\0220\n\nen"
+ + "d_closed\030\003 \001(\0132\032.google.protobuf.ListVal"
+ + "ueH\001\022.\n\010end_open\030\004 \001(\0132\032.google.protobuf"
+ + ".ListValueH\001B\020\n\016start_key_typeB\016\n\014end_ke"
+ + "y_type\"l\n\006KeySet\022(\n\004keys\030\001 \003(\0132\032.google."
+ + "protobuf.ListValue\022+\n\006ranges\030\002 \003(\0132\033.goo"
+ + "gle.spanner.v1.KeyRange\022\013\n\003all\030\003 \001(\010B\257\001\n"
+ + "\025com.google.spanner.v1B\tKeysProtoP\001Z8goo"
+ + "gle.golang.org/genproto/googleapis/spann"
+ + "er/v1;spanner\252\002\027Google.Cloud.Spanner.V1\312"
+ + "\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google::Clou"
+ + "d::Spanner::V1b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
com.google.protobuf.StructProto.getDescriptor(),
});
internal_static_google_spanner_v1_KeyRange_descriptor =
@@ -84,7 +82,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new java.lang.String[] {
"Keys", "Ranges", "All",
});
- com.google.api.AnnotationsProto.getDescriptor();
com.google.protobuf.StructProto.getDescriptor();
}
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
index faf23ffff0a..1c10bfaa9ca 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
@@ -49,32 +49,31 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
static {
java.lang.String[] descriptorData = {
"\n google/spanner/v1/mutation.proto\022\021goog"
- + "le.spanner.v1\032\034google/api/annotations.pr"
- + "oto\032\037google/api/field_behavior.proto\032\034go"
- + "ogle/protobuf/struct.proto\032\034google/spann"
- + "er/v1/keys.proto\"\325\003\n\010Mutation\0223\n\006insert\030"
- + "\001 \001(\0132!.google.spanner.v1.Mutation.Write"
- + "H\000\0223\n\006update\030\002 \001(\0132!.google.spanner.v1.M"
- + "utation.WriteH\000\022=\n\020insert_or_update\030\003 \001("
- + "\0132!.google.spanner.v1.Mutation.WriteH\000\0224"
- + "\n\007replace\030\004 \001(\0132!.google.spanner.v1.Muta"
- + "tion.WriteH\000\0224\n\006delete\030\005 \001(\0132\".google.sp"
- + "anner.v1.Mutation.DeleteH\000\032X\n\005Write\022\022\n\005t"
- + "able\030\001 \001(\tB\003\340A\002\022\017\n\007columns\030\002 \003(\t\022*\n\006valu"
- + "es\030\003 \003(\0132\032.google.protobuf.ListValue\032M\n\006"
- + "Delete\022\022\n\005table\030\001 \001(\tB\003\340A\002\022/\n\007key_set\030\002 "
- + "\001(\0132\031.google.spanner.v1.KeySetB\003\340A\002B\013\n\to"
- + "perationB\263\001\n\025com.google.spanner.v1B\rMuta"
- + "tionProtoP\001Z8google.golang.org/genproto/"
- + "googleapis/spanner/v1;spanner\252\002\027Google.C"
- + "loud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V"
- + "1\352\002\032Google::Cloud::Spanner::V1b\006proto3"
+ + "le.spanner.v1\032\037google/api/field_behavior"
+ + ".proto\032\034google/protobuf/struct.proto\032\034go"
+ + "ogle/spanner/v1/keys.proto\"\325\003\n\010Mutation\022"
+ + "3\n\006insert\030\001 \001(\0132!.google.spanner.v1.Muta"
+ + "tion.WriteH\000\0223\n\006update\030\002 \001(\0132!.google.sp"
+ + "anner.v1.Mutation.WriteH\000\022=\n\020insert_or_u"
+ + "pdate\030\003 \001(\0132!.google.spanner.v1.Mutation"
+ + ".WriteH\000\0224\n\007replace\030\004 \001(\0132!.google.spann"
+ + "er.v1.Mutation.WriteH\000\0224\n\006delete\030\005 \001(\0132\""
+ + ".google.spanner.v1.Mutation.DeleteH\000\032X\n\005"
+ + "Write\022\022\n\005table\030\001 \001(\tB\003\340A\002\022\017\n\007columns\030\002 \003"
+ + "(\t\022*\n\006values\030\003 \003(\0132\032.google.protobuf.Lis"
+ + "tValue\032M\n\006Delete\022\022\n\005table\030\001 \001(\tB\003\340A\002\022/\n\007"
+ + "key_set\030\002 \001(\0132\031.google.spanner.v1.KeySet"
+ + "B\003\340A\002B\013\n\toperationB\263\001\n\025com.google.spanne"
+ + "r.v1B\rMutationProtoP\001Z8google.golang.org"
+ + "/genproto/googleapis/spanner/v1;spanner\252"
+ + "\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Cloud"
+ + "\\Spanner\\V1\352\002\032Google::Cloud::Spanner::V1"
+ + "b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
com.google.api.FieldBehaviorProto.getDescriptor(),
com.google.protobuf.StructProto.getDescriptor(),
com.google.spanner.v1.KeysProto.getDescriptor(),
@@ -108,7 +107,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
registry.add(com.google.api.FieldBehaviorProto.fieldBehavior);
com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor(
descriptor, registry);
- com.google.api.AnnotationsProto.getDescriptor();
com.google.api.FieldBehaviorProto.getDescriptor();
com.google.protobuf.StructProto.getDescriptor();
com.google.spanner.v1.KeysProto.getDescriptor();
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java
index 0a9d2b3583d..21cc5708fbc 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java
@@ -57,37 +57,35 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
static {
java.lang.String[] descriptorData = {
"\n\"google/spanner/v1/query_plan.proto\022\021go"
- + "ogle.spanner.v1\032\034google/api/annotations."
- + "proto\032\034google/protobuf/struct.proto\"\370\004\n\010"
- + "PlanNode\022\r\n\005index\030\001 \001(\005\022.\n\004kind\030\002 \001(\0162 ."
- + "google.spanner.v1.PlanNode.Kind\022\024\n\014displ"
- + "ay_name\030\003 \001(\t\022:\n\013child_links\030\004 \003(\0132%.goo"
- + "gle.spanner.v1.PlanNode.ChildLink\022M\n\024sho"
- + "rt_representation\030\005 \001(\0132/.google.spanner"
- + ".v1.PlanNode.ShortRepresentation\022)\n\010meta"
- + "data\030\006 \001(\0132\027.google.protobuf.Struct\0220\n\017e"
- + "xecution_stats\030\007 \001(\0132\027.google.protobuf.S"
- + "truct\032@\n\tChildLink\022\023\n\013child_index\030\001 \001(\005\022"
- + "\014\n\004type\030\002 \001(\t\022\020\n\010variable\030\003 \001(\t\032\262\001\n\023Shor"
- + "tRepresentation\022\023\n\013description\030\001 \001(\t\022S\n\n"
- + "subqueries\030\002 \003(\0132?.google.spanner.v1.Pla"
- + "nNode.ShortRepresentation.SubqueriesEntr"
- + "y\0321\n\017SubqueriesEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005val"
- + "ue\030\002 \001(\005:\0028\001\"8\n\004Kind\022\024\n\020KIND_UNSPECIFIED"
- + "\020\000\022\016\n\nRELATIONAL\020\001\022\n\n\006SCALAR\020\002\"<\n\tQueryP"
- + "lan\022/\n\nplan_nodes\030\001 \003(\0132\033.google.spanner"
- + ".v1.PlanNodeB\264\001\n\025com.google.spanner.v1B\016"
- + "QueryPlanProtoP\001Z8google.golang.org/genp"
- + "roto/googleapis/spanner/v1;spanner\252\002\027Goo"
- + "gle.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Span"
- + "ner\\V1\352\002\032Google::Cloud::Spanner::V1b\006pro"
- + "to3"
+ + "ogle.spanner.v1\032\034google/protobuf/struct."
+ + "proto\"\370\004\n\010PlanNode\022\r\n\005index\030\001 \001(\005\022.\n\004kin"
+ + "d\030\002 \001(\0162 .google.spanner.v1.PlanNode.Kin"
+ + "d\022\024\n\014display_name\030\003 \001(\t\022:\n\013child_links\030\004"
+ + " \003(\0132%.google.spanner.v1.PlanNode.ChildL"
+ + "ink\022M\n\024short_representation\030\005 \001(\0132/.goog"
+ + "le.spanner.v1.PlanNode.ShortRepresentati"
+ + "on\022)\n\010metadata\030\006 \001(\0132\027.google.protobuf.S"
+ + "truct\0220\n\017execution_stats\030\007 \001(\0132\027.google."
+ + "protobuf.Struct\032@\n\tChildLink\022\023\n\013child_in"
+ + "dex\030\001 \001(\005\022\014\n\004type\030\002 \001(\t\022\020\n\010variable\030\003 \001("
+ + "\t\032\262\001\n\023ShortRepresentation\022\023\n\013description"
+ + "\030\001 \001(\t\022S\n\nsubqueries\030\002 \003(\0132?.google.span"
+ + "ner.v1.PlanNode.ShortRepresentation.Subq"
+ + "ueriesEntry\0321\n\017SubqueriesEntry\022\013\n\003key\030\001 "
+ + "\001(\t\022\r\n\005value\030\002 \001(\005:\0028\001\"8\n\004Kind\022\024\n\020KIND_U"
+ + "NSPECIFIED\020\000\022\016\n\nRELATIONAL\020\001\022\n\n\006SCALAR\020\002"
+ + "\"<\n\tQueryPlan\022/\n\nplan_nodes\030\001 \003(\0132\033.goog"
+ + "le.spanner.v1.PlanNodeB\264\001\n\025com.google.sp"
+ + "anner.v1B\016QueryPlanProtoP\001Z8google.golan"
+ + "g.org/genproto/googleapis/spanner/v1;spa"
+ + "nner\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\"
+ + "Cloud\\Spanner\\V1\352\002\032Google::Cloud::Spanne"
+ + "r::V1b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
com.google.protobuf.StructProto.getDescriptor(),
});
internal_static_google_spanner_v1_PlanNode_descriptor =
@@ -138,7 +136,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new java.lang.String[] {
"PlanNodes",
});
- com.google.api.AnnotationsProto.getDescriptor();
com.google.protobuf.StructProto.getDescriptor();
}
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java
index e6b22d02d80..a5744a50a1f 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java
@@ -53,40 +53,38 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
static {
java.lang.String[] descriptorData = {
"\n\"google/spanner/v1/result_set.proto\022\021go"
- + "ogle.spanner.v1\032\034google/api/annotations."
- + "proto\032\034google/protobuf/struct.proto\032\'goo"
- + "gle/spanner/v1/commit_response.proto\032\"go"
- + "ogle/spanner/v1/query_plan.proto\032#google"
- + "/spanner/v1/transaction.proto\032\034google/sp"
- + "anner/v1/type.proto\"\237\001\n\tResultSet\0226\n\010met"
- + "adata\030\001 \001(\0132$.google.spanner.v1.ResultSe"
- + "tMetadata\022(\n\004rows\030\002 \003(\0132\032.google.protobu"
- + "f.ListValue\0220\n\005stats\030\003 \001(\0132!.google.span"
- + "ner.v1.ResultSetStats\"\321\001\n\020PartialResultS"
- + "et\0226\n\010metadata\030\001 \001(\0132$.google.spanner.v1"
- + ".ResultSetMetadata\022&\n\006values\030\002 \003(\0132\026.goo"
- + "gle.protobuf.Value\022\025\n\rchunked_value\030\003 \001("
- + "\010\022\024\n\014resume_token\030\004 \001(\014\0220\n\005stats\030\005 \001(\0132!"
- + ".google.spanner.v1.ResultSetStats\"y\n\021Res"
- + "ultSetMetadata\022/\n\010row_type\030\001 \001(\0132\035.googl"
- + "e.spanner.v1.StructType\0223\n\013transaction\030\002"
- + " \001(\0132\036.google.spanner.v1.Transaction\"\271\001\n"
- + "\016ResultSetStats\0220\n\nquery_plan\030\001 \001(\0132\034.go"
- + "ogle.spanner.v1.QueryPlan\022,\n\013query_stats"
- + "\030\002 \001(\0132\027.google.protobuf.Struct\022\031\n\017row_c"
- + "ount_exact\030\003 \001(\003H\000\022\037\n\025row_count_lower_bo"
- + "und\030\004 \001(\003H\000B\013\n\trow_countB\267\001\n\025com.google."
- + "spanner.v1B\016ResultSetProtoP\001Z8google.gol"
- + "ang.org/genproto/googleapis/spanner/v1;s"
- + "panner\370\001\001\252\002\027Google.Cloud.Spanner.V1\312\002\027Go"
- + "ogle\\Cloud\\Spanner\\V1\352\002\032Google::Cloud::S"
- + "panner::V1b\006proto3"
+ + "ogle.spanner.v1\032\034google/protobuf/struct."
+ + "proto\032\'google/spanner/v1/commit_response"
+ + ".proto\032\"google/spanner/v1/query_plan.pro"
+ + "to\032#google/spanner/v1/transaction.proto\032"
+ + "\034google/spanner/v1/type.proto\"\237\001\n\tResult"
+ + "Set\0226\n\010metadata\030\001 \001(\0132$.google.spanner.v"
+ + "1.ResultSetMetadata\022(\n\004rows\030\002 \003(\0132\032.goog"
+ + "le.protobuf.ListValue\0220\n\005stats\030\003 \001(\0132!.g"
+ + "oogle.spanner.v1.ResultSetStats\"\321\001\n\020Part"
+ + "ialResultSet\0226\n\010metadata\030\001 \001(\0132$.google."
+ + "spanner.v1.ResultSetMetadata\022&\n\006values\030\002"
+ + " \003(\0132\026.google.protobuf.Value\022\025\n\rchunked_"
+ + "value\030\003 \001(\010\022\024\n\014resume_token\030\004 \001(\014\0220\n\005sta"
+ + "ts\030\005 \001(\0132!.google.spanner.v1.ResultSetSt"
+ + "ats\"y\n\021ResultSetMetadata\022/\n\010row_type\030\001 \001"
+ + "(\0132\035.google.spanner.v1.StructType\0223\n\013tra"
+ + "nsaction\030\002 \001(\0132\036.google.spanner.v1.Trans"
+ + "action\"\271\001\n\016ResultSetStats\0220\n\nquery_plan\030"
+ + "\001 \001(\0132\034.google.spanner.v1.QueryPlan\022,\n\013q"
+ + "uery_stats\030\002 \001(\0132\027.google.protobuf.Struc"
+ + "t\022\031\n\017row_count_exact\030\003 \001(\003H\000\022\037\n\025row_coun"
+ + "t_lower_bound\030\004 \001(\003H\000B\013\n\trow_countB\267\001\n\025c"
+ + "om.google.spanner.v1B\016ResultSetProtoP\001Z8"
+ + "google.golang.org/genproto/googleapis/sp"
+ + "anner/v1;spanner\370\001\001\252\002\027Google.Cloud.Spann"
+ + "er.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google"
+ + "::Cloud::Spanner::V1b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
com.google.protobuf.StructProto.getDescriptor(),
com.google.spanner.v1.CommitResponseProto.getDescriptor(),
com.google.spanner.v1.QueryPlanProto.getDescriptor(),
@@ -125,7 +123,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new java.lang.String[] {
"QueryPlan", "QueryStats", "RowCountExact", "RowCountLowerBound", "RowCount",
});
- com.google.api.AnnotationsProto.getDescriptor();
com.google.protobuf.StructProto.getDescriptor();
com.google.spanner.v1.CommitResponseProto.getDescriptor();
com.google.spanner.v1.QueryPlanProto.getDescriptor();
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java
index 2655d8e0fb4..4ce4f322c00 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java
@@ -61,41 +61,39 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
static {
java.lang.String[] descriptorData = {
"\n#google/spanner/v1/transaction.proto\022\021g"
- + "oogle.spanner.v1\032\034google/api/annotations"
- + ".proto\032\036google/protobuf/duration.proto\032\037"
- + "google/protobuf/timestamp.proto\"\303\004\n\022Tran"
- + "sactionOptions\022E\n\nread_write\030\001 \001(\0132/.goo"
- + "gle.spanner.v1.TransactionOptions.ReadWr"
- + "iteH\000\022O\n\017partitioned_dml\030\003 \001(\01324.google."
- + "spanner.v1.TransactionOptions.Partitione"
- + "dDmlH\000\022C\n\tread_only\030\002 \001(\0132..google.spann"
- + "er.v1.TransactionOptions.ReadOnlyH\000\032\013\n\tR"
- + "eadWrite\032\020\n\016PartitionedDml\032\250\002\n\010ReadOnly\022"
- + "\020\n\006strong\030\001 \001(\010H\000\0228\n\022min_read_timestamp\030"
- + "\002 \001(\0132\032.google.protobuf.TimestampH\000\0222\n\rm"
- + "ax_staleness\030\003 \001(\0132\031.google.protobuf.Dur"
- + "ationH\000\0224\n\016read_timestamp\030\004 \001(\0132\032.google"
- + ".protobuf.TimestampH\000\0224\n\017exact_staleness"
- + "\030\005 \001(\0132\031.google.protobuf.DurationH\000\022\035\n\025r"
- + "eturn_read_timestamp\030\006 \001(\010B\021\n\017timestamp_"
- + "boundB\006\n\004mode\"M\n\013Transaction\022\n\n\002id\030\001 \001(\014"
- + "\0222\n\016read_timestamp\030\002 \001(\0132\032.google.protob"
- + "uf.Timestamp\"\244\001\n\023TransactionSelector\022;\n\n"
- + "single_use\030\001 \001(\0132%.google.spanner.v1.Tra"
- + "nsactionOptionsH\000\022\014\n\002id\030\002 \001(\014H\000\0226\n\005begin"
- + "\030\003 \001(\0132%.google.spanner.v1.TransactionOp"
- + "tionsH\000B\n\n\010selectorB\266\001\n\025com.google.spann"
- + "er.v1B\020TransactionProtoP\001Z8google.golang"
- + ".org/genproto/googleapis/spanner/v1;span"
- + "ner\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\C"
- + "loud\\Spanner\\V1\352\002\032Google::Cloud::Spanner"
- + "::V1b\006proto3"
+ + "oogle.spanner.v1\032\036google/protobuf/durati"
+ + "on.proto\032\037google/protobuf/timestamp.prot"
+ + "o\"\303\004\n\022TransactionOptions\022E\n\nread_write\030\001"
+ + " \001(\0132/.google.spanner.v1.TransactionOpti"
+ + "ons.ReadWriteH\000\022O\n\017partitioned_dml\030\003 \001(\013"
+ + "24.google.spanner.v1.TransactionOptions."
+ + "PartitionedDmlH\000\022C\n\tread_only\030\002 \001(\0132..go"
+ + "ogle.spanner.v1.TransactionOptions.ReadO"
+ + "nlyH\000\032\013\n\tReadWrite\032\020\n\016PartitionedDml\032\250\002\n"
+ + "\010ReadOnly\022\020\n\006strong\030\001 \001(\010H\000\0228\n\022min_read_"
+ + "timestamp\030\002 \001(\0132\032.google.protobuf.Timest"
+ + "ampH\000\0222\n\rmax_staleness\030\003 \001(\0132\031.google.pr"
+ + "otobuf.DurationH\000\0224\n\016read_timestamp\030\004 \001("
+ + "\0132\032.google.protobuf.TimestampH\000\0224\n\017exact"
+ + "_staleness\030\005 \001(\0132\031.google.protobuf.Durat"
+ + "ionH\000\022\035\n\025return_read_timestamp\030\006 \001(\010B\021\n\017"
+ + "timestamp_boundB\006\n\004mode\"M\n\013Transaction\022\n"
+ + "\n\002id\030\001 \001(\014\0222\n\016read_timestamp\030\002 \001(\0132\032.goo"
+ + "gle.protobuf.Timestamp\"\244\001\n\023TransactionSe"
+ + "lector\022;\n\nsingle_use\030\001 \001(\0132%.google.span"
+ + "ner.v1.TransactionOptionsH\000\022\014\n\002id\030\002 \001(\014H"
+ + "\000\0226\n\005begin\030\003 \001(\0132%.google.spanner.v1.Tra"
+ + "nsactionOptionsH\000B\n\n\010selectorB\266\001\n\025com.go"
+ + "ogle.spanner.v1B\020TransactionProtoP\001Z8goo"
+ + "gle.golang.org/genproto/googleapis/spann"
+ + "er/v1;spanner\252\002\027Google.Cloud.Spanner.V1\312"
+ + "\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google::Clou"
+ + "d::Spanner::V1b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
com.google.protobuf.DurationProto.getDescriptor(),
com.google.protobuf.TimestampProto.getDescriptor(),
});
@@ -149,7 +147,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new java.lang.String[] {
"SingleUse", "Id", "Begin", "Selector",
});
- com.google.api.AnnotationsProto.getDescriptor();
com.google.protobuf.DurationProto.getDescriptor();
com.google.protobuf.TimestampProto.getDescriptor();
}
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
index d0e7dd0f0cc..29e9151b325 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
@@ -49,34 +49,32 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
static {
java.lang.String[] descriptorData = {
"\n\034google/spanner/v1/type.proto\022\021google.s"
- + "panner.v1\032\034google/api/annotations.proto\032"
- + "\037google/api/field_behavior.proto\"\337\001\n\004Typ"
- + "e\022.\n\004code\030\001 \001(\0162\033.google.spanner.v1.Type"
- + "CodeB\003\340A\002\0223\n\022array_element_type\030\002 \001(\0132\027."
- + "google.spanner.v1.Type\0222\n\013struct_type\030\003 "
- + "\001(\0132\035.google.spanner.v1.StructType\022>\n\017ty"
- + "pe_annotation\030\004 \001(\0162%.google.spanner.v1."
- + "TypeAnnotationCode\"\177\n\nStructType\0223\n\006fiel"
- + "ds\030\001 \003(\0132#.google.spanner.v1.StructType."
- + "Field\032<\n\005Field\022\014\n\004name\030\001 \001(\t\022%\n\004type\030\002 \001"
- + "(\0132\027.google.spanner.v1.Type*\245\001\n\010TypeCode"
- + "\022\031\n\025TYPE_CODE_UNSPECIFIED\020\000\022\010\n\004BOOL\020\001\022\t\n"
- + "\005INT64\020\002\022\013\n\007FLOAT64\020\003\022\r\n\tTIMESTAMP\020\004\022\010\n\004"
- + "DATE\020\005\022\n\n\006STRING\020\006\022\t\n\005BYTES\020\007\022\t\n\005ARRAY\020\010"
- + "\022\n\n\006STRUCT\020\t\022\013\n\007NUMERIC\020\n\022\010\n\004JSON\020\013*J\n\022T"
- + "ypeAnnotationCode\022$\n TYPE_ANNOTATION_COD"
- + "E_UNSPECIFIED\020\000\022\016\n\nPG_NUMERIC\020\002B\257\001\n\025com."
- + "google.spanner.v1B\tTypeProtoP\001Z8google.g"
- + "olang.org/genproto/googleapis/spanner/v1"
- + ";spanner\252\002\027Google.Cloud.Spanner.V1\312\002\027Goo"
- + "gle\\Cloud\\Spanner\\V1\352\002\032Google::Cloud::Sp"
- + "anner::V1b\006proto3"
+ + "panner.v1\032\037google/api/field_behavior.pro"
+ + "to\"\337\001\n\004Type\022.\n\004code\030\001 \001(\0162\033.google.spann"
+ + "er.v1.TypeCodeB\003\340A\002\0223\n\022array_element_typ"
+ + "e\030\002 \001(\0132\027.google.spanner.v1.Type\0222\n\013stru"
+ + "ct_type\030\003 \001(\0132\035.google.spanner.v1.Struct"
+ + "Type\022>\n\017type_annotation\030\004 \001(\0162%.google.s"
+ + "panner.v1.TypeAnnotationCode\"\177\n\nStructTy"
+ + "pe\0223\n\006fields\030\001 \003(\0132#.google.spanner.v1.S"
+ + "tructType.Field\032<\n\005Field\022\014\n\004name\030\001 \001(\t\022%"
+ + "\n\004type\030\002 \001(\0132\027.google.spanner.v1.Type*\245\001"
+ + "\n\010TypeCode\022\031\n\025TYPE_CODE_UNSPECIFIED\020\000\022\010\n"
+ + "\004BOOL\020\001\022\t\n\005INT64\020\002\022\013\n\007FLOAT64\020\003\022\r\n\tTIMES"
+ + "TAMP\020\004\022\010\n\004DATE\020\005\022\n\n\006STRING\020\006\022\t\n\005BYTES\020\007\022"
+ + "\t\n\005ARRAY\020\010\022\n\n\006STRUCT\020\t\022\013\n\007NUMERIC\020\n\022\010\n\004J"
+ + "SON\020\013*J\n\022TypeAnnotationCode\022$\n TYPE_ANNO"
+ + "TATION_CODE_UNSPECIFIED\020\000\022\016\n\nPG_NUMERIC\020"
+ + "\002B\257\001\n\025com.google.spanner.v1B\tTypeProtoP\001"
+ + "Z8google.golang.org/genproto/googleapis/"
+ + "spanner/v1;spanner\252\002\027Google.Cloud.Spanne"
+ + "r.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google:"
+ + ":Cloud::Spanner::V1b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
- com.google.api.AnnotationsProto.getDescriptor(),
com.google.api.FieldBehaviorProto.getDescriptor(),
});
internal_static_google_spanner_v1_Type_descriptor = getDescriptor().getMessageTypes().get(0);
@@ -107,7 +105,6 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
registry.add(com.google.api.FieldBehaviorProto.fieldBehavior);
com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor(
descriptor, registry);
- com.google.api.AnnotationsProto.getDescriptor();
com.google.api.FieldBehaviorProto.getDescriptor();
}
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/commit_response.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/commit_response.proto
index 4850600f0ef..d43a83a3206 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/commit_response.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/commit_response.proto
@@ -16,8 +16,6 @@ syntax = "proto3";
package google.spanner.v1;
-import "google/api/annotations.proto";
-import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
option csharp_namespace = "Google.Cloud.Spanner.V1";
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/keys.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/keys.proto
index ddcd181266e..12495a616ab 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/keys.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/keys.proto
@@ -16,7 +16,6 @@ syntax = "proto3";
package google.spanner.v1;
-import "google/api/annotations.proto";
import "google/protobuf/struct.proto";
option csharp_namespace = "Google.Cloud.Spanner.V1";
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/mutation.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/mutation.proto
index f4b722cc12e..ef7e75f8dc8 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/mutation.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/mutation.proto
@@ -16,7 +16,6 @@ syntax = "proto3";
package google.spanner.v1;
-import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/struct.proto";
import "google/spanner/v1/keys.proto";
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/query_plan.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/query_plan.proto
index 690c36ea92b..f700014e283 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/query_plan.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/query_plan.proto
@@ -16,7 +16,6 @@ syntax = "proto3";
package google.spanner.v1;
-import "google/api/annotations.proto";
import "google/protobuf/struct.proto";
option csharp_namespace = "Google.Cloud.Spanner.V1";
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto
index d6ba978de2b..89dfa234653 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto
@@ -16,7 +16,6 @@ syntax = "proto3";
package google.spanner.v1;
-import "google/api/annotations.proto";
import "google/protobuf/struct.proto";
import "google/spanner/v1/commit_response.proto";
import "google/spanner/v1/query_plan.proto";
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto
index debc226e32b..1e4c655ee2c 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto
@@ -16,7 +16,6 @@ syntax = "proto3";
package google.spanner.v1;
-import "google/api/annotations.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/type.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/type.proto
index f88e7b251df..3d28c331300 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/type.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/type.proto
@@ -16,7 +16,6 @@ syntax = "proto3";
package google.spanner.v1;
-import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
option csharp_namespace = "Google.Cloud.Spanner.V1";
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 42a47627a48..3644b98a2a7 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -22,7 +22,7 @@
1.8
UTF-8
0.31.0
- 2.1.6
+ 2.1.9
3.2.5