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); }
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); } }
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; } }