@Override public Object evaluate(DeferredObject[] arguments) throws HiveException { assert (arguments.length == realArguments.length); // Calculate all the arguments for (int i = 0; i < realArguments.length; i++) { realArguments[i] = arguments[i].get(); } // Call the function Object result = FunctionRegistry.invoke(udfMethod, udf, conversionHelper .convertIfNecessary(realArguments)); // For non-generic UDF, type info isn't available. This poses a problem for Hive Decimal. // If the returned value is HiveDecimal, we assume maximum precision/scale. if (result != null && result instanceof HiveDecimalWritable) { result = HiveDecimalWritable.enforcePrecisionScale ((HiveDecimalWritable) result, HiveDecimal.SYSTEM_DEFAULT_PRECISION, HiveDecimal.SYSTEM_DEFAULT_SCALE); } return result; }
@Override public Object evaluate(DeferredObject[] arguments) throws HiveException { assert (arguments.length == realArguments.length); // Calculate all the arguments for (int i = 0; i < realArguments.length; i++) { realArguments[i] = arguments[i].get(); } // Call the function Object result = FunctionRegistry.invoke(udfMethod, udf, conversionHelper .convertIfNecessary(realArguments)); // For non-generic UDF, type info isn't available. This poses a problem for Hive Decimal. // If the returned value is HiveDecimal, we assume maximum precision/scale. if (result != null && result instanceof HiveDecimalWritable) { result = HiveDecimalWritable.enforcePrecisionScale ((HiveDecimalWritable) result, HiveDecimal.SYSTEM_DEFAULT_PRECISION, HiveDecimal.SYSTEM_DEFAULT_SCALE); } return result; }
@Override public HiveDecimal getPrimitiveJavaObject(Object o) { if (o == null) { return null; } DecimalTypeInfo decimalTypeInfo = (DecimalTypeInfo) typeInfo; // We do not want to modify the writable provided by the object o since it is not a copy. HiveDecimalWritable decWritable = ((LazyHiveDecimal)o).getWritableObject(); HiveDecimalWritable result = HiveDecimalWritable.enforcePrecisionScale( decWritable, decimalTypeInfo.getPrecision(), decimalTypeInfo.getScale()); return (result != null && result.isSet() ? result.getHiveDecimal() : null); }
@Override public HiveDecimal getPrimitiveJavaObject(Object o) { if (o == null) { return null; } DecimalTypeInfo decimalTypeInfo = (DecimalTypeInfo) typeInfo; // We do not want to modify the writable provided by the object o since it is not a copy. HiveDecimalWritable decWritable = ((LazyHiveDecimal)o).getWritableObject(); HiveDecimalWritable result = HiveDecimalWritable.enforcePrecisionScale( decWritable, decimalTypeInfo.getPrecision(), decimalTypeInfo.getScale()); return (result != null && result.isSet() ? result.getHiveDecimal() : null); }