diff --git a/CHANGELOG.md b/CHANGELOG.md
index eb350402bc2..d6ee7b03582 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## [6.45.2](https://github.com/googleapis/java-spanner/compare/v6.45.1...v6.45.2) (2023-08-14)
+
+
+### Bug Fixes
+
+* GetColumnCount would fail for empty partititioned result sets ([#2588](https://github.com/googleapis/java-spanner/issues/2588)) ([9a2f3fc](https://github.com/googleapis/java-spanner/commit/9a2f3fc01748224fc8084fbf2b4a0223426b1603))
+
## [6.45.1](https://github.com/googleapis/java-spanner/compare/v6.45.0...v6.45.1) (2023-08-11)
diff --git a/README.md b/README.md
index 8c508d3f93c..88877d5aa4f 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
com.google.cloud
libraries-bom
- 26.21.0
+ 26.22.0
pom
import
@@ -57,13 +57,13 @@ implementation 'com.google.cloud:google-cloud-spanner'
If you are using Gradle without BOM, add this to your dependencies:
```Groovy
-implementation 'com.google.cloud:google-cloud-spanner:6.45.0'
+implementation 'com.google.cloud:google-cloud-spanner:6.45.1'
```
If you are using SBT, add this to your dependencies:
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.45.0"
+libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.45.1"
```
@@ -430,7 +430,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html
[stability-image]: https://img.shields.io/badge/stability-stable-green
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg
-[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.45.0
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.45.1
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index 7fbfef43a39..18c0bf707e6 100644
--- a/google-cloud-spanner-bom/pom.xml
+++ b/google-cloud-spanner-bom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-spanner-bom
- 6.45.1
+ 6.45.2
pom
com.google.cloud
@@ -53,48 +53,48 @@
com.google.cloud
google-cloud-spanner
- 6.45.1
+ 6.45.2
com.google.cloud
google-cloud-spanner-executor
- 6.45.1
+ 6.45.2
com.google.cloud
google-cloud-spanner
test-jar
- 6.45.1
+ 6.45.2
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.45.1
+ 6.45.2
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml
index adc61206b41..a8ac7aa658d 100644
--- a/google-cloud-spanner-executor/pom.xml
+++ b/google-cloud-spanner-executor/pom.xml
@@ -5,14 +5,14 @@
4.0.0
com.google.cloud
google-cloud-spanner-executor
- 6.45.1
+ 6.45.2
jar
Google Cloud Spanner Executor
com.google.cloud
google-cloud-spanner-parent
- 6.45.1
+ 6.45.2
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index 2a4c09c66d6..a03df2216b4 100644
--- a/google-cloud-spanner/pom.xml
+++ b/google-cloud-spanner/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-spanner
- 6.45.1
+ 6.45.2
jar
Google Cloud Spanner
https://github.com/googleapis/java-spanner
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.45.1
+ 6.45.2
google-cloud-spanner
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/MergedResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/MergedResultSet.java
index 1f7d15365fc..36451bc8f40 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/MergedResultSet.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/MergedResultSet.java
@@ -394,6 +394,26 @@ public Type getType() {
return rowProducer.getType();
}
+ @Override
+ public int getColumnCount() {
+ return getType().getStructFields().size();
+ }
+
+ @Override
+ public int getColumnIndex(String columnName) {
+ return getType().getFieldIndex(columnName);
+ }
+
+ @Override
+ public Type getColumnType(int columnIndex) {
+ return getType().getStructFields().get(columnIndex).getType();
+ }
+
+ @Override
+ public Type getColumnType(String columnName) {
+ return getType().getStructFields().get(getColumnIndex(columnName)).getType();
+ }
+
@Override
public int getNumPartitions() {
return rowProducer.getNumPartitions();
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MergedResultSetTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MergedResultSetTest.java
index b9d9578d6b9..c8295fd5eca 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MergedResultSetTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/MergedResultSetTest.java
@@ -17,6 +17,7 @@
package com.google.cloud.spanner.connection;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -30,6 +31,7 @@
import com.google.cloud.spanner.SpannerException;
import com.google.cloud.spanner.SpannerExceptionFactory;
import com.google.cloud.spanner.Struct;
+import com.google.cloud.spanner.Type;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collection;
@@ -140,6 +142,19 @@ public void testAllResultsAreReturned() {
while (resultSet.next()) {
assertRowExists(results.allRows, resultSet.getCurrentRowAsStruct(), rowsFound);
}
+ // Verify that we can get the metadata after having gotten all rows.
+ // This failed in the initial release of this feature for result sets that were empty. The
+ // reason for that was that the initial implementation would do a call to currentRowAsStruct,
+ // which would always be null for result sets that never returned any data.
+ assertNotNull(resultSet.getMetadata());
+ if (numPartitions == 0) {
+ assertEquals(0, resultSet.getColumnCount());
+ } else {
+ assertEquals(18, resultSet.getColumnCount());
+ assertEquals(Type.bool(), resultSet.getColumnType(0));
+ assertEquals(Type.bool(), resultSet.getColumnType("COL0"));
+ assertEquals(10, resultSet.getColumnIndex("COL10"));
+ }
// Check that all rows were found.
assertEquals(results.allRows.size(), rowsFound.nextClearBit(0));
// Check extended metadata.
diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
index 560e6133a44..a58b2a45da3 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.45.1
+ 6.45.2
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.45.1
+ 6.45.2
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index d70202912ac..ea3f8f5b035 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.45.1
+ 6.45.2
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.45.1
+ 6.45.2
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index 998a11a850c..975fa6db31b 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.45.1
+ 6.45.2
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.45.1
+ 6.45.2
diff --git a/pom.xml b/pom.xml
index 70a1df1a8aa..77d76689ea8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.45.1
+ 6.45.2
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.45.1
+ 6.45.2
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.45.1
+ 6.45.2
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.45.1
+ 6.45.2
com.google.cloud
google-cloud-spanner
- 6.45.1
+ 6.45.2
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index 16f77341394..2ee84861e65 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.45.1
+ 6.45.2
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.45.1
+ 6.45.2
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index 6603ea20cd9..b933334609d 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.45.1
+ 6.45.2
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.45.1
+ 6.45.2
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index 38671171352..ab16c464ee4 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.45.1
+ 6.45.2
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.45.1
+ 6.45.2
diff --git a/samples/native-image/pom.xml b/samples/native-image/pom.xml
index a1e05ff48d7..1655dc936e4 100644
--- a/samples/native-image/pom.xml
+++ b/samples/native-image/pom.xml
@@ -28,7 +28,7 @@
com.google.cloud
libraries-bom
- 26.21.0
+ 26.22.0
pom
import
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 5af0327ef23..f07cf25d19e 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -31,7 +31,7 @@
com.google.cloud
google-cloud-spanner
- 6.45.1
+ 6.45.2
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 610de713747..8f312776692 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -33,7 +33,7 @@
com.google.cloud
libraries-bom
- 26.21.0
+ 26.22.0
pom
import
diff --git a/versions.txt b/versions.txt
index 240240a1965..1ce299e8752 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,11 +1,11 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.45.1:6.45.1
-proto-google-cloud-spanner-v1:6.45.1:6.45.1
-proto-google-cloud-spanner-admin-database-v1:6.45.1:6.45.1
-grpc-google-cloud-spanner-v1:6.45.1:6.45.1
-grpc-google-cloud-spanner-admin-instance-v1:6.45.1:6.45.1
-grpc-google-cloud-spanner-admin-database-v1:6.45.1:6.45.1
-google-cloud-spanner:6.45.1:6.45.1
-google-cloud-spanner-executor:6.45.1:6.45.1
+proto-google-cloud-spanner-admin-instance-v1:6.45.2:6.45.2
+proto-google-cloud-spanner-v1:6.45.2:6.45.2
+proto-google-cloud-spanner-admin-database-v1:6.45.2:6.45.2
+grpc-google-cloud-spanner-v1:6.45.2:6.45.2
+grpc-google-cloud-spanner-admin-instance-v1:6.45.2:6.45.2
+grpc-google-cloud-spanner-admin-database-v1:6.45.2:6.45.2
+google-cloud-spanner:6.45.2:6.45.2
+google-cloud-spanner-executor:6.45.2:6.45.2