[ 
https://issues.apache.org/jira/browse/PIG-745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12697094#action_12697094
 ] 

David Ciemiewicz commented on PIG-745:
--------------------------------------

Alan,

I realized several things.

1) The question of what to do about BOOLEAN case.  My original suggestion was 
to convert the BOOLEAN case to 1 and 0 but in the patch, I just used the 
Boolean.toString() function.  Not sure if that matters or not.

2) I didn't see other test cases for the other DataType.toInteger(), ... 
conversions so I didn't create one for DataType.toString().

3) We are just using the "default" conversion of Float.toString() and 
Double.toString().  I don't know if this is actually "best" since I don't know 
if these operations present the floating-point values in full precision or not. 
 At this point, it may not really matter so much as the primary reason for 
creating DataType.toString() is to allow string functions to operate on any 
data type (like in Perl) without generating cast errors.



> Please add DataTypes.toString() conversion function
> ---------------------------------------------------
>
>                 Key: PIG-745
>                 URL: https://issues.apache.org/jira/browse/PIG-745
>             Project: Pig
>          Issue Type: Improvement
>            Reporter: David Ciemiewicz
>         Attachments: PIG-745.patch
>
>
> I'm doing some work in string manipulation UDFs and I've found that it would 
> be very convenient if I could always convert the argument to a chararray 
> (internally a Java String).
> For example TOLOWERCASE(arg) shouldn't really care whether arg is a 
> bytearray, chararray, int, long, double, or float, it should be treated as a 
> string and operated on.
> The simplest and most foolproof method would be if the DataTypes added a 
> static function of  DataTypes.toString which did all of the argument type 
> checking and provided consistent translation.
> I believe that this function might be coded as:
>     public static String toString(Object o) throws ExecException {
>         try {
>                       switch (findType(o)) {
>                       case BOOLEAN:
>                           if (((Boolean)o) == true) return new String('1');
>                           else return new String('0');
>                       case BYTE:
>                           return ((Byte)o).toString();
>                       case INTEGER:
>                           return ((Integer)o).toString();
>                       case LONG:
>                           return ((Long)o).toString();
>                       case FLOAT:
>                           return ((Float)o).toString();
>                       case DOUBLE:
>                           return ((Double)o).toString();
>                       case BYTEARRAY:
>                           return ((DataByteArray)o).toString();
>                       case CHARARRAY:
>                           return (String)o;
>                       case NULL:
>                           return null;
>                       case MAP:
>                       case TUPLE:
>                       case BAG:
>                       case UNKNOWN:
>                       default:
>                           int errCode = 1071;
>                           String msg = "Cannot convert a " + findTypeName(o) +
>                           " to an String";
>                           throw new ExecException(msg, errCode, 
> PigException.INPUT);
>                       }
>               } catch (ExecException ee) {
>                       throw ee;
>               } catch (Exception e) {
>                       int errCode = 2054;
>                       String msg = "Internal error. Could not convert " + o + 
> " to String.";
>                       throw new ExecException(msg, errCode, PigException.BUG);
>               }
>     }

-- 
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