From 0550d5ae46b9f76cdcd1f0024eb4aa6c206d6310 Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Sat, 19 Feb 2022 01:06:47 +0000
Subject: [PATCH 1/6] chore(main): release 6.19.2-SNAPSHOT (#1702)
:robot: I have created a release *beep* *boop*
---
### Updating meta-information for bleeding-edge SNAPSHOT release.
---
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
---
google-cloud-spanner-bom/pom.xml | 18 +++++++++---------
google-cloud-spanner/pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
grpc-google-cloud-spanner-v1/pom.xml | 4 ++--
pom.xml | 16 ++++++++--------
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
proto-google-cloud-spanner-v1/pom.xml | 4 ++--
samples/snapshot/pom.xml | 2 +-
versions.txt | 14 +++++++-------
11 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index be86321add7..23cd2623818 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.19.1
+ 6.19.2-SNAPSHOT
pom
com.google.cloud
@@ -53,43 +53,43 @@
com.google.cloud
google-cloud-spanner
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.cloud
google-cloud-spanner
test-jar
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index 5d7a84bb07a..46b11e401c8 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.19.1
+ 6.19.2-SNAPSHOT
jar
Google Cloud Spanner
https://github.com/googleapis/java-spanner
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.19.1
+ 6.19.2-SNAPSHOT
google-cloud-spanner
diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
index d13f2d16bbb..e2bff345815 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.19.1
+ 6.19.2-SNAPSHOT
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.19.1
+ 6.19.2-SNAPSHOT
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index 12e9eca71c7..ede4c947a83 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.19.1
+ 6.19.2-SNAPSHOT
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.19.1
+ 6.19.2-SNAPSHOT
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index 3579c92a431..b6b1c4df3db 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.19.1
+ 6.19.2-SNAPSHOT
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.19.1
+ 6.19.2-SNAPSHOT
diff --git a/pom.xml b/pom.xml
index f8f6f140ae0..a62daaabf0a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.19.1
+ 6.19.2-SNAPSHOT
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.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.19.1
+ 6.19.2-SNAPSHOT
com.google.cloud
google-cloud-spanner
- 6.19.1
+ 6.19.2-SNAPSHOT
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index 0d2e96622d0..5f8087517bf 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.19.1
+ 6.19.2-SNAPSHOT
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.19.1
+ 6.19.2-SNAPSHOT
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index 11d9d592440..81a497ede06 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.19.1
+ 6.19.2-SNAPSHOT
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.19.1
+ 6.19.2-SNAPSHOT
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index 626b15727b6..e440c2292fa 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.19.1
+ 6.19.2-SNAPSHOT
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.19.1
+ 6.19.2-SNAPSHOT
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index b24ac8aa1d0..8f1df624b1c 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -31,7 +31,7 @@
com.google.cloud
google-cloud-spanner
- 6.19.1
+ 6.19.2-SNAPSHOT
diff --git a/versions.txt b/versions.txt
index b39be648e3f..0f0f1ce6ab7 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,10 +1,10 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.19.1:6.19.1
-proto-google-cloud-spanner-v1:6.19.1:6.19.1
-proto-google-cloud-spanner-admin-database-v1:6.19.1:6.19.1
-grpc-google-cloud-spanner-v1:6.19.1:6.19.1
-grpc-google-cloud-spanner-admin-instance-v1:6.19.1:6.19.1
-grpc-google-cloud-spanner-admin-database-v1:6.19.1:6.19.1
-google-cloud-spanner:6.19.1:6.19.1
+proto-google-cloud-spanner-admin-instance-v1:6.19.1:6.19.2-SNAPSHOT
+proto-google-cloud-spanner-v1:6.19.1:6.19.2-SNAPSHOT
+proto-google-cloud-spanner-admin-database-v1:6.19.1:6.19.2-SNAPSHOT
+grpc-google-cloud-spanner-v1:6.19.1:6.19.2-SNAPSHOT
+grpc-google-cloud-spanner-admin-instance-v1:6.19.1:6.19.2-SNAPSHOT
+grpc-google-cloud-spanner-admin-database-v1:6.19.1:6.19.2-SNAPSHOT
+google-cloud-spanner:6.19.1:6.19.2-SNAPSHOT
From a51973b1a87c0a57b114892fe39a24caa1458d1d Mon Sep 17 00:00:00 2001
From: Thiago Nunes
Date: Mon, 21 Feb 2022 14:07:13 +1100
Subject: [PATCH 2/6] feat: allows for getting json columns using getValue
(#1699)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: allow for retrieving json using getValue
Allows for getting JSON values using resultSet.getValue().
* feat: allows for value.getString on json values
Overrides the getString method in json values to allow for getString and
getStringArray on json values.
* fix: fix test (wrong method called)
Co-authored-by: Knut Olav Løite
* fix: fix test (wrong method called)
Co-authored-by: Knut Olav Løite
* 🦉 Updates from OwlBot post-processor
See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md
* 🦉 Updates from OwlBot post-processor
See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md
Co-authored-by: Knut Olav Løite
Co-authored-by: Owl Bot
---
README.md | 4 +-
.../cloud/spanner/AbstractResultSet.java | 4 ++
.../java/com/google/cloud/spanner/Value.java | 10 ++++
.../com/google/cloud/spanner/ValueTest.java | 48 +++++++++++--------
.../cloud/spanner/it/ITResultSetGetValue.java | 22 ++++++++-
5 files changed, 64 insertions(+), 24 deletions(-)
diff --git a/README.md b/README.md
index afe439ac3ec..0ca34109dc3 100644
--- a/README.md
+++ b/README.md
@@ -56,13 +56,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.19.0'
+implementation 'com.google.cloud:google-cloud-spanner:6.19.1'
```
If you are using SBT, add this to your dependencies
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.19.0"
+libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.19.1"
```
## Authentication
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java
index 6143386293d..bc4f224b939 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java
@@ -713,6 +713,8 @@ protected Value getValueInternal(int columnIndex) {
return Value.float64(isNull ? null : getDoubleInternal(columnIndex));
case STRING:
return Value.string(isNull ? null : getStringInternal(columnIndex));
+ case JSON:
+ return Value.json(isNull ? null : getJsonInternal(columnIndex));
case BYTES:
return Value.bytes(isNull ? null : getBytesInternal(columnIndex));
case TIMESTAMP:
@@ -736,6 +738,8 @@ protected Value getValueInternal(int columnIndex) {
return Value.float64Array(isNull ? null : getDoubleListInternal(columnIndex));
case STRING:
return Value.stringArray(isNull ? null : getStringListInternal(columnIndex));
+ case JSON:
+ return Value.jsonArray(isNull ? null : getJsonListInternal(columnIndex));
case BYTES:
return Value.bytesArray(isNull ? null : getBytesListInternal(columnIndex));
case TIMESTAMP:
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Value.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Value.java
index db9cee56e92..0bbeb36abf0 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Value.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Value.java
@@ -1151,6 +1151,11 @@ public String getJson() {
return value;
}
+ @Override
+ public String getString() {
+ return getJson();
+ }
+
@Override
void valueToString(StringBuilder b) {
if (value.length() > MAX_DEBUG_STRING_LENGTH) {
@@ -1587,6 +1592,11 @@ public List getJsonArray() {
return value;
}
+ @Override
+ public List getStringArray() {
+ return getJsonArray();
+ }
+
@Override
void appendElement(StringBuilder b, String element) {
b.append(element);
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java
index a350fe68469..08849274de5 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java
@@ -19,6 +19,7 @@
import static com.google.common.testing.SerializableTester.reserializeAndAssert;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
@@ -42,6 +43,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.function.Supplier;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -416,6 +418,7 @@ public void json() {
assertEquals(Type.json(), v.getType());
assertFalse(v.isNull());
assertEquals(json, v.getJson());
+ assertEquals(json, v.getString());
}
@Test
@@ -424,12 +427,8 @@ public void jsonNull() {
assertEquals(Type.json(), v.getType());
assertTrue(v.isNull());
assertEquals(NULL_STRING, v.toString());
- try {
- v.getJson();
- fail("Expected exception");
- } catch (IllegalStateException e) {
- assertThat(e.getMessage().contains("null value"));
- }
+ assertThrowsWithMessage(v::getJson, "null value");
+ assertThrowsWithMessage(v::getString, "null value");
}
@Test
@@ -834,8 +833,9 @@ public void jsonArray() {
String three = "{\"color\":\"red\",\"value\":\"#f00\"}";
Value v = Value.jsonArray(Arrays.asList(one, two, three));
assertFalse(v.isNull());
- assertThat(v.getJsonArray()).containsExactly(one, two, three).inOrder();
+ assertArrayEquals(new String[] {one, two, three}, v.getJsonArray().toArray());
assertEquals("[{},NULL,{\"color\":\"red\",\"value\":\"#f00\"}]", v.toString());
+ assertArrayEquals(new String[] {one, two, three}, v.getStringArray().toArray());
}
@Test
@@ -843,12 +843,8 @@ public void jsonArrayNull() {
Value v = Value.jsonArray(null);
assertTrue(v.isNull());
assertEquals(NULL_STRING, v.toString());
- try {
- v.getJsonArray();
- fail("Expected exception");
- } catch (IllegalStateException e) {
- assertThat(e.getMessage().contains("null value"));
- }
+ assertThrowsWithMessage(v::getJsonArray, "null value");
+ assertThrowsWithMessage(v::getStringArray, "null value");
}
@Test
@@ -863,14 +859,9 @@ public void jsonArrayTryGetBytesArray() {
}
@Test
- public void jsonArrayTryGetStringArray() {
- Value value = Value.jsonArray(Arrays.asList("{}"));
- try {
- value.getStringArray();
- fail("Expected exception");
- } catch (IllegalStateException e) {
- assertThat(e.getMessage().contains("Expected: ARRAY actual: ARRAY"));
- }
+ public void jsonArrayTryGetFloat64Array() {
+ Value value = Value.jsonArray(Collections.singletonList("{}"));
+ assertThrowsWithMessage(value::getFloat64Array, "Expected: ARRAY actual: ARRAY");
}
@Test
@@ -1810,4 +1801,19 @@ private void writeObject(@SuppressWarnings("unused") java.io.ObjectOutputStream
throw new IllegalStateException("Serialization disabled");
}
}
+
+ private void assertThrowsWithMessage(Supplier> supplier, String message) {
+ try {
+ supplier.get();
+ fail("Expected exception");
+ } catch (Exception e) {
+ assertTrue(
+ "Expected exception message to contain: \""
+ + message
+ + "\", actual: \""
+ + e.getMessage()
+ + "\"",
+ e.getMessage().contains(message));
+ }
+ }
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITResultSetGetValue.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITResultSetGetValue.java
index 64220421bf1..e48b2f35fd0 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITResultSetGetValue.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITResultSetGetValue.java
@@ -101,6 +101,7 @@ public static void beforeClass()
+ "bytes BYTES(MAX),"
+ "timestamp TIMESTAMP,"
+ "date DATE,"
+ + "json JSON,"
+ "boolArray ARRAY,"
+ "int64Array ARRAY,"
+ "float64Array ARRAY,"
@@ -108,7 +109,8 @@ public static void beforeClass()
+ "stringArray ARRAY,"
+ "bytesArray ARRAY,"
+ "timestampArray ARRAY,"
- + "dateArray ARRAY"
+ + "dateArray ARRAY,"
+ + "jsonArray ARRAY"
+ ") PRIMARY KEY (Id)");
googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSqlDatabase);
if (!EmulatorSpannerHelper.isUsingEmulator()) {
@@ -167,6 +169,8 @@ public void testReadNonNullValuesGoogleStandardSQL() {
.to(Timestamp.ofTimeSecondsAndNanos(1, 0))
.set("date")
.to(Date.fromYearMonthDay(2021, 1, 2))
+ .set("json")
+ .to(Value.json("{\"key\":\"value\"}"))
.set("boolArray")
.toBoolArray(new boolean[] {false, true})
.set("int64Array")
@@ -189,6 +193,8 @@ public void testReadNonNullValuesGoogleStandardSQL() {
.toDateArray(
Arrays.asList(
Date.fromYearMonthDay(2021, 2, 3), Date.fromYearMonthDay(2021, 3, 4)))
+ .set("jsonArray")
+ .toJsonArray(Arrays.asList("{\"key1\":\"value1\"}", "{\"key2\":\"value2\"}"))
.build()));
try (ResultSet resultSet =
databaseClient
@@ -206,6 +212,7 @@ public void testReadNonNullValuesGoogleStandardSQL() {
assertEquals(
Value.timestamp(Timestamp.ofTimeSecondsAndNanos(1, 0)), resultSet.getValue("timestamp"));
assertEquals(Value.date(Date.fromYearMonthDay(2021, 1, 2)), resultSet.getValue("date"));
+ assertEquals(Value.json("{\"key\":\"value\"}"), resultSet.getValue("json"));
assertEquals(Value.boolArray(new boolean[] {false, true}), resultSet.getValue("boolArray"));
assertEquals(Value.int64Array(new long[] {100L, 200L}), resultSet.getValue("int64Array"));
assertArrayEquals(
@@ -231,6 +238,9 @@ public void testReadNonNullValuesGoogleStandardSQL() {
Value.dateArray(
Arrays.asList(Date.fromYearMonthDay(2021, 2, 3), Date.fromYearMonthDay(2021, 3, 4))),
resultSet.getValue("dateArray"));
+ assertEquals(
+ Value.jsonArray(Arrays.asList("{\"key1\":\"value1\"}", "{\"key2\":\"value2\"}")),
+ resultSet.getValue("jsonArray"));
}
}
@@ -300,6 +310,8 @@ public void testReadNullValuesGoogleStandardSQL() {
IllegalStateException.class, () -> resultSet.getValue("timestamp").getTimestamp());
assertTrue(resultSet.getValue("date").isNull());
assertThrows(IllegalStateException.class, () -> resultSet.getValue("date").getDate());
+ assertTrue(resultSet.getValue("json").isNull());
+ assertThrows(IllegalStateException.class, () -> resultSet.getValue("json").getJson());
assertTrue(resultSet.getValue("boolArray").isNull());
assertThrows(
IllegalStateException.class, () -> resultSet.getValue("boolArray").getBoolArray());
@@ -325,6 +337,9 @@ public void testReadNullValuesGoogleStandardSQL() {
assertTrue(resultSet.getValue("dateArray").isNull());
assertThrows(
IllegalStateException.class, () -> resultSet.getValue("dateArray").getDateArray());
+ assertTrue(resultSet.getValue("jsonArray").isNull());
+ assertThrows(
+ IllegalStateException.class, () -> resultSet.getValue("jsonArray").getJsonArray());
}
}
@@ -379,6 +394,8 @@ public void testReadNullValuesInArrays() {
.toTimestampArray(Arrays.asList(null, Timestamp.ofTimeSecondsAndNanos(20, 0)))
.set("dateArray")
.toDateArray(Arrays.asList(Date.fromYearMonthDay(2021, 2, 3), null))
+ .set("jsonArray")
+ .toJsonArray(Arrays.asList("{\"key1\":\"value1\"}", null))
.build()));
try (ResultSet resultSet =
@@ -406,6 +423,9 @@ public void testReadNullValuesInArrays() {
assertEquals(
Value.dateArray(Arrays.asList(Date.fromYearMonthDay(2021, 2, 3), null)),
resultSet.getValue("dateArray"));
+ assertEquals(
+ Value.jsonArray(Arrays.asList("{\"key1\":\"value1\"}", null)),
+ resultSet.getValue("jsonArray"));
}
}
From 91e157a6dcd08afd81a4cbddffcb8e02defb8d3a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?=
Date: Mon, 21 Feb 2022 19:21:22 +0100
Subject: [PATCH 3/6] fix: use information_schema instead of pg_catalog for
dialect detection (#1708)
---
.../src/main/java/com/google/cloud/spanner/SessionPool.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
index 5c13a410984..1d81b1388fa 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
@@ -1764,7 +1764,7 @@ private enum Position {
Statement.newBuilder(
"SELECT 'POSTGRESQL' AS DIALECT\n"
+ "FROM INFORMATION_SCHEMA.SCHEMATA\n"
- + "WHERE SCHEMA_NAME='pg_catalog'\n"
+ + "WHERE SCHEMA_NAME='information_schema'\n"
+ "UNION ALL\n"
+ "SELECT 'GOOGLE_STANDARD_SQL' AS DIALECT\n"
+ "FROM INFORMATION_SCHEMA.SCHEMATA\n"
From 98cac5dfb7a5716fd212d87dcbafc7dabca6c5c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?=
Date: Tue, 22 Feb 2022 08:11:48 +0100
Subject: [PATCH 4/6] test: handle untyped null parameters in Mock Spanner
server (#1707)
Support untyped null values in statement parameters for the mock Spanner
server used for testing.
---
.../cloud/spanner/DatabaseClientImplTest.java | 18 ++++++++++++++++++
.../cloud/spanner/MockSpannerServiceImpl.java | 7 +++++++
2 files changed, 25 insertions(+)
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index c0e1e606402..407815983e2 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -2260,4 +2260,22 @@ public void testGetDialectPostgreSQLPreloaded() {
StatementResult.detectDialectResult(Dialect.GOOGLE_STANDARD_SQL));
}
}
+
+ @Test
+ public void testUntypedNullParameters() {
+ Statement statement =
+ Statement.newBuilder("INSERT INTO FOO (BAR) VALUES (@p)")
+ .bind("p")
+ .to((Value) null)
+ .build();
+ mockSpanner.putStatementResult(StatementResult.update(statement, 1L));
+
+ DatabaseClient client =
+ spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
+ Long updateCount =
+ client.readWriteTransaction().run(transaction -> transaction.executeUpdate(statement));
+
+ assertNotNull(updateCount);
+ assertEquals(1L, updateCount.longValue());
+ }
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
index feb4e680a50..04cf3af641c 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
@@ -1226,6 +1226,13 @@ public void executeStreamingSql(
private Statement buildStatement(
String sql, Map paramTypes, com.google.protobuf.Struct params) {
Statement.Builder builder = Statement.newBuilder(sql);
+ // Set all untyped null values first.
+ for (Entry entry : params.getFieldsMap().entrySet()) {
+ if (entry.getValue().hasNullValue() && !paramTypes.containsKey(entry.getKey())) {
+ builder.bind(entry.getKey()).to((Value) null);
+ }
+ }
+
for (Entry entry : paramTypes.entrySet()) {
final String fieldName = entry.getKey();
final Type fieldType = entry.getValue();
From e3fb2b273f939314d9cdbce539f373d6fc77d0ad Mon Sep 17 00:00:00 2001
From: Mridula <66699525+mpeddada1@users.noreply.github.com>
Date: Tue, 22 Feb 2022 10:07:26 -0500
Subject: [PATCH 5/6] fix(java): make system property accessible for native
image compilation (#1694)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix(java): make system properties accessible for native image compilation
* 🦉 Updates from OwlBot
See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md
Co-authored-by: Owl Bot
---
google-cloud-spanner/pom.xml | 38 +++++++++++++++++--
.../cloud/spanner/IntegrationTestEnv.java | 7 ++--
2 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index 46b11e401c8..2aeaa0ddfc7 100644
--- a/google-cloud-spanner/pom.xml
+++ b/google-cloud-spanner/pom.xml
@@ -16,6 +16,10 @@
google-cloud-spanner
0.31.0
+ com.google.cloud.spanner.GceTestEnvConfig
+ projects/gcloud-devel/instances/spanner-testing-east1
+ gcloud-devel
+ projects/gcloud-devel/locations/us-east1/keyRings/cmek-test-key-ring/cryptoKeys/cmek-test-key
@@ -70,10 +74,10 @@
maven-failsafe-plugin
- com.google.cloud.spanner.GceTestEnvConfig
- projects/gcloud-devel/instances/spanner-testing-east1
- gcloud-devel
- projects/gcloud-devel/locations/us-east1/keyRings/cmek-test-key-ring/cryptoKeys/cmek-test-key
+ ${spanner.testenv.config.class}
+ ${spanner.testenv.instance}
+ ${spanner.gce.config.project_id}
+ ${spanner.testenv.kms_key.name}
3000
@@ -100,6 +104,32 @@
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ ${spanner.testenv.config.class}
+ ${spanner.testenv.instance}
+ ${spanner.gce.config.project_id}
+ ${spanner.testenv.kms_key.name}
+
+ 3000
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+
+
+ -Dspanner.testenv.config.class=${spanner.testenv.config.class}
+
+
+
+
+
org.codehaus.mojo
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java
index 103b6f626ba..3f4db8b9135 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java
@@ -42,6 +42,8 @@ public class IntegrationTestEnv extends ExternalResource {
/** Names a property that provides the class name of the {@link TestEnvConfig} to use. */
public static final String TEST_ENV_CONFIG_CLASS_NAME = "spanner.testenv.config.class";
+ public static final String CONFIG_CLASS = System.getProperty(TEST_ENV_CONFIG_CLASS_NAME, null);
+
/**
* Names a property that, if set, identifies an existing Cloud Spanner instance to use for tests.
*/
@@ -62,12 +64,11 @@ public RemoteSpannerHelper getTestHelper() {
@SuppressWarnings("unchecked")
protected void initializeConfig()
throws ClassNotFoundException, InstantiationException, IllegalAccessException {
- String configClassName = System.getProperty(TEST_ENV_CONFIG_CLASS_NAME, null);
- if (configClassName == null) {
+ if (CONFIG_CLASS == null) {
throw new NullPointerException("Property " + TEST_ENV_CONFIG_CLASS_NAME + " needs to be set");
}
Class extends TestEnvConfig> configClass;
- configClass = (Class extends TestEnvConfig>) Class.forName(configClassName);
+ configClass = (Class extends TestEnvConfig>) Class.forName(CONFIG_CLASS);
config = configClass.newInstance();
}
From 754a138a411d8ac4a5ad7e4c057207f38633ac15 Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Wed, 23 Feb 2022 10:57:14 +0100
Subject: [PATCH 6/6] chore(main): release 6.20.0 (#1706)
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
---
CHANGELOG.md | 13 +++++++++++++
google-cloud-spanner-bom/pom.xml | 18 +++++++++---------
google-cloud-spanner/pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
grpc-google-cloud-spanner-v1/pom.xml | 4 ++--
pom.xml | 16 ++++++++--------
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
proto-google-cloud-spanner-v1/pom.xml | 4 ++--
samples/snapshot/pom.xml | 2 +-
versions.txt | 14 +++++++-------
12 files changed, 52 insertions(+), 39 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5afede175f3..5d54093b151 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
# Changelog
+## [6.20.0](https://github.com/googleapis/java-spanner/compare/v6.19.1...v6.20.0) (2022-02-22)
+
+
+### Features
+
+* allows for getting json columns using getValue ([#1699](https://github.com/googleapis/java-spanner/issues/1699)) ([a51973b](https://github.com/googleapis/java-spanner/commit/a51973b1a87c0a57b114892fe39a24caa1458d1d))
+
+
+### Bug Fixes
+
+* **java:** make system property accessible for native image compilation ([#1694](https://github.com/googleapis/java-spanner/issues/1694)) ([e3fb2b2](https://github.com/googleapis/java-spanner/commit/e3fb2b273f939314d9cdbce539f373d6fc77d0ad))
+* use information_schema instead of pg_catalog for dialect detection ([#1708](https://github.com/googleapis/java-spanner/issues/1708)) ([91e157a](https://github.com/googleapis/java-spanner/commit/91e157a6dcd08afd81a4cbddffcb8e02defb8d3a))
+
### [6.19.1](https://github.com/googleapis/java-spanner/compare/v6.19.0...v6.19.1) (2022-02-18)
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index 23cd2623818..0bab7aed0e6 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.19.2-SNAPSHOT
+ 6.20.0
pom
com.google.cloud
@@ -53,43 +53,43 @@
com.google.cloud
google-cloud-spanner
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.cloud
google-cloud-spanner
test-jar
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index 2aeaa0ddfc7..5ca56d5010b 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.19.2-SNAPSHOT
+ 6.20.0
jar
Google Cloud Spanner
https://github.com/googleapis/java-spanner
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.19.2-SNAPSHOT
+ 6.20.0
google-cloud-spanner
diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
index e2bff345815..12e7d1ad27d 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.19.2-SNAPSHOT
+ 6.20.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.19.2-SNAPSHOT
+ 6.20.0
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index ede4c947a83..e93ecf06e1b 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.19.2-SNAPSHOT
+ 6.20.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.19.2-SNAPSHOT
+ 6.20.0
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index b6b1c4df3db..1857f3951cf 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.19.2-SNAPSHOT
+ 6.20.0
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.19.2-SNAPSHOT
+ 6.20.0
diff --git a/pom.xml b/pom.xml
index a62daaabf0a..f5a8ce18e53 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.19.2-SNAPSHOT
+ 6.20.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.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.19.2-SNAPSHOT
+ 6.20.0
com.google.cloud
google-cloud-spanner
- 6.19.2-SNAPSHOT
+ 6.20.0
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index 5f8087517bf..cc3b9e1b064 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.19.2-SNAPSHOT
+ 6.20.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.19.2-SNAPSHOT
+ 6.20.0
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index 81a497ede06..2e54e861398 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.19.2-SNAPSHOT
+ 6.20.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.19.2-SNAPSHOT
+ 6.20.0
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index e440c2292fa..bb13dad08c5 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.19.2-SNAPSHOT
+ 6.20.0
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.19.2-SNAPSHOT
+ 6.20.0
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 8f1df624b1c..4d10a1e721a 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -31,7 +31,7 @@
com.google.cloud
google-cloud-spanner
- 6.19.2-SNAPSHOT
+ 6.20.0
diff --git a/versions.txt b/versions.txt
index 0f0f1ce6ab7..8bc74e1ed6d 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,10 +1,10 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.19.1:6.19.2-SNAPSHOT
-proto-google-cloud-spanner-v1:6.19.1:6.19.2-SNAPSHOT
-proto-google-cloud-spanner-admin-database-v1:6.19.1:6.19.2-SNAPSHOT
-grpc-google-cloud-spanner-v1:6.19.1:6.19.2-SNAPSHOT
-grpc-google-cloud-spanner-admin-instance-v1:6.19.1:6.19.2-SNAPSHOT
-grpc-google-cloud-spanner-admin-database-v1:6.19.1:6.19.2-SNAPSHOT
-google-cloud-spanner:6.19.1:6.19.2-SNAPSHOT
+proto-google-cloud-spanner-admin-instance-v1:6.20.0:6.20.0
+proto-google-cloud-spanner-v1:6.20.0:6.20.0
+proto-google-cloud-spanner-admin-database-v1:6.20.0:6.20.0
+grpc-google-cloud-spanner-v1:6.20.0:6.20.0
+grpc-google-cloud-spanner-admin-instance-v1:6.20.0:6.20.0
+grpc-google-cloud-spanner-admin-database-v1:6.20.0:6.20.0
+google-cloud-spanner:6.20.0:6.20.0