FAQ
Repository: hive
Updated Branches:
   refs/heads/branch-1 626e9cbea -> da1870ebb


HIVE-11596: nvl(x, y) throws NPE if type x and type y doesn't match, rather than throwing the meaningful error (Aihua Xu, reviewed by Chao Sun)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/da1870eb
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/da1870eb
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/da1870eb

Branch: refs/heads/branch-1
Commit: da1870ebbaf0daaf001582dcf3c70ab980d3c298
Parents: 626e9cb
Author: Aihua Xu <aihuaxu@gmail.com>
Authored: Fri Aug 21 15:23:14 2015 -0700
Committer: Chao Sun <sunchao@apache.org>
Committed: Fri Aug 21 15:23:14 2015 -0700

----------------------------------------------------------------------
  .../hive/ql/udf/generic/GenericUDFBasePad.java | 8 ++--
  .../hive/ql/udf/generic/GenericUDFNvl.java | 2 +-
  .../queries/clientnegative/nvl_mismatch_type.q | 20 +++++++++
  .../clientnegative/char_pad_convert_fail0.q.out | 2 +-
  .../clientnegative/char_pad_convert_fail1.q.out | 2 +-
  .../clientnegative/char_pad_convert_fail3.q.out | 2 +-
  .../clientnegative/nvl_mismatch_type.q.out | 43 ++++++++++++++++++++
  7 files changed, 71 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/da1870eb/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java
