Skip to content

Commit 6a7ba10

Browse files
committed
feat: use connection variables for auto_batch_dml
1 parent 74e887b commit 6a7ba10

File tree

16 files changed

+38721
-32537
lines changed

16 files changed

+38721
-32537
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,35 @@ public Integer convert(String value) {
177177
}
178178
}
179179

180+
/** Converter from string to a long. */
181+
static class LongConverter implements ClientSideStatementValueConverter<Long> {
182+
static final LongConverter INSTANCE = new LongConverter();
183+
184+
private LongConverter() {}
185+
186+
/** Constructor needed for reflection. */
187+
public LongConverter(String allowedValues) {}
188+
189+
@Override
190+
public Class<Long> getParameterClass() {
191+
return Long.class;
192+
}
193+
194+
@Override
195+
public Long convert(String value) {
196+
try {
197+
long res = Long.parseLong(value);
198+
if (res < 0) {
199+
// The conventions for these converters is to return null if the value is invalid.
200+
return null;
201+
}
202+
return res;
203+
} catch (Exception ignore) {
204+
return null;
205+
}
206+
}
207+
}
208+
180209
/** Converter from string to {@link Duration}. */
181210
static class DurationConverter implements ClientSideStatementValueConverter<Duration> {
182211
static final DurationConverter INSTANCE =

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
import static com.google.cloud.spanner.connection.ConnectionPreconditions.checkValidIdentifier;
2222
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTOCOMMIT;
2323
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTOCOMMIT_DML_MODE;
24+
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_BATCH_DML;
25+
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_BATCH_DML_UPDATE_COUNT;
26+
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION;
2427
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_PARTITION_MODE;
2528
import static com.google.cloud.spanner.connection.ConnectionProperties.DATA_BOOST_ENABLED;
2629
import static com.google.cloud.spanner.connection.ConnectionProperties.DDL_IN_TRANSACTION_MODE;
@@ -1428,40 +1431,32 @@ public ResultSet analyzeQuery(Statement query, QueryAnalyzeMode queryMode) {
14281431

14291432
@Override
14301433
public void setAutoBatchDml(boolean autoBatchDml) {
1431-
// TODO: Replace with a connection variable
1432-
System.setProperty("spanner.auto_batch_dml", String.valueOf(autoBatchDml));
1434+
setConnectionPropertyValue(AUTO_BATCH_DML, autoBatchDml);
14331435
}
14341436

14351437
@Override
14361438
public boolean isAutoBatchDml() {
1437-
// TODO: Replace with a connection variable
1438-
return Boolean.parseBoolean(System.getProperty("spanner.auto_batch_dml"));
1439+
return getConnectionPropertyValue(AUTO_BATCH_DML);
14391440
}
14401441

14411442
@Override
14421443
public void setAutoBatchDmlUpdateCount(long updateCount) {
1443-
// TODO: Replace with a connection variable
1444-
System.setProperty("spanner.auto_batch_dml_update_count", String.valueOf(updateCount));
1444+
setConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT, updateCount);
14451445
}
14461446

14471447
@Override
14481448
public long getAutoBatchDmlUpdateCount() {
1449-
// TODO: Replace with a connection variable
1450-
return Long.parseLong(System.getProperty("spanner.auto_batch_dml_update_count", "1"));
1449+
return getConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT);
14511450
}
14521451

14531452
@Override
14541453
public void setAutoBatchDmlUpdateCountVerification(boolean verification) {
1455-
// TODO: Replace with a connection variable
1456-
System.setProperty(
1457-
"spanner.auto_batch_dml_update_count_verification", String.valueOf(verification));
1454+
setConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION, verification);
14581455
}
14591456

14601457
@Override
14611458
public boolean isAutoBatchDmlUpdateCountVerification() {
1462-
// TODO: Replace with a connection variable
1463-
return Boolean.parseBoolean(
1464-
System.getProperty("spanner.auto_batch_dml_update_count_verification", "true"));
1459+
return getConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION);
14651460
}
14661461

