internal static ObjectInspector getStandardListObjectInspector(ObjectInspector elementObjectInspector)
 {
     throw new NotImplementedException();
 }
 internal static ObjectInspector getStandardMapObjectInspector(ObjectInspector keyObjectInspector, ObjectInspector valueObjectInspector)
 {
     throw new NotImplementedException();
 }
 public DictionaryObjectInspector(ObjectInspector keyInspector, ObjectInspector valueInspector)
 {
     this.keyInspector   = keyInspector;
     this.valueInspector = valueInspector;
 }
        private static ObjectInspector makeReflectionObjectInspector(Type type)
        {
            switch (Type.GetTypeCode(type))
            {
            case TypeCode.Boolean:
                return(PrimitiveObjectInspectorFactory.writableBooleanObjectInspector);

            case TypeCode.SByte:
                return(PrimitiveObjectInspectorFactory.writableByteObjectInspector);

            case TypeCode.DateTime:
                return(PrimitiveObjectInspectorFactory.writableTimestampObjectInspector);

            case TypeCode.Double:
                return(PrimitiveObjectInspectorFactory.writableDoubleObjectInspector);

            case TypeCode.Int16:
                return(PrimitiveObjectInspectorFactory.writableShortObjectInspector);

            case TypeCode.Int32:
                return(PrimitiveObjectInspectorFactory.writableIntObjectInspector);

            case TypeCode.Int64:
                return(PrimitiveObjectInspectorFactory.writableLongObjectInspector);

            case TypeCode.Single:
                return(PrimitiveObjectInspectorFactory.writableFloatObjectInspector);

            case TypeCode.String:
                return(PrimitiveObjectInspectorFactory.writableStringObjectInspector);

            case TypeCode.Char:
            case TypeCode.DBNull:
            case TypeCode.Decimal:
            case TypeCode.Empty:
            case TypeCode.Byte:
            case TypeCode.UInt16:
            case TypeCode.UInt32:
            case TypeCode.UInt64:
                throw new NotSupportedException();
            }

            if (type == typeof(Date))
            {
                return(new DateObjectInspector());
            }
            if (type == typeof(Timestamp))
            {
                return(new TimestampObjectInspector());
            }
            if (type == typeof(HiveDecimal))
            {
                return(new HiveDecimalObjectInspector(HiveDecimal.MAX_PRECISION, HiveDecimal.MAX_SCALE));
            }
            if (type == typeof(byte[]))
            {
                return(PrimitiveObjectInspectorFactory.writableBinaryObjectInspector);
            }
            if (type.IsArray && type.GetArrayRank() == 1)
            {
                Type            elementType      = type.GetElementType();
                ObjectInspector elementInspector = getReflectionObjectInspector(elementType);
                ConstructorInfo ctor             = typeof(ArrayObjectInspector <>).MakeGenericType(elementType).GetConstructor(new[] { typeof(ObjectInspector) });
                return((ObjectInspector)ctor.Invoke(new[] { elementInspector }));
            }
            if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>))
            {
                return(getReflectionObjectInspector(type.GetGenericArguments()[0]));
            }
            if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List <>))
            {
                Type            elementType      = type.GetGenericArguments()[0];
                ObjectInspector elementInspector = getReflectionObjectInspector(elementType);
                ConstructorInfo ctor             = typeof(ArrayObjectInspector <>).MakeGenericType(elementType).GetConstructor(new[] { typeof(ObjectInspector) });
                return((ObjectInspector)ctor.Invoke(new[] { elementInspector }));
            }
            if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary <,>))
            {
                Type[]          types          = type.GetGenericArguments();
                Type            keyType        = types[0];
                ObjectInspector keyInspector   = getReflectionObjectInspector(keyType);
                Type            valueType      = types[1];
                ObjectInspector valueInspector = getReflectionObjectInspector(valueType);
                ConstructorInfo ctor           = typeof(DictionaryObjectInspector <,>).MakeGenericType(keyType, valueType).GetConstructor(new[] { typeof(ObjectInspector), typeof(ObjectInspector) });
                return((ObjectInspector)ctor.Invoke(new[] { keyInspector, valueInspector }));
            }

            FieldInfo[]      objectFields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
            FieldInfoField[] fields       = objectFields.Select(f => new FieldInfoField(f, getReflectionObjectInspector(f.FieldType))).ToArray();
            return(new FieldsObjectInspector(fields));
        }
 public ArrayObjectInspector(ObjectInspector elementInspector)
 {
     this.elementInspector = elementInspector;
 }