index 3904ca4..33839f7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java
@@ -94,8 +94,8 @@ public abstract class GenericUDFBasePad extends GenericUDF {
    private Converter checkTextArguments(ObjectInspector[] arguments, int i)
      throws UDFArgumentException {
      if (arguments[i].getCategory() != ObjectInspector.Category.PRIMITIVE) {
- throw new UDFArgumentTypeException(i + 1, "Only primitive type arguments are accepted but "
- + arguments[i].getTypeName() + " is passed. as arguments");
+ throw new UDFArgumentTypeException(i, "Only primitive type arguments are accepted but "
+ + arguments[i].getTypeName() + " is passed.");
      }

      Converter converter = ObjectInspectorConverters.getConverter((PrimitiveObjectInspector) arguments[i],
@@ -107,8 +107,8 @@ public abstract class GenericUDFBasePad extends GenericUDF {
    private Converter checkIntArguments(ObjectInspector[] arguments, int i)
      throws UDFArgumentException {
      if (arguments[i].getCategory() != ObjectInspector.Category.PRIMITIVE) {
- throw new UDFArgumentTypeException(i + 1, "Only primitive type arguments are accepted but "
- + arguments[i].getTypeName() + " is passed. as arguments");
+ throw new UDFArgumentTypeException(i, "Only primitive type arguments are accepted but "
+ + arguments[i].getTypeName() + " is passed.");
      }
      PrimitiveCategory inputType = ((PrimitiveObjectInspector) arguments[i]).getPrimitiveCategory();
      Converter converter;

http://git-wip-us.apache.org/repos/asf/hive/blob/da1870eb/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java
index 625b466..0a16da8 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java
@@ -42,7 +42,7 @@ public class GenericUDFNvl extends GenericUDF{
      returnOIResolver = new GenericUDFUtils.ReturnObjectInspectorResolver(true);
      if (!(returnOIResolver.update(arguments[0]) && returnOIResolver
          .update(arguments[1]))) {
- throw new UDFArgumentTypeException(2,
+ throw new UDFArgumentTypeException(1,
            "The first and seconds arguments of function NLV should have the same type, "
            + "but they are different: \"" + arguments[0].getTypeName()
            + "\" and \"" + arguments[1].getTypeName() + "\"");

http://git-wip-us.apache.org/repos/asf/hive/blob/da1870eb/ql/src/test/queries/clientnegative/nvl_mismatch_type.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientnegative/nvl_mismatch_type.q b/ql/src/test/queries/clientnegative/nvl_mismatch_type.q
new file mode 100644
index 0000000..ace180c
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/nvl_mismatch_type.q
@@ -0,0 +1,20 @@
+
+create table over1k(
+ t tinyint,
+ si smallint,
+ i int,
+ b bigint,
+ f float,
+ d double,
+ bo boolean,
+ s string,
+ ts timestamp,
+ dec decimal(4,2),
+ bin binary)
+ row format delimited
+ fields terminated by '|';
+
+load data local inpath '../../data/files/over1k' into table over1k;
+
+-- Integers
+select nvl(t, true) from over1k limit 5;

http://git-wip-us.apache.org/repos/asf/hive/blob/da1870eb/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out b/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out
index d6f5502..ed2f516 100644
--- a/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out
+++ b/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out
@@ -40,4 +40,4 @@ POSTHOOK: query: load data local inpath '../../data/files/over1k' into table ove
  POSTHOOK: type: LOAD
  #### A masked pattern was here ####
  POSTHOOK: Output: default@over1k
-FAILED: SemanticException [Error 10016]: Line 7:29 Argument type mismatch '' '': Only primitive type arguments are accepted but array<int> is passed. as arguments
+FAILED: SemanticException [Error 10016]: Line 7:15 Argument type mismatch '3': Only primitive type arguments are accepted but array<int> is passed.

http://git-wip-us.apache.org/repos/asf/hive/blob/da1870eb/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out b/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out
index 81ceeec..5f17cfb 100644
--- a/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out
+++ b/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out
@@ -40,4 +40,4 @@ POSTHOOK: query: load data local inpath '../../data/files/over1k' into table ove
  POSTHOOK: type: LOAD
  #### A masked pattern was here ####
  POSTHOOK: Output: default@over1k
-FAILED: SemanticException [Error 10016]: Line 7:26 Argument type mismatch '4': Only primitive type arguments are accepted but array<int> is passed. as arguments
+FAILED: SemanticException [Error 10016]: Line 7:12 Argument type mismatch '3': Only primitive type arguments are accepted but array<int> is passed.

http://git-wip-us.apache.org/repos/asf/hive/blob/da1870eb/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out b/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out
index 9896eae..a25ea15 100644
--- a/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out
+++ b/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out
@@ -40,4 +40,4 @@ POSTHOOK: query: load data local inpath '../../data/files/over1k' into table ove
  POSTHOOK: type: LOAD
  #### A masked pattern was here ####
  POSTHOOK: Output: default@over1k
-FAILED: SemanticException [Error 10016]: Line 7:38 Argument type mismatch '4': Only primitive type arguments are accepted but uniontype<string> is passed. as arguments
+FAILED: SemanticException [Error 10016]: Line 7:12 Argument type mismatch ''Union'': Only primitive type arguments are accepted but uniontype<string> is passed.

http://git-wip-us.apache.org/repos/asf/hive/blob/da1870eb/ql/src/test/results/clientnegative/nvl_mismatch_type.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/nvl_mismatch_type.q.out b/ql/src/test/results/clientnegative/nvl_mismatch_type.q.out
new file mode 100644
index 0000000..6e88385
--- /dev/null
+++ b/ql/src/test/results/clientnegative/nvl_mismatch_type.q.out
@@ -0,0 +1,43 @@
+PREHOOK: query: create table over1k(
+ t tinyint,
+ si smallint,
+ i int,
+ b bigint,
+ f float,
+ d double,
+ bo boolean,
+ s string,
+ ts timestamp,
+ dec decimal(4,2),
+ bin binary)
+ row format delimited
+ fields terminated by '|'
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@over1k
+POSTHOOK: query: create table over1k(
+ t tinyint,
+ si smallint,
+ i int,
+ b bigint,
+ f float,
+ d double,
+ bo boolean,
+ s string,
+ ts timestamp,
+ dec decimal(4,2),
+ bin binary)
+ row format delimited
+ fields terminated by '|'
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@over1k
+PREHOOK: query: load data local inpath '../../data/files/over1k' into table over1k
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@over1k
+POSTHOOK: query: load data local inpath '../../data/files/over1k' into table over1k
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@over1k
+FAILED: SemanticException [Error 10016]: Line 4:14 Argument type mismatch 'true': The first and seconds arguments of function NLV should have the same type, but they are different: "tinyint" and "boolean"

Search Discussions

  • Sunchao at Aug 21, 2015 at 10:24 pm
    Repository: hive
    Updated Branches:
       refs/heads/master 1030ae719 -> 3c1eae0c4


    HIVE-11596: nvl(x, y) throws NPE if type x and type y doesn't match, rather than throwing the meaningful error (Aihua Xu, reviewed by Chao Sun)


    Project: http://git-wip-us.apache.org/repos/asf/hive/repo
    Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/3c1eae0c
    Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/3c1eae0c
    Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/3c1eae0c

    Branch: refs/heads/master
    Commit: 3c1eae0c44450ebbf26c88066de871ea7f479981
    Parents: 1030ae7
    Author: Aihua Xu <aihuaxu@gmail.com>
    Authored: Fri Aug 21 15:23:53 2015 -0700
    Committer: Chao Sun <sunchao@apache.org>
    Committed: Fri Aug 21 15:23:53 2015 -0700

    ----------------------------------------------------------------------
      .../hive/ql/udf/generic/GenericUDFBasePad.java | 8 ++--
      .../hive/ql/udf/generic/GenericUDFNvl.java | 2 +-
      .../queries/clientnegative/nvl_mismatch_type.q | 20 +++++++++
      .../clientnegative/char_pad_convert_fail0.q.out | 2 +-
      .../clientnegative/char_pad_convert_fail1.q.out | 2 +-
      .../clientnegative/char_pad_convert_fail3.q.out | 2 +-
      .../clientnegative/nvl_mismatch_type.q.out | 43 ++++++++++++++++++++
      7 files changed, 71 insertions(+), 8 deletions(-)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/hive/blob/3c1eae0c/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java
    ----------------------------------------------------------------------
    diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java
    index 3904ca4..33839f7 100644
    --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java
    +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java
    @@ -94,8 +94,8 @@ public abstract class GenericUDFBasePad extends GenericUDF {
        private Converter checkTextArguments(ObjectInspector[] arguments, int i)
          throws UDFArgumentException {
          if (arguments[i].getCategory() != ObjectInspector.Category.PRIMITIVE) {
    - throw new UDFArgumentTypeException(i + 1, "Only primitive type arguments are accepted but "
    - + arguments[i].getTypeName() + " is passed. as arguments");
    + throw new UDFArgumentTypeException(i, "Only primitive type arguments are accepted but "
    + + arguments[i].getTypeName() + " is passed.");
          }

          Converter converter = ObjectInspectorConverters.getConverter((PrimitiveObjectInspector) arguments[i],
    @@ -107,8 +107,8 @@ public abstract class GenericUDFBasePad extends GenericUDF {
        private Converter checkIntArguments(ObjectInspector[] arguments, int i)
          throws UDFArgumentException {
          if (arguments[i].getCategory() != ObjectInspector.Category.PRIMITIVE) {
    - throw new UDFArgumentTypeException(i + 1, "Only primitive type arguments are accepted but "
    - + arguments[i].getTypeName() + " is passed. as arguments");
    + throw new UDFArgumentTypeException(i, "Only primitive type arguments are accepted but "
    + + arguments[i].getTypeName() + " is passed.");
          }
          PrimitiveCategory inputType = ((PrimitiveObjectInspector) arguments[i]).getPrimitiveCategory();
          Converter converter;

    http://git-wip-us.apache.org/repos/asf/hive/blob/3c1eae0c/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java
    ----------------------------------------------------------------------
    diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java
    index 625b466..0a16da8 100644
    --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java
    +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNvl.java
    @@ -42,7 +42,7 @@ public class GenericUDFNvl extends GenericUDF{
          returnOIResolver = new GenericUDFUtils.ReturnObjectInspectorResolver(true);
          if (!(returnOIResolver.update(arguments[0]) && returnOIResolver
              .update(arguments[1]))) {
    - throw new UDFArgumentTypeException(2,
    + throw new UDFArgumentTypeException(1,
                "The first and seconds arguments of function NLV should have the same type, "
                + "but they are different: \"" + arguments[0].getTypeName()
                + "\" and \"" + arguments[1].getTypeName() + "\"");

    http://git-wip-us.apache.org/repos/asf/hive/blob/3c1eae0c/ql/src/test/queries/clientnegative/nvl_mismatch_type.q
    ----------------------------------------------------------------------
    diff --git a/ql/src/test/queries/clientnegative/nvl_mismatch_type.q b/ql/src/test/queries/clientnegative/nvl_mismatch_type.q
    new file mode 100644
    index 0000000..ace180c
    --- /dev/null
    +++ b/ql/src/test/queries/clientnegative/nvl_mismatch_type.q
    @@ -0,0 +1,20 @@
    +
    +create table over1k(
    + t tinyint,
    + si smallint,
    + i int,
    + b bigint,
    + f float,
    + d double,
    + bo boolean,
    + s string,
    + ts timestamp,
    + dec decimal(4,2),
    + bin binary)
    + row format delimited
    + fields terminated by '|';
    +
    +load data local inpath '../../data/files/over1k' into table over1k;
    +
    +-- Integers
    +select nvl(t, true) from over1k limit 5;

    http://git-wip-us.apache.org/repos/asf/hive/blob/3c1eae0c/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out
    ----------------------------------------------------------------------
    diff --git a/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out b/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out
    index d6f5502..ed2f516 100644
    --- a/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out
    +++ b/ql/src/test/results/clientnegative/char_pad_convert_fail0.q.out
    @@ -40,4 +40,4 @@ POSTHOOK: query: load data local inpath '../../data/files/over1k' into table ove
      POSTHOOK: type: LOAD
      #### A masked pattern was here ####
      POSTHOOK: Output: default@over1k
    -FAILED: SemanticException [Error 10016]: Line 7:29 Argument type mismatch '' '': Only primitive type arguments are accepted but array<int> is passed. as arguments
    +FAILED: SemanticException [Error 10016]: Line 7:15 Argument type mismatch '3': Only primitive type arguments are accepted but array<int> is passed.

    http://git-wip-us.apache.org/repos/asf/hive/blob/3c1eae0c/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out
    ----------------------------------------------------------------------
    diff --git a/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out b/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out
    index 81ceeec..5f17cfb 100644
    --- a/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out
    +++ b/ql/src/test/results/clientnegative/char_pad_convert_fail1.q.out
    @@ -40,4 +40,4 @@ POSTHOOK: query: load data local inpath '../../data/files/over1k' into table ove
      POSTHOOK: type: LOAD
      #### A masked pattern was here ####
      POSTHOOK: Output: default@over1k
    -FAILED: SemanticException [Error 10016]: Line 7:26 Argument type mismatch '4': Only primitive type arguments are accepted but array<int> is passed. as arguments
    +FAILED: SemanticException [Error 10016]: Line 7:12 Argument type mismatch '3': Only primitive type arguments are accepted but array<int> is passed.

    http://git-wip-us.apache.org/repos/asf/hive/blob/3c1eae0c/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out
    ----------------------------------------------------------------------
    diff --git a/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out b/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out
    index 9896eae..a25ea15 100644
    --- a/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out
    +++ b/ql/src/test/results/clientnegative/char_pad_convert_fail3.q.out
    @@ -40,4 +40,4 @@ POSTHOOK: query: load data local inpath '../../data/files/over1k' into table ove
      POSTHOOK: type: LOAD
      #### A masked pattern was here ####
      POSTHOOK: Output: default@over1k
    -FAILED: SemanticException [Error 10016]: Line 7:38 Argument type mismatch '4': Only primitive type arguments are accepted but uniontype<string> is passed. as arguments
    +FAILED: SemanticException [Error 10016]: Line 7:12 Argument type mismatch ''Union'': Only primitive type arguments are accepted but uniontype<string> is passed.

    http://git-wip-us.apache.org/repos/asf/hive/blob/3c1eae0c/ql/src/test/results/clientnegative/nvl_mismatch_type.q.out
    ----------------------------------------------------------------------
    diff --git a/ql/src/test/results/clientnegative/nvl_mismatch_type.q.out b/ql/src/test/results/clientnegative/nvl_mismatch_type.q.out
    new file mode 100644
    index 0000000..6e88385
    --- /dev/null
    +++ b/ql/src/test/results/clientnegative/nvl_mismatch_type.q.out
    @@ -0,0 +1,43 @@
    +PREHOOK: query: create table over1k(
    + t tinyint,
    + si smallint,
    + i int,
    + b bigint,
    + f float,
    + d double,
    + bo boolean,
    + s string,
    + ts timestamp,
    + dec decimal(4,2),
    + bin binary)
    + row format delimited
    + fields terminated by '|'
    +PREHOOK: type: CREATETABLE
    +PREHOOK: Output: database:default
    +PREHOOK: Output: default@over1k
    +POSTHOOK: query: create table over1k(
    + t tinyint,
    + si smallint,
    + i int,
    + b bigint,
    + f float,
    + d double,
    + bo boolean,
    + s string,
    + ts timestamp,
    + dec decimal(4,2),
    + bin binary)
    + row format delimited
    + fields terminated by '|'
    +POSTHOOK: type: CREATETABLE
    +POSTHOOK: Output: database:default
    +POSTHOOK: Output: default@over1k
    +PREHOOK: query: load data local inpath '../../data/files/over1k' into table over1k
    +PREHOOK: type: LOAD
    +#### A masked pattern was here ####
    +PREHOOK: Output: default@over1k
    +POSTHOOK: query: load data local inpath '../../data/files/over1k' into table over1k
    +POSTHOOK: type: LOAD
    +#### A masked pattern was here ####
    +POSTHOOK: Output: default@over1k
    +FAILED: SemanticException [Error 10016]: Line 4:14 Argument type mismatch 'true': The first and seconds arguments of function NLV should have the same type, but they are different: "tinyint" and "boolean"

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupcommits @
categorieshive, hadoop
postedAug 21, '15 at 10:23p
activeAug 21, '15 at 10:24p
posts2
users1
websitehive.apache.org

1 user in discussion

Sunchao: 2 posts

People

Translate

site design / logo © 2021 Grokbase