You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2017/07/07 05:02:03 UTC
[3/3] incubator-impala git commit: IMPALA-5580: fix Java UDFs that
return NULL strings
IMPALA-5580: fix Java UDFs that return NULL strings
In commit 741421de, we accidently made it so that is_null=true
StringVals became is_null=false with len=0. Fix that and add
a regression test.
Change-Id: I34d288aad66a2609484058c9a177c02200cb6a6e
Reviewed-on: http://gerrit.cloudera.org:8080/7364
Reviewed-by: Bharath Vissapragada <bh...@cloudera.com>
Tested-by: Impala Public Jenkins
Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/924066a4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/924066a4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/924066a4
Branch: refs/heads/master
Commit: 924066a4fa554bf8d61a429d0c6d0a55ddd9e2ff
Parents: 9037b8e
Author: Dan Hecht <dh...@cloudera.com>
Authored: Thu Jul 6 13:49:53 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Fri Jul 7 01:30:59 2017 +0000
----------------------------------------------------------------------
be/src/exprs/hive-udf-call.cc | 1 +
.../queries/QueryTest/java-udf.test | 58 +++++++++-----------
2 files changed, 28 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/924066a4/be/src/exprs/hive-udf-call.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/hive-udf-call.cc b/be/src/exprs/hive-udf-call.cc
index ae0a407..3e071bf 100644
--- a/be/src/exprs/hive-udf-call.cc
+++ b/be/src/exprs/hive-udf-call.cc
@@ -327,6 +327,7 @@ StringVal HiveUdfCall::GetStringVal(
ScalarExprEvaluator* eval, const TupleRow* row) const {
DCHECK_EQ(type_.type, TYPE_STRING);
StringVal result = *reinterpret_cast<StringVal*>(Evaluate(eval, row));
+ if (result.is_null) return StringVal::null();
// Copy the string into a local allocation with the usual lifetime for expr results.
// Needed because the UDF output buffer is owned by the Java UDF executor and may be
// freed or reused by the next call into the Java UDF executor.
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/924066a4/testdata/workloads/functional-query/queries/QueryTest/java-udf.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-query/queries/QueryTest/java-udf.test b/testdata/workloads/functional-query/queries/QueryTest/java-udf.test
index c4e2f1c..6f256f0 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/java-udf.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/java-udf.test
@@ -22,71 +22,67 @@ DOUBLE
====
---- QUERY
# Test identity functions
-select identity(true);
+select identity(true), identity(cast(NULL as boolean));
---- TYPES
-boolean
+boolean, boolean
---- RESULTS
-true
+true,NULL
====
---- QUERY
-select identity(cast(10 as tinyint));
+select identity(cast(10 as tinyint)), identity(cast(NULL as tinyint));
---- TYPES
-tinyint
+tinyint, tinyint
---- RESULTS
-10
+10,NULL
====
---- QUERY
-select identity(cast(10 as smallint));
+select identity(cast(10 as smallint)), identity(cast(NULL as smallint));
---- TYPES
-smallint
+smallint, smallint
---- RESULTS
-10
+10,NULL
====
---- QUERY
-select identity(cast(10 as int));
+select identity(cast(10 as int)), identity(cast(NULL as int));
---- TYPES
-int
+int, int
---- RESULTS
-10
+10,NULL
====
---- QUERY
-select identity(cast(10 as bigint));
+select identity(cast(10 as bigint)), identity(cast(NULL as bigint));
---- TYPES
-bigint
+bigint, bigint
---- RESULTS
-10
+10,NULL
====
---- QUERY
-select identity(cast(10.0 as float));
+select identity(cast(10.0 as float)), identity(cast(NULL as float));
---- TYPES
-float
+float, float
---- RESULTS
-10
+10,NULL
====
---- QUERY
-select identity(cast(10.0 as double));
+select identity(cast(10.0 as double)), identity(cast(NULL as double));
---- TYPES
-double
+double, double
---- RESULTS
-10
+10,NULL
====
---- QUERY
# IMPALA-1456. Each "identity" call below tests a different type (BytesWritable, Text,
# and String).
select identity("why hello there"),
identity("why", " hello there"),
- identity("why", " hello", " there");
----- TYPES
-string, string, string
----- RESULTS
-'why hello there','why hello there','why hello there'
-====
----- QUERY
-select identity(NULL);
+ identity("why", " hello", " there"),
+ identity(cast(NULL as string)),
+ identity(cast(NULL as string), cast(NULL as string)),
+ identity(cast(NULL as string), cast(NULL as string), cast(NULL as string));
---- TYPES
-boolean
+string, string, string, string, string, string
---- RESULTS
-NULL
+'why hello there','why hello there','why hello there','NULL','NULL','NULL'
====
---- QUERY
# IMPALA-1134. Each "identity" call below tests a different type (BytesWritable, Text,