Skip to content

Commit 9f51b64

Browse files
fix: Noop in case there is no change in autocommit value for setAutocommit() method (#2662)
* Fix: Noop in case there is no change in autocommit value for setAutocommit() method * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent efe95b0 commit 9f51b64

File tree

3 files changed

+145
-3
lines changed

3 files changed

+145
-3
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ implementation 'com.google.cloud:google-cloud-spanner'
5757
If you are using Gradle without BOM, add this to your dependencies:
5858

5959
```Groovy
60-
implementation 'com.google.cloud:google-cloud-spanner:6.49.0'
60+
implementation 'com.google.cloud:google-cloud-spanner:6.50.0'
6161
```
6262

6363
If you are using SBT, add this to your dependencies:
6464

6565
```Scala
66-
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.49.0"
66+
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.50.0"
6767
```
6868
<!-- {x-version-update-end} -->
6969

@@ -432,7 +432,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
432432
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html
433433
[stability-image]: https://img.shields.io/badge/stability-stable-green
434434
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg
435-
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.49.0
435+
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.50.0
436436
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
437437
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
438438
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles

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

+3
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,9 @@ public boolean isClosed() {
402402
@Override
403403
public void setAutocommit(boolean autocommit) {
404404
ConnectionPreconditions.checkState(!isClosed(), CLOSED_ERROR_MSG);
405+
if (isAutocommit() == autocommit) {
406+
return;
407+
}
405408
ConnectionPreconditions.checkState(!isBatchActive(), "Cannot set autocommit while in a batch");
406409
ConnectionPreconditions.checkState(
407410
!isTransactionStarted(), "Cannot set autocommit while a transaction is active");

google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java

+139
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,145 @@ public void testExecuteSetAutocommitOff() {
412412
}
413413
}
414414

415+
@Test
416+
public void testSetAutocommitToTrue_inAutoCommitAndNotInTransaction_noop() {
417+
try (ConnectionImpl subject =
418+
createConnection(
419+
ConnectionOptions.newBuilder()
420+
.setCredentials(NoCredentials.getInstance())
421+
.setUri(URI)
422+
.build())) {
423+
assertThat(subject.isAutocommit(), is(true));
424+
425+
subject.setAutocommit(true);
426+
427+
assertTrue(subject.isAutocommit());
428+
}
429+
}
430+
431+
@Test
432+
public void testSetAutocommitToTrue_inAutoCommitAndInTransaction_noop() {
433+
try (ConnectionImpl subject =
434+
createConnection(
435+
ConnectionOptions.newBuilder()
436+
.setCredentials(NoCredentials.getInstance())
437+
.setUri(URI)
438+
.build())) {
439+
assertThat(subject.isAutocommit(), is(true));
440+
subject.execute(Statement.of("begin transaction"));
441+
442+
subject.setAutocommit(true);
443+
444+
assertTrue(subject.isAutocommit());
445+
}
446+
}
447+
448+
@Test
449+
public void testSetAutocommitToFalse_inAutoCommitAndNotInTransaction_autocommitModeChanged() {
450+
try (ConnectionImpl subject =
451+
createConnection(
452+
ConnectionOptions.newBuilder()
453+
.setCredentials(NoCredentials.getInstance())
454+
.setUri(URI)
455+
.build())) {
456+
assertThat(subject.isAutocommit(), is(true));
457+
458+
subject.setAutocommit(false);
459+
460+
assertFalse(subject.isAutocommit());
461+
}
462+
}
463+
464+
@Test
465+
public void testSetAutocommitToFalse_inAutoCommitAndInTransaction_throwsException() {
466+
try (ConnectionImpl subject =
467+
createConnection(
468+
ConnectionOptions.newBuilder()
469+
.setCredentials(NoCredentials.getInstance())
470+
.setUri(URI)
471+
.build())) {
472+
assertThat(subject.isAutocommit(), is(true));
473+
subject.execute(Statement.of("begin transaction"));
474+
475+
SpannerException exception =
476+
assertThrows(SpannerException.class, () -> subject.setAutocommit(false));
477+
assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode());
478+
assertTrue(
479+
exception
480+
.getMessage()
481+
.contains("Cannot set autocommit while in a temporary transaction"));
482+
}
483+
}
484+
485+
@Test
486+
public void testSetAutocommitToFalse_notInAutoCommitAndTransactionNotStarted_noop() {
487+
try (ConnectionImpl subject =
488+
createConnection(
489+
ConnectionOptions.newBuilder()
490+
.setCredentials(NoCredentials.getInstance())
491+
.setUri(URI + ";autocommit=false")
492+
.build())) {
493+
assertThat(subject.isAutocommit(), is(false));
494+
495+
subject.setAutocommit(false);
496+
497+
assertFalse(subject.isAutocommit());
498+
}
499+
}
500+
501+
@Test
502+
public void testSetAutocommitToFalse_notInAutoCommitAndTransactionStarted_noop() {
503+
try (ConnectionImpl subject =
504+
createConnection(
505+
ConnectionOptions.newBuilder()
506+
.setCredentials(NoCredentials.getInstance())
507+
.setUri(URI + ";autocommit=false")
508+
.build())) {
509+
assertThat(subject.isAutocommit(), is(false));
510+
subject.executeQuery(Statement.of(SELECT));
511+
512+
subject.setAutocommit(false);
513+
514+
assertFalse(subject.isAutocommit());
515+
}
516+
}
517+
518+
@Test
519+
public void
520+
testSetAutocommitToTrue_notInAutoCommitAndTransactionNotStarted_autocommitModeChanged() {
521+
try (ConnectionImpl subject =
522+
createConnection(
523+
ConnectionOptions.newBuilder()
524+
.setCredentials(NoCredentials.getInstance())
525+
.setUri(URI + ";autocommit=false")
526+
.build())) {
527+
assertThat(subject.isAutocommit(), is(false));
528+
529+
subject.setAutocommit(true);
530+
531+
assertTrue(subject.isAutocommit());
532+
}
533+
}
534+
535+
@Test
536+
public void testSetAutocommitToTrue_notInAutoCommitAndTransactionStarted_throwsException() {
537+
try (ConnectionImpl subject =
538+
createConnection(
539+
ConnectionOptions.newBuilder()
540+
.setCredentials(NoCredentials.getInstance())
541+
.setUri(URI + ";autocommit=false")
542+
.build())) {
543+
assertThat(subject.isAutocommit(), is(false));
544+
subject.executeQuery(Statement.of(SELECT));
545+
546+
SpannerException exception =
547+
assertThrows(SpannerException.class, () -> subject.setAutocommit(true));
548+
assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode());
549+
assertTrue(
550+
exception.getMessage().contains("Cannot set autocommit while a transaction is active"));
551+
}
552+
}
553+
415554
@Test
416555
public void testExecuteGetAutocommit() {
417556
try (ConnectionImpl subject =

0 commit comments

Comments
 (0)