[ https://issues.apache.org/jira/browse/HIVE-25738?focusedWorklogId=687990&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-687990 ]
ASF GitHub Bot logged work on HIVE-25738: ----------------------------------------- Author: ASF GitHub Bot Created on: 30/Nov/21 12:59 Start Date: 30/Nov/21 12:59 Worklog Time Spent: 10m Work Description: zabetak commented on a change in pull request #2816: URL: https://github.com/apache/hive/pull/2816#discussion_r759247657 ########## File path: ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFNullif.java ########## @@ -49,6 +50,17 @@ public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumen returnOIResolver = new GenericUDFUtils.ReturnObjectInspectorResolver(true); returnOIResolver.update(arguments[0]); + switch (arguments[0].getCategory()) { + case LIST: + case MAP: + case STRUCT: + case PRIMITIVE: + break; + case UNION: + default: + throw new UDFArgumentTypeException(0, "Unsupported Argument type category: " + arguments[0].getCategory()); + } + boolean isPrimitive = (arguments[0] instanceof PrimitiveObjectInspector); if (isPrimitive) { Review comment: When the first argument is a primitive we are making the checks below to ensure various things as the fact they are of exactly the same type. It appears that we are not doing the same for non-primitives, should we? ########## File path: ql/src/test/queries/clientpositive/udf_nullif.q ########## @@ -27,3 +27,12 @@ select nullif(a,b), nullif(b,c), nullif(c,d), nullif(d,a) from t0; + +SELECT assert_true(NULLIF(array(1,2,3),array(1,2,3)) is null); +SELECT assert_true(NULLIF(array(1,2,3),array(3,2,1)) is not null); + +SELECT assert_true(NULLIF(named_struct("c", 1),named_struct("c", 1)) is null); +SELECT assert_true(NULLIF(named_struct("c", 1),named_struct("c", 2)) is not null); + +SELECT assert_true(NULLIF(map('a',1,'b',2),map('a',1,'b',2)) is null); +SELECT assert_true(NULLIF(map('a',1,'b',2),map('a',1,'b',3)) is not null); Review comment: I haven't used `assert_true` before so I don't know what is the additional benefit it brings here. Can't we simply compare with the `.q.out` that the result of NULLIF is the expected one? I guess this would make also the use of `is null/is not null` redundant since we could see directly the result in the `.q.out` file. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org Issue Time Tracking ------------------- Worklog Id: (was: 687990) Time Spent: 1h 40m (was: 1.5h) > NullIf doesn't support complex types > ------------------------------------ > > Key: HIVE-25738 > URL: https://issues.apache.org/jira/browse/HIVE-25738 > Project: Hive > Issue Type: Improvement > Reporter: Zoltan Haindrich > Priority: Major > Labels: pull-request-available > Time Spent: 1h 40m > Remaining Estimate: 0h > > {code} > SELECT NULLIF(array(1,2,3),array(1,2,3)) > {code} > results in: > {code} > java.lang.ClassCastException: > org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector > cannot be cast to > org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector > at > org.apache.hadoop.hive.ql.udf.generic.GenericUDFNullif.evaluate(GenericUDFNullif.java:96) > at > org.apache.hadoop.hive.ql.udf.generic.GenericUDF.initializeAndFoldConstants(GenericUDF.java:177) > at > org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper.getReturnType(HiveFunctionHelper.java:135) > at > org.apache.hadoop.hive.ql.parse.type.RexNodeExprFactory.createFuncCallExpr(RexNodeExprFactory.java:647) > [...] > {code} -- This message was sent by Atlassian Jira (v8.20.1#820001)