14671462
@Override

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,9 @@ public String[] getValidValues() {
249249
static final int DEFAULT_MAX_PARTITIONED_PARALLELISM = 1;
250250
static final Boolean DEFAULT_ENABLE_EXTENDED_TRACING = null;
251251
static final Boolean DEFAULT_ENABLE_API_TRACING = null;
252+
static final boolean DEFAULT_AUTO_BATCH_DML = false;
253+
static final long DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT = 1L;
254+
static final boolean DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = true;
252255

253256
private static final String PLAIN_TEXT_PROTOCOL = "http:";
254257
private static final String HOST_PROTOCOL = "https:";
@@ -333,6 +336,12 @@ public String[] getValidValues() {
333336
public static final String ENABLE_EXTENDED_TRACING_PROPERTY_NAME = "enableExtendedTracing";
334337
public static final String ENABLE_API_TRACING_PROPERTY_NAME = "enableApiTracing";
335338

339+
public static final String AUTO_BATCH_DML_PROPERTY_NAME = "auto_batch_dml";
340+
public static final String AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME =
341+
"auto_batch_dml_update_count";
342+
public static final String AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME =
343+
"auto_batch_dml_update_count_verification";
344+
336345
private static final String GUARDED_CONNECTION_PROPERTY_ERROR_MESSAGE =
337346
"%s can only be used if the system property %s has been set to true. "
338347
+ "Start the application with the JVM command line option -D%s=true";

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
package com.google.cloud.spanner.connection;
1818

1919
import static com.google.cloud.spanner.connection.ConnectionOptions.AUTOCOMMIT_PROPERTY_NAME;
20+
import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_BATCH_DML_PROPERTY_NAME;
21+
import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME;
22+
import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME;
2023
import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_PARTITION_MODE_PROPERTY_NAME;
2124
import static com.google.cloud.spanner.connection.ConnectionOptions.CHANNEL_PROVIDER_PROPERTY_NAME;
2225
import static com.google.cloud.spanner.connection.ConnectionOptions.CREDENTIALS_PROPERTY_NAME;
@@ -25,6 +28,9 @@
2528
import static com.google.cloud.spanner.connection.ConnectionOptions.DATA_BOOST_ENABLED_PROPERTY_NAME;
2629
import static com.google.cloud.spanner.connection.ConnectionOptions.DDL_IN_TRANSACTION_MODE_PROPERTY_NAME;
2730
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTOCOMMIT;
31+
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_BATCH_DML;
32+
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT;
33+
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION;
2834
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_PARTITION_MODE;
2935
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CHANNEL_PROVIDER;
3036
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CREDENTIALS;
@@ -86,6 +92,7 @@
8692

8793
import com.google.api.gax.core.CredentialsProvider;
8894
import com.google.cloud.spanner.Dialect;
95+
import com.google.cloud.spanner.DmlBatchUpdateCountVerificationFailedException;
8996
import com.google.cloud.spanner.Options.RpcPriority;
9097
import com.google.cloud.spanner.TimestampBound;
9198
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.AutocommitDmlModeConverter;
@@ -95,6 +102,7 @@
95102
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.DdlInTransactionModeConverter;
96103
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.DialectConverter;
97104
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.DurationConverter;
105+
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.LongConverter;
98106
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.NonNegativeIntegerConverter;
99107
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.ReadOnlyStalenessConverter;
100108
import com.google.cloud.spanner.connection.ClientSideStatementValueConverters.RpcPriorityConverter;
@@ -471,6 +479,55 @@ class ConnectionProperties {
471479
null,
472480
DurationConverter.INSTANCE,
473481
Context.USER);
482+
static final ConnectionProperty<Boolean> AUTO_BATCH_DML =
483+
create(
484+
AUTO_BATCH_DML_PROPERTY_NAME,
485+
"Automatically buffer DML statements that are executed on this connection and "
486+
+ "execute them as one batch when a non-DML statement is executed, or when the current "
487+
+ "transaction is committed. The update count that is returned for DML statements that "
488+
+ "are buffered is by default 1. This default can be changed by setting the connection "
489+
+ "variable "
490+
+ AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME
491+
+ " to value other than 1. "
492+
+ "This setting is only in read/write transactions. DML statements in auto-commit mode "
493+
+ "are executed directly.",
494+
DEFAULT_AUTO_BATCH_DML,
495+
BooleanConverter.INSTANCE,
496+
Context.USER);
497+
static final ConnectionProperty<Long> AUTO_BATCH_DML_UPDATE_COUNT =
498+
create(
499+
AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME,
500+
"DML statements that are executed when "
501+
+ AUTO_BATCH_DML_PROPERTY_NAME
502+
+ " is "
503+
+ "set to true, are not directly sent to Spanner, but are buffered in the client until "
504+
+ "the batch is flushed. This property determines the update count that is returned for "
505+
+ "these DML statements. The default is "
506+
+ DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT
507+
+ ", as "
508+
+ "that is the update count that is expected by most ORMs (e.g. Hibernate).",
509+
DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT,
510+
LongConverter.INSTANCE,
511+
Context.USER);
512+
static final ConnectionProperty<Boolean> AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION =
513+
create(
514+
AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME,
515+
"The update count that is returned for DML statements that are buffered during "
516+
+ "an automatic DML batch is by default "
517+
+ DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT
518+
+ ". "
519+
+ "This value can be changed by setting the connection variable "
520+
+ AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME
521+
+ ". The update counts that are returned by Spanner when the DML statements are actually "
522+
+ "executed are verified against the update counts that were returned when they were "
523+
+ "buffered. If these do not match, a "
524+
+ DmlBatchUpdateCountVerificationFailedException.class.getName()
525+
+ " will be thrown. You can disable this verification by setting "
526+
+ AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME
527+
+ " to false.",
528+
DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION,
529+
BooleanConverter.INSTANCE,
530+
Context.USER);
474531

475532
static final Map<String, ConnectionProperty<?>> CONNECTION_PROPERTIES =
476533
CONNECTION_PROPERTIES_BUILDER.build();

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutor.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,16 @@ StatementResult statementSetPgSessionCharacteristicsTransactionMode(
175175
StatementResult statementRunPartition(String partitionId);
176176

177177
StatementResult statementRunPartitionedQuery(Statement statement);
178+
179+
StatementResult statementSetAutoBatchDml(Boolean autoBatchDml);
180+
181+
StatementResult statementShowAutoBatchDml();
182+
183+
StatementResult statementSetAutoBatchDmlUpdateCount(Long updateCount);
184+
185+
StatementResult statementShowAutoBatchDmlUpdateCount();
186+
187+
StatementResult statementSetAutoBatchDmlUpdateCountVerification(Boolean verification);
188+
189+
StatementResult statementShowAutoBatchDmlUpdateCountVerification();
178190
}

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionStatementExecutorImpl.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.RUN_BATCH;
2626
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTOCOMMIT;
2727
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTOCOMMIT_DML_MODE;
28+
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTO_BATCH_DML;
29+
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTO_BATCH_DML_UPDATE_COUNT;
30+
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION;
2831
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_AUTO_PARTITION_MODE;
2932
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DATA_BOOST_ENABLED;
3033
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_DEFAULT_TRANSACTION_ISOLATION;
@@ -51,6 +54,9 @@
5154
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SET_TRANSACTION_TAG;
5255
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTOCOMMIT;
5356
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTOCOMMIT_DML_MODE;
57+
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTO_BATCH_DML;
58+
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTO_BATCH_DML_UPDATE_COUNT;
59+
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION;
5460
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_AUTO_PARTITION_MODE;
5561
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_COMMIT_RESPONSE;
5662
import static com.google.cloud.spanner.connection.StatementResult.ClientSideStatementType.SHOW_COMMIT_TIMESTAMP;
@@ -681,6 +687,49 @@ public StatementResult statementShowProtoDescriptorsFilePath() {
681687
SHOW_PROTO_DESCRIPTORS_FILE_PATH);
682688
}
683689

690+
@Override
691+
public StatementResult statementSetAutoBatchDml(Boolean autoBatchDml) {
692+
getConnection().setAutoBatchDml(autoBatchDml);
693+
return noResult(SET_AUTO_BATCH_DML);
694+
}
695+
696+
@Override
697+
public StatementResult statementShowAutoBatchDml() {
698+
return resultSet(
699+
String.format("%sAUTO_BATCH_DML", getNamespace(connection.getDialect())),
700+
getConnection().isAutoBatchDml(),
701+
SHOW_AUTO_BATCH_DML);
702+
}
703+
704+
@Override
705+
public StatementResult statementSetAutoBatchDmlUpdateCount(Long updateCount) {
706+
getConnection().setAutoBatchDmlUpdateCount(updateCount);
707+
return noResult(SET_AUTO_BATCH_DML_UPDATE_COUNT);
708+
}
709+
710+
@Override
711+
public StatementResult statementShowAutoBatchDmlUpdateCount() {
712+
return resultSet(
713+
String.format("%sAUTO_BATCH_DML_UPDATE_COUNT", getNamespace(connection.getDialect())),
714+
getConnection().getAutoBatchDmlUpdateCount(),
715+
SHOW_AUTO_BATCH_DML_UPDATE_COUNT);
716+
}
717+
718+
@Override
719+
public StatementResult statementSetAutoBatchDmlUpdateCountVerification(Boolean verification) {
720+
getConnection().setAutoBatchDmlUpdateCountVerification(verification);
721+
return noResult(SET_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION);
722+
}
723+
724+
@Override
725+
public StatementResult statementShowAutoBatchDmlUpdateCountVerification() {
726+
return resultSet(
727+
String.format(
728+
"%sAUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION", getNamespace(connection.getDialect())),
729+
getConnection().isAutoBatchDmlUpdateCountVerification(),
730+
SHOW_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION);
731+
}
732+
684733
private String processQueryPlan(PlanNode planNode) {
685734
StringBuilder planNodeDescription = new StringBuilder(" : { ");
686735
com.google.protobuf.Struct metadata = planNode.getMetadata();

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResult.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,13 @@ enum ClientSideStatementType {
113113
SET_PROTO_DESCRIPTORS,
114114
SET_PROTO_DESCRIPTORS_FILE_PATH,
115115
SHOW_PROTO_DESCRIPTORS,
116-
SHOW_PROTO_DESCRIPTORS_FILE_PATH
116+
SHOW_PROTO_DESCRIPTORS_FILE_PATH,
117+
SET_AUTO_BATCH_DML,
118+
SHOW_AUTO_BATCH_DML,
119+
SET_AUTO_BATCH_DML_UPDATE_COUNT,
120+
SHOW_AUTO_BATCH_DML_UPDATE_COUNT,
121+
SET_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION,
122+
SHOW_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION,
117123
}
118124

119125
/**

google-cloud-spanner/src/main/resources/com/google/cloud/spanner/connection/ClientSideStatements.json

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,33 @@
194194
"method": "statementShowKeepTransactionAlive",
195195
"exampleStatements": ["show variable keep_transaction_alive"]
196196
},
197+
{
198+
"name": "SHOW VARIABLE AUTO_BATCH_DML",
199+
"executorName": "ClientSideStatementNoParamExecutor",
200+
"resultType": "RESULT_SET",
201+
"statementType": "SHOW_AUTO_BATCH_DML",
202+
"regex": "(?is)\\A\\s*show\\s+variable\\s+auto_batch_dml\\s*\\z",
203+
"method": "statementShowAutoBatchDml",
204+
"exampleStatements": ["show variable auto_batch_dml"]
205+
},
206+
{
207+
"name": "SHOW VARIABLE AUTO_BATCH_DML_UPDATE_COUNT",
208+
"executorName": "ClientSideStatementNoParamExecutor",
209+
"resultType": "RESULT_SET",
210+
"statementType": "SHOW_AUTO_BATCH_DML_UPDATE_COUNT",
211+
"regex": "(?is)\\A\\s*show\\s+variable\\s+auto_batch_dml_update_count\\s*\\z",
212+
"method": "statementShowAutoBatchDmlUpdateCount",
213+
"exampleStatements": ["show variable auto_batch_dml_update_count"]
214+
},
215+
{
216+
"name": "SHOW VARIABLE AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION",
217+
"executorName": "ClientSideStatementNoParamExecutor",
218+
"resultType": "RESULT_SET",
219+
"statementType": "SHOW_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION",
220+
"regex": "(?is)\\A\\s*show\\s+variable\\s+auto_batch_dml_update_count_verification\\s*\\z",
221+
"method": "statementShowAutoBatchDmlUpdateCountVerification",
222+
"exampleStatements": ["show variable auto_batch_dml_update_count_verification"]
223+
},
197224
{
198225
"name": "PARTITION <sql>",
199226
"executorName": "ClientSideStatementPartitionExecutor",
@@ -629,6 +656,51 @@
629656
"converterName": "ClientSideStatementValueConverters$BooleanConverter"
630657
}
631658
},
659+
{
660+
"name": "SET AUTO_BATCH_DML = TRUE|FALSE",
661+
"executorName": "ClientSideStatementSetExecutor",
662+
"resultType": "NO_RESULT",
663+
"statementType": "SET_AUTO_BATCH_DML",
664+
"regex": "(?is)\\A\\s*set\\s+auto_batch_dml\\s*(?:=)\\s*(.*)\\z",
665+
"method": "statementSetAutoBatchDml",
666+
"exampleStatements": ["set auto_batch_dml = true", "set auto_batch_dml = false"],
667+
"setStatement": {
668+
"propertyName": "AUTO_BATCH_DML",
669+
"separator": "=",
670+
"allowedValues": "(TRUE|FALSE)",
671+
"converterName": "ClientSideStatementValueConverters$BooleanConverter"
672+
}
673+
},
674+
{
675+
"name": "SET AUTO_BATCH_DML_UPDATE_COUNT = <INT64>",
676+
"executorName": "ClientSideStatementSetExecutor",
677+
"resultType": "NO_RESULT",
678+
"statementType": "SET_AUTO_BATCH_DML_UPDATE_COUNT",
679+
"regex": "(?is)\\A\\s*set\\s+auto_batch_dml_update_count\\s*(?:=)\\s*(.*)\\z",
680+
"method": "statementSetAutoBatchDmlUpdateCount",
681+
"exampleStatements": ["set auto_batch_dml_update_count = 0", "set auto_batch_dml_update_count = 100"],
682+
"setStatement": {
683+
"propertyName": "AUTO_BATCH_DML_UPDATE_COUNT",
684+
"separator": "=",
685+
"allowedValues": "(\\d{1,19})",
686+
"converterName": "ClientSideStatementValueConverters$LongConverter"
687+
}
688+
},
689+
{
690+
"name": "SET AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = TRUE|FALSE",
691+
"executorName": "ClientSideStatementSetExecutor",
692+
"resultType": "NO_RESULT",
693+
"statementType": "SET_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION",
694+
"regex": "(?is)\\A\\s*set\\s+auto_batch_dml_update_count_verification\\s*(?:=)\\s*(.*)\\z",
695+
"method": "statementSetAutoBatchDmlUpdateCountVerification",
696+
"exampleStatements": ["set auto_batch_dml_update_count_verification = true", "set auto_batch_dml_update_count_verification = false"],
697+
"setStatement": {
698+
"propertyName": "AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION",
699+
"separator": "=",
700+
"allowedValues": "(TRUE|FALSE)",
701+
"converterName": "ClientSideStatementValueConverters$BooleanConverter"
702+
}
703+
},
632704
{
633705
"name": "SHOW VARIABLE DATA_BOOST_ENABLED",
634706
"executorName": "ClientSideStatementNoParamExecutor",

0 commit comments

Comments
 (0)