Esempio n. 1
0
        /// <summary>
        /// Traverses the type hierarchy up until a type information factory can be found.
        /// </summary>
        /// <typeparam name="TOutput"></typeparam>
        /// <param name="typeHierarchy"></param>
        /// <param name="type">type for which a factory needs to be found</param>
        /// <returns>closest type information factory or null if there is no factory in the type hierarchy</returns>
        private static TypeInfoFactory <TOutput> GetClosestFactory <TOutput>(IList <Type> typeHierarchy, Type type)
        {
            TypeInfoFactory <TOutput> factory = null;

            while (factory == null && type.IsClass && type != typeof(object))
            {
                typeHierarchy.Add(type);
                factory = GetTypeInfoFactory <TOutput>(type);
                type    = type.BaseType;

                if (type == null)
                {
                    break;
                }
            }

            return(factory);
        }
Esempio n. 2
0
        /// <summary>
        /// Returns the type information factory for a type using the factory registry or annotations.
        /// </summary>
        /// <typeparam name="TOutput"></typeparam>
        /// <param name="t"></param>
        /// <returns></returns>
        public static TypeInfoFactory <TOutput> GetTypeInfoFactory <TOutput>(Type t)
        {
            TypeInfoFactory <TOutput> factoryClass = null;

            if (RegisteredTypeInfoFactories.ContainsKey(t))
            {
                factoryClass = RegisteredTypeInfoFactories[t] as TypeInfoFactory <TOutput>;
            }
            else
            {
                if (t.IsClass && typeof(ITypeInfo).IsAssignableFrom(t))
                {
                    if (Activator.CreateInstance(t) is ITypeInfo typeInfo)
                    {
                        factoryClass = typeInfo.Value <TOutput>();
                    }
                }
            }

            return(factoryClass);
        }
Esempio n. 3
0
        public static ObjectInspector createObjectInspector(int columnId, IList <OrcProto.Type> types)
        {
            OrcProto.Type type = types[columnId];
            switch (type.Kind)
            {
            case OrcProto.Type.Types.Kind.FLOAT:
                return(PrimitiveObjectInspectorFactory.writableFloatObjectInspector);

            case OrcProto.Type.Types.Kind.DOUBLE:
                return(PrimitiveObjectInspectorFactory.writableDoubleObjectInspector);

            case OrcProto.Type.Types.Kind.BOOLEAN:
                return(PrimitiveObjectInspectorFactory.writableBooleanObjectInspector);

            case OrcProto.Type.Types.Kind.BYTE:
                return(PrimitiveObjectInspectorFactory.writableByteObjectInspector);

            case OrcProto.Type.Types.Kind.SHORT:
                return(PrimitiveObjectInspectorFactory.writableShortObjectInspector);

            case OrcProto.Type.Types.Kind.INT:
                return(PrimitiveObjectInspectorFactory.writableIntObjectInspector);

            case OrcProto.Type.Types.Kind.LONG:
                return(PrimitiveObjectInspectorFactory.writableLongObjectInspector);

            case OrcProto.Type.Types.Kind.BINARY:
                return(PrimitiveObjectInspectorFactory.writableBinaryObjectInspector);

            case OrcProto.Type.Types.Kind.STRING:
                return(PrimitiveObjectInspectorFactory.writableStringObjectInspector);

            case OrcProto.Type.Types.Kind.CHAR:
                if (!type.HasMaximumLength)
                {
                    throw new NotSupportedException(
                              "Illegal use of char type without length in ORC type definition.");
                }
                return(PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
                           TypeInfoFactory.getCharTypeInfo((int)type.MaximumLength)));

            case OrcProto.Type.Types.Kind.VARCHAR:
                if (!type.HasMaximumLength)
                {
                    throw new NotSupportedException(
                              "Illegal use of varchar type without length in ORC type definition.");
                }
                return(PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
                           TypeInfoFactory.getVarcharTypeInfo((int)type.MaximumLength)));

            case OrcProto.Type.Types.Kind.TIMESTAMP:
                return(PrimitiveObjectInspectorFactory.writableTimestampObjectInspector);

            case OrcProto.Type.Types.Kind.DATE:
                return(PrimitiveObjectInspectorFactory.writableDateObjectInspector);

            case OrcProto.Type.Types.Kind.DECIMAL:
                int precision = type.HasPrecision ? (int)type.Precision : HiveDecimal.SYSTEM_DEFAULT_PRECISION;
                int scale     = type.HasScale ? (int)type.Scale : HiveDecimal.SYSTEM_DEFAULT_SCALE;
                return(PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
                           TypeInfoFactory.getDecimalTypeInfo(precision, scale)));

            case OrcProto.Type.Types.Kind.STRUCT:
                return(new OrcStructInspector(columnId, types));

            case OrcProto.Type.Types.Kind.UNION:
                return(new OrcUnion.OrcUnionObjectInspector(columnId, types));

            case OrcProto.Type.Types.Kind.MAP:
                return(new OrcMapObjectInspector(columnId, types));

            case OrcProto.Type.Types.Kind.LIST:
                return(new OrcListObjectInspector(columnId, types));

            default:
                throw new NotSupportedException("Unknown type " +
                                                type.Kind);
            }
        }