예제 #6
0
        /**
         * Get the TypeInfo object from the ObjectInspector object by recursively
         * going into the ObjectInspector structure.
         */
        public static TypeInfo getTypeInfoFromObjectInspector(ObjectInspector oi)
        {
            // OPTIMIZATION for later.
            // if (oi instanceof TypeInfoBasedObjectInspector) {
            // TypeInfoBasedObjectInspector typeInfoBasedObjectInspector =
            // (ObjectInspector)oi;
            // return typeInfoBasedObjectInspector.getTypeInfo();
            // }
            if (oi == null)
            {
                return(null);
            }

            // Recursively going into ObjectInspector structure
            TypeInfo result = null;

            switch (oi.getCategory())
            {
            case ObjectInspectorCategory.PRIMITIVE:
            {
                PrimitiveObjectInspector poi = (PrimitiveObjectInspector)oi;
                result = poi.getTypeInfo();
                break;
            }

            case ObjectInspectorCategory.LIST:
            {
                ListObjectInspector loi = (ListObjectInspector)oi;
                result = TypeInfoFactory
                         .getListTypeInfo(getTypeInfoFromObjectInspector(loi
                                                                         .getListElementObjectInspector()));
                break;
            }

            case ObjectInspectorCategory.MAP:
            {
                MapObjectInspector moi = (MapObjectInspector)oi;
                result = TypeInfoFactory.getMapTypeInfo(
                    getTypeInfoFromObjectInspector(moi.getMapKeyObjectInspector()),
                    getTypeInfoFromObjectInspector(moi.getMapValueObjectInspector()));
                break;
            }

            case ObjectInspectorCategory.STRUCT:
            {
                StructObjectInspector soi            = (StructObjectInspector)oi;
                IList <StructField>   fields         = soi.getAllStructFieldRefs();
                List <String>         fieldNames     = new List <String>(fields.Count);
                List <TypeInfo>       fieldTypeInfos = new List <TypeInfo>(fields.Count);
                foreach (StructField f in fields)
                {
                    fieldNames.Add(f.getFieldName());
                    fieldTypeInfos.Add(getTypeInfoFromObjectInspector(f
                                                                      .getFieldObjectInspector()));
                }
                result = TypeInfoFactory.getStructTypeInfo(fieldNames, fieldTypeInfos);
                break;
            }

            case ObjectInspectorCategory.UNION:
            {
                UnionObjectInspector uoi             = (UnionObjectInspector)oi;
                List <TypeInfo>      objectTypeInfos = new List <TypeInfo>();
                foreach (ObjectInspector eoi in uoi.getObjectInspectors())
                {
                    objectTypeInfos.Add(getTypeInfoFromObjectInspector(eoi));
                }
                result = TypeInfoFactory.getUnionTypeInfo(objectTypeInfos);
                break;
            }

            default:
            {
                throw new InvalidOperationException("Unknown ObjectInspector category!");
            }
            }
            return(result);
        }
예제 #7
0
        /**
         * Returns the standard object inspector that can be used to translate an
         * object of that typeInfo to a standard object type.
         */
        public static ObjectInspector getStandardJavaObjectInspectorFromTypeInfo(
            TypeInfo typeInfo)
        {
            ObjectInspector result = cachedStandardJavaObjectInspector.get(typeInfo);

            if (result == null)
            {
                switch (typeInfo.getCategory())
                {
                case ObjectInspectorCategory.PRIMITIVE:
                {
                    // NOTE: we use JavaPrimitiveObjectInspector instead of
                    // StandardPrimitiveObjectInspector
                    result = PrimitiveObjectInspectorFactory
                             .getPrimitiveJavaObjectInspector((PrimitiveTypeInfo)typeInfo);
                    break;
                }

                case ObjectInspectorCategory.LIST:
                {
                    ObjectInspector elementObjectInspector =
                        getStandardJavaObjectInspectorFromTypeInfo(((ListTypeInfo)typeInfo)
                                                                   .getListElementTypeInfo());
                    result = ObjectInspectorFactory
                             .getStandardListObjectInspector(elementObjectInspector);
                    break;
                }

                case ObjectInspectorCategory.MAP:
                {
                    MapTypeInfo     mapTypeInfo        = (MapTypeInfo)typeInfo;
                    ObjectInspector keyObjectInspector = getStandardJavaObjectInspectorFromTypeInfo(mapTypeInfo
                                                                                                    .getMapKeyTypeInfo());
                    ObjectInspector valueObjectInspector =
                        getStandardJavaObjectInspectorFromTypeInfo(mapTypeInfo.getMapValueTypeInfo());
                    result = ObjectInspectorFactory.getStandardMapObjectInspector(
                        keyObjectInspector, valueObjectInspector);
                    break;
                }

                case ObjectInspectorCategory.STRUCT:
                {
                    StructTypeInfo  strucTypeInfo  = (StructTypeInfo)typeInfo;
                    List <String>   fieldNames     = strucTypeInfo.getAllStructFieldNames();
                    List <TypeInfo> fieldTypeInfos = strucTypeInfo
                                                     .getAllStructFieldTypeInfos();
                    List <ObjectInspector> fieldObjectInspectors = new List <ObjectInspector>(
                        fieldTypeInfos.Count);
                    for (int i = 0; i < fieldTypeInfos.Count; i++)
                    {
                        fieldObjectInspectors
                        .Add(getStandardJavaObjectInspectorFromTypeInfo(fieldTypeInfos[i]));
                    }
                    result = ObjectInspectorFactory.getStandardStructObjectInspector(
                        fieldNames, fieldObjectInspectors);
                    break;
                }

                case ObjectInspectorCategory.UNION:
                {
                    UnionTypeInfo   unionTypeInfo   = (UnionTypeInfo)typeInfo;
                    List <TypeInfo> objectTypeInfos = unionTypeInfo
                                                      .getAllUnionObjectTypeInfos();
                    List <ObjectInspector> fieldObjectInspectors =
                        new List <ObjectInspector>(objectTypeInfos.Count);
                    for (int i = 0; i < objectTypeInfos.Count; i++)
                    {
                        fieldObjectInspectors
                        .Add(getStandardJavaObjectInspectorFromTypeInfo(objectTypeInfos[i]));
                    }
                    result = ObjectInspectorFactory.getStandardUnionObjectInspector(
                        fieldObjectInspectors);
                    break;
                }

                default:
                {
                    result = null;
                    break;
                }
                }
                ObjectInspector prev =
                    cachedStandardJavaObjectInspector.putIfAbsent(typeInfo, result);
                if (prev != null)
                {
                    result = prev;
                }
            }
            return(result);
        }
예제 #8
0
 internal ObjectInspector putIfAbsent(TypeInfo typeInfo, ObjectInspector result)
 {
     throw new NotImplementedException();
 }
예제 #9
0
 public FieldInfoField(FieldInfo field, ObjectInspector inspector)
 {
     this.field     = field;
     this.inspector = inspector;
 }