You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by px...@apache.org on 2017/02/01 18:21:01 UTC
hive git commit: HIVE-15517: NOT (x <=> y) returns NULL if x or y is
NULL (Pengcheng Xiong, reviewed by Ashutosh Chauhan)
Repository: hive
Updated Branches:
refs/heads/master 0c3d5da71 -> 89664c086
HIVE-15517: NOT (x <=> y) returns NULL if x or y is NULL (Pengcheng Xiong, reviewed by Ashutosh Chauhan)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/89664c08
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/89664c08
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/89664c08
Branch: refs/heads/master
Commit: 89664c086602b91bb79d9d844408ce981db94819
Parents: 0c3d5da
Author: Pengcheng Xiong <px...@apache.org>
Authored: Wed Feb 1 10:20:39 2017 -0800
Committer: Pengcheng Xiong <px...@apache.org>
Committed: Wed Feb 1 10:20:39 2017 -0800
----------------------------------------------------------------------
.../ql/udf/generic/GenericUDFOPEqualNS.java | 5 +++
.../ql/udf/generic/GenericUDFOPNotEqualNS.java | 45 ++++++++++++++++++++
ql/src/test/queries/clientpositive/equal_ns.q | 6 +++
.../test/results/clientpositive/equal_ns.q.out | 29 +++++++++++++
4 files changed, 85 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/89664c08/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPEqualNS.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPEqualNS.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPEqualNS.java
index 3707a33..7574d2c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPEqualNS.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPEqualNS.java
@@ -40,4 +40,9 @@ public class GenericUDFOPEqualNS extends GenericUDFOPEqual {
}
return super.evaluate(arguments);
}
+
+ @Override
+ public GenericUDF negative() {
+ return new GenericUDFOPNotEqualNS();
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/89664c08/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotEqualNS.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotEqualNS.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotEqualNS.java
new file mode 100644
index 0000000..4e89423
--- /dev/null
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotEqualNS.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.udf.generic;
+
+import org.apache.hadoop.hive.ql.metadata.HiveException;
+
+// this function is for internal use only
+public class GenericUDFOPNotEqualNS extends GenericUDFOPNotEqual {
+
+ @Override
+ public Object evaluate(DeferredObject[] arguments) throws HiveException {
+ Object o0 = arguments[0].get();
+ Object o1 = arguments[1].get();
+ if (o0 == null && o1 == null) {
+ result.set(false);
+ return result;
+ }
+ if (o0 == null || o1 == null) {
+ result.set(true);
+ return result;
+ }
+ return super.evaluate(arguments);
+ }
+
+ @Override
+ public GenericUDF negative() {
+ return new GenericUDFOPEqualNS();
+ }
+}
http://git-wip-us.apache.org/repos/asf/hive/blob/89664c08/ql/src/test/queries/clientpositive/equal_ns.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/equal_ns.q b/ql/src/test/queries/clientpositive/equal_ns.q
new file mode 100644
index 0000000..910d089
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/equal_ns.q
@@ -0,0 +1,6 @@
+set hive.mapred.mode=nonstrict;
+-- SORT_QUERY_RESULTS
+
+create table test(x string, y string);
+insert into test values ('q', 'q'), ('q', 'w'), (NULL, 'q'), ('q', NULL), (NULL, NULL);
+select *, x<=>y, not (x<=> y), (x <=> y) = false from test;
http://git-wip-us.apache.org/repos/asf/hive/blob/89664c08/ql/src/test/results/clientpositive/equal_ns.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/equal_ns.q.out b/ql/src/test/results/clientpositive/equal_ns.q.out
new file mode 100644
index 0000000..6a38c05
--- /dev/null
+++ b/ql/src/test/results/clientpositive/equal_ns.q.out
@@ -0,0 +1,29 @@
+PREHOOK: query: create table test(x string, y string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test
+POSTHOOK: query: create table test(x string, y string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test
+PREHOOK: query: insert into test values ('q', 'q'), ('q', 'w'), (NULL, 'q'), ('q', NULL), (NULL, NULL)
+PREHOOK: type: QUERY
+PREHOOK: Output: default@test
+POSTHOOK: query: insert into test values ('q', 'q'), ('q', 'w'), (NULL, 'q'), ('q', NULL), (NULL, NULL)
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@test
+POSTHOOK: Lineage: test.x SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: test.y SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+PREHOOK: query: select *, x<=>y, not (x<=> y), (x <=> y) = false from test
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test
+#### A masked pattern was here ####
+POSTHOOK: query: select *, x<=>y, not (x<=> y), (x <=> y) = false from test
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test
+#### A masked pattern was here ####
+NULL NULL true false false
+NULL q false true true
+q NULL false true true
+q q true false false
+q w false true true