diff --git a/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj b/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj index 0be3e2d..f77d764 100644 --- a/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj +++ b/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj @@ -18,7 +18,7 @@ - + diff --git a/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs b/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs index 43d3cf3..685d971 100644 --- a/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs +++ b/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs @@ -32,7 +32,7 @@ public override NpgsqlTypeHandler ResolveByDataTypeName(string typeName) public override NpgsqlTypeHandler ResolveByClrType(Type type) { - var dataTypeName = ClrTypeToDataTypeName(type); + var dataTypeName = VectorTypeMappingResolver.ClrTypeToDataTypeName(type); if (dataTypeName != null) { var handler = ResolveByDataTypeName(dataTypeName); @@ -43,23 +43,15 @@ public override NpgsqlTypeHandler ResolveByClrType(Type type) return null; } - public override TypeMappingInfo GetMappingByDataTypeName(string dataTypeName) - => DoGetMappingByDataTypeName(dataTypeName); - - internal static string ClrTypeToDataTypeName(Type type) + public override NpgsqlTypeHandler ResolveByNpgsqlDbType(NpgsqlDbType npgsqlDbType) { - if (type == typeof(Vector)) - { - return "vector"; - } - return null; } - internal static TypeMappingInfo DoGetMappingByDataTypeName(string dataTypeName) + public override NpgsqlTypeHandler ResolveValueTypeGenerically(T value) { - if (dataTypeName == "vector") - return new TypeMappingInfo(NpgsqlDbType.Unknown, "vector"); + if (typeof(T) == typeof(Vector)) + return _vectorHandler; return null; } diff --git a/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs b/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs index 7770cab..2914eb0 100644 --- a/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs +++ b/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs @@ -1,18 +1,19 @@ using Npgsql.Internal; using Npgsql.Internal.TypeHandling; +using Npgsql.Internal.TypeMapping; using System; namespace Pgvector.Npgsql { public class VectorTypeHandlerResolverFactory : TypeHandlerResolverFactory { - public override TypeHandlerResolver Create(NpgsqlConnector connector) + public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector) => new VectorTypeHandlerResolver(connector); - public override string GetDataTypeNameByClrType(Type type) - => VectorTypeHandlerResolver.ClrTypeToDataTypeName(type); + public override TypeMappingResolver CreateMappingResolver() + => new VectorTypeMappingResolver(); - public override TypeMappingInfo GetMappingByDataTypeName(string dataTypeName) - => VectorTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName); + public override TypeMappingResolver CreateGlobalMappingResolver() + => new VectorTypeMappingResolver(); } } diff --git a/src/Pgvector/Npgsql/VectorTypeMappingResolver.cs b/src/Pgvector/Npgsql/VectorTypeMappingResolver.cs new file mode 100644 index 0000000..e4946a5 --- /dev/null +++ b/src/Pgvector/Npgsql/VectorTypeMappingResolver.cs @@ -0,0 +1,37 @@ +using Npgsql.Internal; +using Npgsql.Internal.TypeHandling; +using Npgsql.Internal.TypeMapping; +using Npgsql.PostgresTypes; +using NpgsqlTypes; +using System; + +namespace Pgvector.Npgsql +{ + public class VectorTypeMappingResolver : TypeMappingResolver + { + public override string GetDataTypeNameByClrType(Type type) + => ClrTypeToDataTypeName(type); + + public override TypeMappingInfo GetMappingByDataTypeName(string dataTypeName) + => DoGetMappingByDataTypeName(dataTypeName); + + public override TypeMappingInfo GetMappingByPostgresType(TypeMapper mapper, PostgresType type) + => DoGetMappingByDataTypeName(type.Name); + + static TypeMappingInfo DoGetMappingByDataTypeName(string dataTypeName) + { + if (dataTypeName == "vector") + return new TypeMappingInfo(NpgsqlDbType.Unknown, "vector"); + + return null; + } + + internal static string ClrTypeToDataTypeName(Type type) + { + if (type == typeof(Vector)) + return "vector"; + + return null; + } + } +} diff --git a/src/Pgvector/Pgvector.csproj b/src/Pgvector/Pgvector.csproj index dc3738b..ef4c8de 100644 --- a/src/Pgvector/Pgvector.csproj +++ b/src/Pgvector/Pgvector.csproj @@ -15,7 +15,7 @@ - +