コード例 #1
0
        TypeHandler RegisterArrayType(uint oid, TypeHandler elementHandler, char textDelimiter)
        {
            ArrayHandler arrayHandler;

            var asBitStringHandler = elementHandler as BitStringHandler;

            if (asBitStringHandler != null)
            {
                // BitString requires a special array handler which returns bool or BitArray
                arrayHandler = new BitStringArrayHandler(asBitStringHandler, textDelimiter);
            }
            else if (elementHandler is ITypeHandlerWithPsv)
            {
                var arrayHandlerType = typeof(ArrayHandlerWithPsv <,>).MakeGenericType(elementHandler.GetFieldType(), elementHandler.GetProviderSpecificFieldType());
                arrayHandler = (ArrayHandler)Activator.CreateInstance(arrayHandlerType, elementHandler, textDelimiter);
            }
            else
            {
                var arrayHandlerType = typeof(ArrayHandler <>).MakeGenericType(elementHandler.GetFieldType());
                arrayHandler = (ArrayHandler)Activator.CreateInstance(arrayHandlerType, elementHandler, textDelimiter);
            }

            arrayHandler.PgName = "array";
            arrayHandler.OID    = oid;
            _oidIndex[oid]      = arrayHandler;

            return(arrayHandler);
        }
コード例 #2
0
        void ActivateEnumType(TypeHandler handler, BackendType backendType)
        {
            handler.PgName                  = backendType.Name;
            handler.OID                     = backendType.OID;
            handler.NpgsqlDbType            = NpgsqlDbType.Enum;
            _oidIndex[backendType.OID]      = handler;
            _byType[handler.GetFieldType()] = handler;

            if (backendType.Array != null)
            {
                RegisterArrayType(backendType.Array);
            }
        }
コード例 #3
0
        void ActivateEnumType(TypeHandler handler, BackendType backendType)
        {
            handler.PgName                  = backendType.Name;
            handler.OID                     = backendType.OID;
            handler.NpgsqlDbType            = NpgsqlDbType.Enum;
            _oidIndex[backendType.OID]      = handler;
            _byType[handler.GetFieldType()] = handler;

            if (backendType.ArrayOID != 0)
            {
                var arrayHandler = RegisterArrayType(backendType.ArrayOID, handler, backendType.ArrayTextDelimiter);
                if (_byEnumTypeAsArray == null)
                {
                    _byEnumTypeAsArray = new Dictionary <Type, TypeHandler>();
                }
                var enumType = handler.GetType().GetGenericArguments()[0];
                Contract.Assert(enumType.IsEnum);
                _byEnumTypeAsArray[enumType] = arrayHandler;
            }
        }