You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by bl...@apache.org on 2021/12/29 20:43:13 UTC

[iceberg] branch master updated: API: Fix startsWith NullPointerException (#3645)

This is an automated email from the ASF dual-hosted git repository.

blue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/master by this push:
     new 0a6b105  API: Fix startsWith NullPointerException (#3645)
0a6b105 is described below

commit 0a6b1051657442991ebeca2a00f5b4f19e252c7c
Author: hbg <30...@qq.com>
AuthorDate: Thu Dec 30 04:43:03 2021 +0800

    API: Fix startsWith NullPointerException (#3645)
    
    Co-authored-by: bghuang <bg...@tencent.com>
---
 api/src/main/java/org/apache/iceberg/expressions/Evaluator.java     | 3 ++-
 api/src/test/java/org/apache/iceberg/expressions/TestEvaluator.java | 2 ++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/api/src/main/java/org/apache/iceberg/expressions/Evaluator.java b/api/src/main/java/org/apache/iceberg/expressions/Evaluator.java
index 3b7ad54..abe3ff0 100644
--- a/api/src/main/java/org/apache/iceberg/expressions/Evaluator.java
+++ b/api/src/main/java/org/apache/iceberg/expressions/Evaluator.java
@@ -149,7 +149,8 @@ public class Evaluator implements Serializable {
 
     @Override
     public <T> Boolean startsWith(Bound<T> valueExpr, Literal<T> lit) {
-      return ((String) valueExpr.eval(struct)).startsWith((String) lit.value());
+      T evalRes = valueExpr.eval(struct);
+      return evalRes != null && ((String) evalRes).startsWith((String) lit.value());
     }
 
     @Override
diff --git a/api/src/test/java/org/apache/iceberg/expressions/TestEvaluator.java b/api/src/test/java/org/apache/iceberg/expressions/TestEvaluator.java
index d17534a..d8d26bb 100644
--- a/api/src/test/java/org/apache/iceberg/expressions/TestEvaluator.java
+++ b/api/src/test/java/org/apache/iceberg/expressions/TestEvaluator.java
@@ -231,6 +231,8 @@ public class TestEvaluator {
     Assert.assertFalse("Abc startsWith abc should be false", evaluator.eval(TestHelpers.Row.of("Abc")));
     Assert.assertFalse("a startsWith abc should be false", evaluator.eval(TestHelpers.Row.of("a")));
     Assert.assertTrue("abcd startsWith abc should be true", evaluator.eval(TestHelpers.Row.of("abcd")));
+    Assert.assertFalse("null startsWith abc should be false",
+        evaluator.eval(TestHelpers.Row.of((String) null)));
   }
 
   @Test