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 configClass; - configClass = (Class) Class.forName(configClassName); + configClass = (Class) 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