Github user jyates commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/85#discussion_r31264061
  
    --- Diff: 
phoenix-pig/src/main/java/org/apache/phoenix/pig/util/TypeUtil.java ---
    @@ -68,258 +67,250 @@
     import com.google.common.collect.ImmutableMap.Builder;
     
     public final class TypeUtil {
    -   
    +
         private static final Log LOG = LogFactory.getLog(TypeUtil.class);
    -    private static final HBaseBinaryConverter binaryConverter = new 
HBaseBinaryConverter ();
    -   private static final ImmutableMap<PDataType,Byte> 
phoenixTypeToPigDataType = init();
    -   
    -   private TypeUtil(){
    -   }
    -   
    -   /**
    -    * A map of Phoenix to Pig data types.
    -    * @return
    -    */
    -   private static ImmutableMap<PDataType, Byte> init() {
    -        final ImmutableMap.Builder<PDataType,Byte> builder = new 
Builder<PDataType,Byte> ();
    -        builder.put(PLong.INSTANCE,DataType.LONG);
    -        builder.put(PVarbinary.INSTANCE,DataType.BYTEARRAY);
    -        builder.put(PChar.INSTANCE,DataType.CHARARRAY);
    -        builder.put(PVarchar.INSTANCE,DataType.CHARARRAY);
    -        builder.put(PDouble.INSTANCE,DataType.DOUBLE);
    -        builder.put(PFloat.INSTANCE,DataType.FLOAT);
    -        builder.put(PInteger.INSTANCE,DataType.INTEGER);
    -        builder.put(PTinyint.INSTANCE,DataType.INTEGER);
    -        builder.put(PSmallint.INSTANCE,DataType.INTEGER);
    -        builder.put(PDecimal.INSTANCE,DataType.BIGDECIMAL);
    -        builder.put(PTime.INSTANCE,DataType.DATETIME);
    -        builder.put(PTimestamp.INSTANCE,DataType.DATETIME);
    -        builder.put(PBoolean.INSTANCE,DataType.BOOLEAN);
    -        builder.put(PDate.INSTANCE,DataType.DATETIME);
    -        builder.put(PUnsignedDate.INSTANCE,DataType.DATETIME);
    -        builder.put(PUnsignedDouble.INSTANCE,DataType.DOUBLE);
    -        builder.put(PUnsignedFloat.INSTANCE,DataType.FLOAT);
    -        builder.put(PUnsignedInt.INSTANCE,DataType.INTEGER);
    -        builder.put(PUnsignedLong.INSTANCE,DataType.LONG);
    -        builder.put(PUnsignedSmallint.INSTANCE,DataType.INTEGER);
    -        builder.put(PUnsignedTime.INSTANCE,DataType.DATETIME);
    -        builder.put(PUnsignedTimestamp.INSTANCE,DataType.DATETIME);
    -        builder.put(PUnsignedTinyint.INSTANCE,DataType.INTEGER);
    +    private static final HBaseBinaryConverter BINARY_CONVERTER = new 
HBaseBinaryConverter();
    +    private static final ImmutableMap<PDataType, Byte> PHOENIX_TO_PIG_TYPE 
= init();
    +    private static final TupleFactory TUPLE_FACTORY = 
TupleFactory.getInstance();
    +
    +    private TypeUtil() {}
    +
    +    /**
    +     * A map of Phoenix to Pig data types.
    +     * 
    +     * @return
    +     */
    +    private static ImmutableMap<PDataType, Byte> init() {
    +        final ImmutableMap.Builder<PDataType, Byte> builder = new 
Builder<PDataType, Byte>();
    +        builder.put(PLong.INSTANCE, DataType.LONG);
    +        builder.put(PVarbinary.INSTANCE, DataType.BYTEARRAY);
    +        builder.put(PChar.INSTANCE, DataType.CHARARRAY);
    +        builder.put(PVarchar.INSTANCE, DataType.CHARARRAY);
    +        builder.put(PDouble.INSTANCE, DataType.DOUBLE);
    +        builder.put(PFloat.INSTANCE, DataType.FLOAT);
    +        builder.put(PInteger.INSTANCE, DataType.INTEGER);
    +        builder.put(PTinyint.INSTANCE, DataType.INTEGER);
    +        builder.put(PSmallint.INSTANCE, DataType.INTEGER);
    +        builder.put(PDecimal.INSTANCE, DataType.BIGDECIMAL);
    +        builder.put(PTime.INSTANCE, DataType.DATETIME);
    +        builder.put(PTimestamp.INSTANCE, DataType.DATETIME);
    +        builder.put(PBoolean.INSTANCE, DataType.BOOLEAN);
    +        builder.put(PDate.INSTANCE, DataType.DATETIME);
    +        builder.put(PUnsignedDate.INSTANCE, DataType.DATETIME);
    +        builder.put(PUnsignedDouble.INSTANCE, DataType.DOUBLE);
    +        builder.put(PUnsignedFloat.INSTANCE, DataType.FLOAT);
    +        builder.put(PUnsignedInt.INSTANCE, DataType.INTEGER);
    +        builder.put(PUnsignedLong.INSTANCE, DataType.LONG);
    +        builder.put(PUnsignedSmallint.INSTANCE, DataType.INTEGER);
    +        builder.put(PUnsignedTime.INSTANCE, DataType.DATETIME);
    +        builder.put(PUnsignedTimestamp.INSTANCE, DataType.DATETIME);
    +        builder.put(PUnsignedTinyint.INSTANCE, DataType.INTEGER);
             return builder.build();
         }
    +
    +    /**
    +     * This method returns the most appropriate PDataType associated with 
the incoming Pig type. Note for Pig DataType
    +     * DATETIME, returns DATE as inferredSqlType. This is later used to 
make a cast to targetPhoenixType accordingly.
    +     * See {@link #castPigTypeToPhoenix(Object, byte, PDataType)}
    +     * 
    +     * @param obj
    +     * @return PDataType
    +     */
    +    public static PDataType getType(Object obj, byte type) {
    +        if (obj == null) { return null; }
    +        PDataType sqlType;
    +
    +        switch (type) {
    +        case DataType.BYTEARRAY:
    +            sqlType = PVarbinary.INSTANCE;
    +            break;
    +        case DataType.CHARARRAY:
    +            sqlType = PVarchar.INSTANCE;
    +            break;
    +        case DataType.DOUBLE:
    +        case DataType.BIGDECIMAL:
    +            sqlType = PDouble.INSTANCE;
    +            break;
    +        case DataType.FLOAT:
    +            sqlType = PFloat.INSTANCE;
    +            break;
    +        case DataType.INTEGER:
    +            sqlType = PInteger.INSTANCE;
    +            break;
    +        case DataType.LONG:
    +        case DataType.BIGINTEGER:
    +            sqlType = PLong.INSTANCE;
    +            break;
    +        case DataType.BOOLEAN:
    +            sqlType = PBoolean.INSTANCE;
    +            break;
    +        case DataType.DATETIME:
    +            sqlType = PDate.INSTANCE;
    +            break;
    +        case DataType.BYTE:
    +            sqlType = PTinyint.INSTANCE;
    +            break;
    +        default:
    +            throw new RuntimeException("Unknown type " + 
obj.getClass().getName() + " passed to PhoenixHBaseStorage");
    +        }
    +
    +        return sqlType;
    +
    +    }
    +
         /**
    -    * This method returns the most appropriate PDataType associated with 
    -    * the incoming Pig type. Note for Pig DataType DATETIME, returns DATE 
as 
    -    * inferredSqlType. 
    -    * 
    -    * This is later used to make a cast to targetPhoenixType accordingly. 
See
    -    * {@link #castPigTypeToPhoenix(Object, byte, PDataType)}
    -    * 
    -    * @param obj
    -    * @return PDataType
    -    */
    -   public static PDataType getType(Object obj, byte type) {
    -           if (obj == null) {
    -                   return null;
    -           }
    -           PDataType sqlType;
    +     * This method encodes a value with Phoenix data type. It begins with 
checking whether an object is BINARY and makes
    +     * a call to {@link #castBytes(Object, PDataType)} to convery bytes to 
targetPhoenixType
    --- End diff --
    
    otherwise, it...?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to