Jeff Zhang commented on PIG-904:

I think this problem is caused by the following code in TypeCheckingVisitor

        //Ordering here decides the score for the best fit function.
        //Do not change the order. Conversions to a smaller type is preferred
        //over conversion to a bigger type where ordering of types is:
        //from small to big
//        castLookup.put(DataType.BOOLEAN, DataType.INTEGER);
//        castLookup.put(DataType.BOOLEAN, DataType.LONG);
//        castLookup.put(DataType.BOOLEAN, DataType.FLOAT);
//        castLookup.put(DataType.BOOLEAN, DataType.DOUBLE);
//        castLookup.put(DataType.BOOLEAN, DataType.CHARARRAY);
        castLookup.put(DataType.INTEGER, DataType.LONG);
        castLookup.put(DataType.INTEGER, DataType.FLOAT);
        castLookup.put(DataType.INTEGER, DataType.DOUBLE);
//        castLookup.put(DataType.INTEGER, DataType.CHARARRAY);
        castLookup.put(DataType.LONG, DataType.FLOAT);
        castLookup.put(DataType.LONG, DataType.DOUBLE);
//        castLookup.put(DataType.LONG, DataType.CHARARRAY);
        castLookup.put(DataType.FLOAT, DataType.DOUBLE);
//        castLookup.put(DataType.FLOAT, DataType.CHARARRAY);
//        castLookup.put(DataType.DOUBLE, DataType.CHARARRAY);
//        castLookup.put(DataType.BYTEARRAY, DataType.BOOLEAN);
        castLookup.put(DataType.BYTEARRAY, DataType.INTEGER);
        castLookup.put(DataType.BYTEARRAY, DataType.LONG);
        castLookup.put(DataType.BYTEARRAY, DataType.FLOAT);
        castLookup.put(DataType.BYTEARRAY, DataType.DOUBLE);
        castLookup.put(DataType.BYTEARRAY, DataType.CHARARRAY);
        castLookup.put(DataType.BYTEARRAY, DataType.TUPLE);
        castLookup.put(DataType.BYTEARRAY, DataType.BAG);
        castLookup.put(DataType.BYTEARRAY, DataType.MAP);

If I comment the "castLookup.put(DataType.DOUBLE, DataType.CHARARRAY);", the 
script above will pass.
I do not know clearly why some cast operation is commented, in my opinion, the 
following cast should been supported:

castLookup.put(DataType.BOOLEAN, DataType.CHARARRAY);
castLookup.put(DataType.INTEGER, DataType.CHARARRAY);
castLookup.put(DataType.LONG, DataType.CHARARRAY);
castLookup.put(DataType.FLOAT, DataType.CHARARRAY);

> Conversion from double to chararray for udf input arguments does not occur
> --------------------------------------------------------------------------
>                 Key: PIG-904
>                 URL: https://issues.apache.org/jira/browse/PIG-904
>             Project: Pig
>          Issue Type: Bug
>    Affects Versions: 0.3.1
>            Reporter: Pradeep Kamath
> Script showing the problem:
> {noformat}
>  "a = load '/user/pig/tests/data/singlefile/studenttab10k' as (name, age, 
> gpa:double); b = foreach a generate CONCAT(gpa, 'dummy'); dump b;"
> Error shown:
> 2009-08-03 17:04:27,573 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 
> 1045: Could not infer the matching function for org.apache.pig.builtin.CONCAT 
> as multiple or none of them fit. Please use an explicit cast.
> {noformat}
> The error goes away if gpa is casted to chararray.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

Reply via email to