Index: ql/src/test/results/clientpositive/udf_lessthan.q.out =================================================================== --- ql/src/test/results/clientpositive/udf_lessthan.q.out (revision 5838) +++ ql/src/test/results/clientpositive/udf_lessthan.q.out (working copy) @@ -8,3 +8,12 @@ POSTHOOK: query: DESCRIBE FUNCTION EXTENDED < POSTHOOK: type: DESCFUNCTION a < b - Returns TRUE if a is less than b +PREHOOK: query: SELECT true= POSTHOOK: type: DESCFUNCTION a >= b - Returns TRUE if b is not smaller than a +PREHOOK: query: SELECT true>=false, false>=true, false>=false, true>=true FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/mstore/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-14_15-38-26_830_745034439856049454/10000 +POSTHOOK: query: SELECT true>=false, false>=true, false>=false, true>=true FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/mstore/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-14_15-38-26_830_745034439856049454/10000 +true false true true Index: ql/src/test/results/clientpositive/udf_equal.q.out =================================================================== --- ql/src/test/results/clientpositive/udf_equal.q.out (revision 5838) +++ ql/src/test/results/clientpositive/udf_equal.q.out (working copy) @@ -20,3 +20,12 @@ POSTHOOK: type: DESCFUNCTION a == b - Returns TRUE if a equals b and false otherwise Synonyms: = +PREHOOK: query: SELECT true=false, false=true, false=false, true=true FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/mstore/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-14_14-02-03_248_2636646596000796300/10000 +POSTHOOK: query: SELECT true=false, false=true, false=false, true=true FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/mstore/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-14_14-02-03_248_2636646596000796300/10000 +false false true true Index: ql/src/test/results/clientpositive/udf_greaterthan.q.out =================================================================== --- ql/src/test/results/clientpositive/udf_greaterthan.q.out (revision 5838) +++ ql/src/test/results/clientpositive/udf_greaterthan.q.out (working copy) @@ -8,3 +8,12 @@ POSTHOOK: query: DESCRIBE FUNCTION EXTENDED > POSTHOOK: type: DESCFUNCTION a > b - Returns TRUE if a is greater than b +PREHOOK: query: SELECT true>false, false>true, false>false, true>true FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/mstore/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-14_15-39-21_311_8364092782764061396/10000 +POSTHOOK: query: SELECT true>false, false>true, false>false, true>true FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/mstore/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-14_15-39-21_311_8364092782764061396/10000 +true false false false Index: ql/src/test/results/clientpositive/udf_lessthanorequal.q.out =================================================================== --- ql/src/test/results/clientpositive/udf_lessthanorequal.q.out (revision 5838) +++ ql/src/test/results/clientpositive/udf_lessthanorequal.q.out (working copy) @@ -8,3 +8,12 @@ POSTHOOK: query: DESCRIBE FUNCTION EXTENDED <= POSTHOOK: type: DESCFUNCTION a <= b - Returns TRUE if b is not greater than a +PREHOOK: query: SELECT true<=false, false<=true, false<=false, true<=true FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/mstore/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-14_15-36-38_643_4822148186689079902/10000 +POSTHOOK: query: SELECT true<=false, false<=true, false<=false, true<=true FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/mstore/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-14_15-36-38_643_4822148186689079902/10000 +false true true true Index: ql/src/test/queries/clientpositive/udf_lessthan.q =================================================================== --- ql/src/test/queries/clientpositive/udf_lessthan.q (revision 5838) +++ ql/src/test/queries/clientpositive/udf_lessthan.q (working copy) @@ -1,2 +1,4 @@ DESCRIBE FUNCTION <; DESCRIBE FUNCTION EXTENDED <; + +SELECT true=; DESCRIBE FUNCTION EXTENDED >=; + +SELECT true>=false, false>=true, false>=false, true>=true FROM src LIMIT 1; \ No newline at end of file Index: ql/src/test/queries/clientpositive/udf_greaterthan.q =================================================================== --- ql/src/test/queries/clientpositive/udf_greaterthan.q (revision 5838) +++ ql/src/test/queries/clientpositive/udf_greaterthan.q (working copy) @@ -1,2 +1,4 @@ DESCRIBE FUNCTION >; DESCRIBE FUNCTION EXTENDED >; + +SELECT true>false, false>true, false>false, true>true FROM src LIMIT 1; \ No newline at end of file Index: ql/src/java/org/apache/hadoop/hive/ql/exec/ComparisonOpMethodResolver.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/ComparisonOpMethodResolver.java (revision 5838) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/ComparisonOpMethodResolver.java (working copy) @@ -50,13 +50,13 @@ /* * (non-Javadoc) - * + * * @see * org.apache.hadoop.hive.ql.exec.UDFMethodResolver#getEvalMethod(java.util * .List) */ @Override - public Method getEvalMethod(List argTypeInfos) throws AmbiguousMethodException { + public Method getEvalMethod(List argTypeInfos) throws UDFArgumentException { assert (argTypeInfos.size() == 2); List pTypeInfos = null; @@ -65,6 +65,11 @@ pTypeInfos = new ArrayList(); pTypeInfos.add(TypeInfoFactory.doubleTypeInfo); pTypeInfos.add(TypeInfoFactory.doubleTypeInfo); + } else if (argTypeInfos.get(0).equals(TypeInfoFactory.booleanTypeInfo) && + argTypeInfos.get(1).equals(TypeInfoFactory.booleanTypeInfo)) { + pTypeInfos = new ArrayList(); + pTypeInfos.add(TypeInfoFactory.intTypeInfo); + pTypeInfos.add(TypeInfoFactory.intTypeInfo); } else if (argTypeInfos.get(0) == argTypeInfos.get(1)) { pTypeInfos = argTypeInfos; } else { @@ -75,9 +80,12 @@ Method udfMethod = null; + List evaluateMethods = new ArrayList(); + for (Method m : Arrays.asList(udfClass.getMethods())) { if (m.getName().equals("evaluate")) { + evaluateMethods.add(m); List acceptedTypeInfos = TypeInfoUtils.getParameterTypeInfos( m, pTypeInfos.size()); if (acceptedTypeInfos == null) { @@ -104,6 +112,11 @@ } } } + + if (udfMethod == null) { + throw new NoMatchingMethodException(udfClass, argTypeInfos, evaluateMethods); + } + return udfMethod; }