This is an automated email from the ASF dual-hosted git repository. chamikara pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push: new 59a71fd Check for null values when encoding Key columns. new 1512551 Merge pull request #7747: [BEAM-4359] Check for null values when encoding Key columns. 59a71fd is described below commit 59a71fd07510306ae3db14f0602b35ce377fdf96 Author: nielm <ni...@users.noreply.github.com> AuthorDate: Wed Feb 6 10:26:53 2019 +0100 Check for null values when encoding Key columns. When encoding Key Column values, if the column value is unspecified, assume that the value is null. --- .../sdk/io/gcp/spanner/MutationKeyEncoder.java | 2 +- .../sdk/io/gcp/spanner/MutationKeyEncoderTest.java | 46 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/MutationKeyEncoder.java b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/MutationKeyEncoder.java index 6abb51d..5210db1 100644 --- a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/MutationKeyEncoder.java +++ b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/MutationKeyEncoder.java @@ -77,7 +77,7 @@ class MutationKeyEncoder { Map<String, Value> mutationMap = mutationAsMap(m); for (SpannerSchema.KeyPart part : schema.getKeyParts(m.getTable())) { Value val = mutationMap.get(part.getField()); - if (val.isNull()) { + if (val == null || val.isNull()) { if (part.isDesc()) { orderedCode.writeInfinityDecreasing(); } else { diff --git a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/MutationKeyEncoderTest.java b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/MutationKeyEncoderTest.java index e6a412f..5c009bd 100644 --- a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/MutationKeyEncoderTest.java +++ b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/MutationKeyEncoderTest.java @@ -399,6 +399,52 @@ public class MutationKeyEncoderTest { } @Test + public void unspecifiedStringKeys() throws Exception { + SpannerSchema.Builder builder = SpannerSchema.builder(); + + builder.addColumn("test", "key", "STRING"); + builder.addKeyPart("test", "key", false); + + builder.addColumn("test", "keydesc", "STRING"); + builder.addKeyPart("test", "keydesc", true); + + SpannerSchema schema = builder.build(); + + List<Mutation> sortedMutations = + Arrays.asList( + Mutation.newInsertOrUpdateBuilder("test") + .set("key") + .to("a") + .set("keydesc") + .to("b") + .build(), + Mutation.newInsertOrUpdateBuilder("test") + .set("key") + .to("a") + .set("keydesc") + .to("a") + .build(), + Mutation.newInsertOrUpdateBuilder("test") + .set("key") + .to("b") + // leave keydesc value unspecified --> maxvalue descending. + .build(), + Mutation.newInsertOrUpdateBuilder("test") + .set("key") + .to("b") + .set("keydesc") + .to("a") + .build(), + Mutation.newInsertOrUpdateBuilder("test") + // leave 'key' value unspecified -> maxvalue + .set("keydesc") + .to("a") + .build()); + + verifyEncodedOrdering(schema, sortedMutations); + } + + @Test public void deleteOrdering() throws Exception { SpannerSchema.Builder builder = SpannerSchema.builder();