Skip to content
This repository was archived by the owner on Apr 7, 2026. It is now read-only.

Commit 625ea7b

Browse files
committed
Merge branch 'main' into PR #4026 to update
2 parents 241ae34 + 3e4006c commit 625ea7b

19 files changed

Lines changed: 126 additions & 56 deletions

File tree

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# Changelog
22

3+
## [6.112.0](https://github.com/googleapis/java-spanner/compare/v6.111.1...v6.112.0) (2026-03-17)
4+
5+
6+
### Features
7+
8+
* Ability to update credentials on long running client ([#4371](https://github.com/googleapis/java-spanner/issues/4371)) ([e238990](https://github.com/googleapis/java-spanner/commit/e238990077badb063b1b05b0d71f58859434f7ee))
9+
* Add SI, adapt, split point related proto ([7aa4d90](https://github.com/googleapis/java-spanner/commit/7aa4d90cd4f001713ee2b0b5113303a748b237e0))
10+
* **spanner:** Include cache updates and routing hint into BeginTransaction and Commit request/response respectively ([7aa4d90](https://github.com/googleapis/java-spanner/commit/7aa4d90cd4f001713ee2b0b5113303a748b237e0))
11+
12+
13+
### Bug Fixes
14+
15+
* **deps:** Update the Java code generator (gapic-generator-java) to 2.67.0 ([7aa4d90](https://github.com/googleapis/java-spanner/commit/7aa4d90cd4f001713ee2b0b5113303a748b237e0))
16+
* Fix unclosed literal error for consecutive backslashes ([#4387](https://github.com/googleapis/java-spanner/issues/4387)) ([f4884a8](https://github.com/googleapis/java-spanner/commit/f4884a83d15dcff6e246c7db47c8bafc3369a0a3))
17+
318
## [6.111.1](https://github.com/googleapis/java-spanner/compare/v6.111.0...v6.111.1) (2026-03-03)
419

520

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ implementation 'com.google.cloud:google-cloud-spanner'
5656
If you are using Gradle without BOM, add this to your dependencies:
5757

5858
```Groovy
59-
implementation 'com.google.cloud:google-cloud-spanner:6.111.1'
59+
implementation 'com.google.cloud:google-cloud-spanner:6.112.0'
6060
```
6161

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

6464
```Scala
65-
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.111.1"
65+
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.112.0"
6666
```
6767

6868
## Authentication
@@ -549,7 +549,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
549549
[javadocs]: https://cloud.google.com/java/docs/reference/google-cloud-spanner/latest/history
550550
[stability-image]: https://img.shields.io/badge/stability-stable-green
551551
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg
552-
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.111.1
552+
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.112.0
553553
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
554554
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
555555
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles

benchmarks/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<parent>
2525
<groupId>com.google.cloud</groupId>
2626
<artifactId>google-cloud-spanner-parent</artifactId>
27-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
27+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
2828
</parent>
2929

3030
<properties>

google-cloud-spanner-bom/pom.xml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.google.cloud</groupId>
55
<artifactId>google-cloud-spanner-bom</artifactId>
6-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
6+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
77
<packaging>pom</packaging>
88
<parent>
99
<groupId>com.google.cloud</groupId>
@@ -53,43 +53,43 @@
5353
<dependency>
5454
<groupId>com.google.cloud</groupId>
5555
<artifactId>google-cloud-spanner</artifactId>
56-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
56+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
5757
</dependency>
5858
<dependency>
5959
<groupId>com.google.cloud</groupId>
6060
<artifactId>google-cloud-spanner</artifactId>
6161
<type>test-jar</type>
62-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
62+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
6363
</dependency>
6464
<dependency>
6565
<groupId>com.google.api.grpc</groupId>
6666
<artifactId>grpc-google-cloud-spanner-v1</artifactId>
67-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-v1:current} -->
67+
<version>6.112.0</version><!-- {x-version-update:grpc-google-cloud-spanner-v1:current} -->
6868
</dependency>
6969
<dependency>
7070
<groupId>com.google.api.grpc</groupId>
7171
<artifactId>grpc-google-cloud-spanner-admin-instance-v1</artifactId>
72-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
72+
<version>6.112.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
7373
</dependency>
7474
<dependency>
7575
<groupId>com.google.api.grpc</groupId>
7676
<artifactId>grpc-google-cloud-spanner-admin-database-v1</artifactId>
77-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
77+
<version>6.112.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
7878
</dependency>
7979
<dependency>
8080
<groupId>com.google.api.grpc</groupId>
8181
<artifactId>proto-google-cloud-spanner-admin-instance-v1</artifactId>
82-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-admin-instance-v1:current} -->
82+
<version>6.112.0</version><!-- {x-version-update:proto-google-cloud-spanner-admin-instance-v1:current} -->
8383
</dependency>
8484
<dependency>
8585
<groupId>com.google.api.grpc</groupId>
8686
<artifactId>proto-google-cloud-spanner-v1</artifactId>
87-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-v1:current} -->
87+
<version>6.112.0</version><!-- {x-version-update:proto-google-cloud-spanner-v1:current} -->
8888
</dependency>
8989
<dependency>
9090
<groupId>com.google.api.grpc</groupId>
9191
<artifactId>proto-google-cloud-spanner-admin-database-v1</artifactId>
92-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-admin-database-v1:current} -->
92+
<version>6.112.0</version><!-- {x-version-update:proto-google-cloud-spanner-admin-database-v1:current} -->
9393
</dependency>
9494
</dependencies>
9595
</dependencyManagement>

google-cloud-spanner-executor/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
<modelVersion>4.0.0</modelVersion>
66
<groupId>com.google.cloud</groupId>
77
<artifactId>google-cloud-spanner-executor</artifactId>
8-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner-executor:current} -->
8+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner-executor:current} -->
99
<packaging>jar</packaging>
1010
<name>Google Cloud Spanner Executor</name>
1111

1212
<parent>
1313
<groupId>com.google.cloud</groupId>
1414
<artifactId>google-cloud-spanner-parent</artifactId>
15-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
15+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
1616
</parent>
1717

1818
<properties>

google-cloud-spanner/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.google.cloud</groupId>
55
<artifactId>google-cloud-spanner</artifactId>
6-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
6+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
77
<packaging>jar</packaging>
88
<name>Google Cloud Spanner</name>
99
<url>https://github.com/googleapis/java-spanner</url>
1010
<description>Java idiomatic client for Google Cloud Spanner.</description>
1111
<parent>
1212
<groupId>com.google.cloud</groupId>
1313
<artifactId>google-cloud-spanner-parent</artifactId>
14-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
14+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
1515
</parent>
1616
<properties>
1717
<site.installationModule>google-cloud-spanner</site.installationModule>

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ String removeCommentsAndTrimInternal(String sql) {
145145
startQuote = 0;
146146
}
147147
} else if (c == '\\') {
148-
lastCharWasEscapeChar = true;
148+
lastCharWasEscapeChar = !lastCharWasEscapeChar;
149149
} else {
150150
lastCharWasEscapeChar = false;
151151
}
@@ -294,7 +294,7 @@ protected boolean checkReturningClauseInternal(String rawSql) {
294294
startQuote = 0;
295295
}
296296
} else if (c == '\\') {
297-
lastCharWasEscapeChar = true;
297+
lastCharWasEscapeChar = !lastCharWasEscapeChar;
298298
} else {
299299
lastCharWasEscapeChar = false;
300300
}

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@
1616

1717
package com.google.cloud.spanner.connection;
1818

19+
import static com.google.cloud.spanner.ErrorCode.INVALID_ARGUMENT;
1920
import static com.google.cloud.spanner.connection.StatementParserTest.assertUnclosedLiteral;
2021
import static org.junit.Assert.assertEquals;
22+
import static org.junit.Assert.assertFalse;
23+
import static org.junit.Assert.assertTrue;
24+
import static org.junit.Assert.fail;
2125

2226
import com.google.cloud.spanner.Dialect;
27+
import com.google.cloud.spanner.SpannerException;
28+
import com.google.cloud.spanner.Statement;
2329
import com.google.cloud.spanner.connection.StatementParserTest.CommentInjector;
2430
import org.junit.Test;
2531
import org.junit.runner.RunWith;
@@ -39,6 +45,55 @@ static String skip(String sql, int currentIndex) {
3945
return sql.substring(currentIndex, position);
4046
}
4147

48+
@Test
49+
public void testRemoveCommentsAndTrim() {
50+
AbstractStatementParser parser =
51+
AbstractStatementParser.getInstance(Dialect.GOOGLE_STANDARD_SQL);
52+
53+
// Statements that should parse correctly
54+
String[] validStatements =
55+
new String[] {
56+
"SELECT '\\\\'", // SELECT '\\' (escaped backslash, followed by quote)
57+
"SELECT '\\''", // SELECT '\'' (escaped quote, followed by an actual closing quote)
58+
"SELECT '\\\\\\\\'" // SELECT '\\\\' (two escaped backslashes)
59+
};
60+
for (String sql : validStatements) {
61+
assertEquals(sql, parser.removeCommentsAndTrim(sql));
62+
}
63+
64+
// Statements that contain an unclosed literal because the final quote is
65+
// escaped
66+
String[] invalidStatements =
67+
new String[] {
68+
"SELECT '\\'" // SELECT '\' (escaped closing quote)
69+
};
70+
71+
for (String sql : invalidStatements) {
72+
try {
73+
parser.removeCommentsAndTrim(sql);
74+
fail("Expected SpannerException for unclosed literal: " + sql);
75+
} catch (SpannerException e) {
76+
assertEquals(INVALID_ARGUMENT, e.getErrorCode());
77+
}
78+
}
79+
}
80+
81+
@Test
82+
public void testReturningClauseWithBackslashes() {
83+
AbstractStatementParser parser =
84+
AbstractStatementParser.getInstance(Dialect.GOOGLE_STANDARD_SQL);
85+
86+
// Valid returning clause, double backslash in string literal should be handled
87+
// correctly.
88+
String sqlWithReturning = "INSERT INTO my_table (value) VALUES ('foo \\\\ bar') THEN RETURN id";
89+
assertTrue(parser.parse(Statement.of(sqlWithReturning)).hasReturningClause());
90+
91+
// No returning clause, `then return` is inside a string literal with a double
92+
// backslash.
93+
String sqlWithoutReturning = "INSERT INTO my_table (value) VALUES ('then \\\\ return')";
94+
assertFalse(parser.parse(Statement.of(sqlWithoutReturning)).hasReturningClause());
95+
}
96+
4297
@Test
4398
public void testSkip() {
4499
assertEquals("", skip(""));

grpc-google-cloud-spanner-admin-database-v1/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.google.api.grpc</groupId>
66
<artifactId>grpc-google-cloud-spanner-admin-database-v1</artifactId>
7-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
7+
<version>6.112.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
88
<name>grpc-google-cloud-spanner-admin-database-v1</name>
99
<description>GRPC library for grpc-google-cloud-spanner-admin-database-v1</description>
1010
<parent>
1111
<groupId>com.google.cloud</groupId>
1212
<artifactId>google-cloud-spanner-parent</artifactId>
13-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
13+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
1414
</parent>
1515
<dependencies>
1616
<dependency>

grpc-google-cloud-spanner-admin-instance-v1/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.google.api.grpc</groupId>
66
<artifactId>grpc-google-cloud-spanner-admin-instance-v1</artifactId>
7-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
7+
<version>6.112.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
88
<name>grpc-google-cloud-spanner-admin-instance-v1</name>
99
<description>GRPC library for grpc-google-cloud-spanner-admin-instance-v1</description>
1010
<parent>
1111
<groupId>com.google.cloud</groupId>
1212
<artifactId>google-cloud-spanner-parent</artifactId>
13-
<version>6.111.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
13+
<version>6.112.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
1414
</parent>
1515
<dependencies>
1616
<dependency>

0 commit comments

Comments
 (0)