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();
 

Reply via email to