Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using Npgsql.Internal;
using Npgsql.Internal.TypeHandling;
using Npgsql.Internal.TypeMapping;
using Npgsql.TypeMapping;

namespace Npgsql.GeoJSON.Internal;
Expand All @@ -13,12 +14,12 @@ public class GeoJSONTypeHandlerResolverFactory : TypeHandlerResolverFactory
public GeoJSONTypeHandlerResolverFactory(GeoJSONOptions options, bool geographyAsDefault)
=> (_options, _geographyAsDefault) = (options, geographyAsDefault);

public override TypeHandlerResolver Create(NpgsqlConnector connector)
public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
=> new GeoJSONTypeHandlerResolver(connector, _options, _geographyAsDefault);

public override string? GetDataTypeNameByClrType(Type type)
=> GeoJSONTypeHandlerResolver.ClrTypeToDataTypeName(type, _geographyAsDefault);

public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
=> GeoJSONTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@
using Newtonsoft.Json.Linq;
using Npgsql.Internal;
using Npgsql.Internal.TypeHandling;
using Npgsql.Internal.TypeMapping;
using Npgsql.TypeMapping;

namespace Npgsql.Json.NET.Internal;

public class JsonNetTypeHandlerResolverFactory : TypeHandlerResolverFactory
{
readonly Type[] _jsonbClrTypes;
readonly Type[] _jsonClrTypes;
readonly JsonSerializerSettings _settings;
readonly Dictionary<Type, string> _byType;

Expand All @@ -20,8 +19,6 @@ public JsonNetTypeHandlerResolverFactory(
Type[]? jsonClrTypes,
JsonSerializerSettings? settings)
{
_jsonbClrTypes = jsonbClrTypes ?? Array.Empty<Type>();
_jsonClrTypes = jsonClrTypes ?? Array.Empty<Type>();
_settings = settings ?? new JsonSerializerSettings();

_byType = new()
Expand All @@ -39,7 +36,7 @@ public JsonNetTypeHandlerResolverFactory(
_byType[type] = "json";
}

public override TypeHandlerResolver Create(NpgsqlConnector connector)
public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
=> new JsonNetTypeHandlerResolver(connector, _byType, _settings);

public override string? GetDataTypeNameByClrType(Type type)
Expand All @@ -48,4 +45,4 @@ public override TypeHandlerResolver Create(NpgsqlConnector connector)
public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
=> JsonNetTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using NetTopologySuite.Geometries;
using Npgsql.Internal;
using Npgsql.Internal.TypeHandling;
using Npgsql.Internal.TypeMapping;
using Npgsql.TypeMapping;

namespace Npgsql.NetTopologySuite.Internal;
Expand All @@ -27,7 +28,7 @@ public NetTopologySuiteTypeHandlerResolverFactory(
_geographyAsDefault = geographyAsDefault;
}

public override TypeHandlerResolver Create(NpgsqlConnector connector)
public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
=> new NetTopologySuiteTypeHandlerResolver(connector, _coordinateSequenceFactory, _precisionModel, _handleOrdinates,
_geographyAsDefault);

Expand All @@ -36,4 +37,4 @@ public override TypeHandlerResolver Create(NpgsqlConnector connector)

public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
=> NetTopologySuiteTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName);
}
}
12 changes: 12 additions & 0 deletions src/Npgsql.NodaTime/Internal/NodaTimeTypeHandlerResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,18 @@ internal NodaTimeTypeHandlerResolver(NpgsqlConnector connector)
? handler
: null;

public override NpgsqlTypeHandler? ResolveByNpgsqlDbType(NpgsqlDbType npgsqlDbType)
=> npgsqlDbType switch
{
NpgsqlDbType.TimestampTzRange => TsTzRange(),
NpgsqlDbType.DateRange => DateRange(),
NpgsqlDbType.TimestampTzMultirange => TsTzMultirange(),
NpgsqlDbType.DateMultirange => DateMultirange(),
NpgsqlDbType.TimestampTzRange | NpgsqlDbType.Array => TsTzRangeArray(),
NpgsqlDbType.DateRange | NpgsqlDbType.Array => TsTzRangeArray(),
_ => null
};

public override NpgsqlTypeHandler? ResolveValueTypeGenerically<T>(T value)
{
// This method only ever gets called for value types, and relies on the JIT specializing the method for T by eliding all the
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
using System;
using Npgsql.Internal;
using Npgsql.Internal.TypeHandling;
using Npgsql.Internal.TypeMapping;
using Npgsql.TypeMapping;

namespace Npgsql.NodaTime.Internal;

public class NodaTimeTypeHandlerResolverFactory : TypeHandlerResolverFactory
{
public override TypeHandlerResolver Create(NpgsqlConnector connector)
public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
=> new NodaTimeTypeHandlerResolver(connector);

public override string? GetDataTypeNameByClrType(Type type)
=> NodaTimeTypeHandlerResolver.ClrTypeToDataTypeName(type);

public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
=> NodaTimeTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName);
}
}
1 change: 1 addition & 0 deletions src/Npgsql/BackendMessages/RowDescriptionMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using Npgsql.Internal;
using Npgsql.Internal.TypeHandlers;
using Npgsql.Internal.TypeHandling;
using Npgsql.Internal.TypeMapping;
using Npgsql.PostgresTypes;
using Npgsql.Replication.PgOutput.Messages;
using Npgsql.TypeMapping;
Expand Down
1 change: 1 addition & 0 deletions src/Npgsql/Internal/NpgsqlConnector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
using static Npgsql.Util.Statics;
using System.Transactions;
using Microsoft.Extensions.Logging;
using Npgsql.Internal.TypeMapping;
using Npgsql.Properties;

namespace Npgsql.Internal;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Threading.Tasks;
using Npgsql.BackendMessages;
using Npgsql.Internal.TypeHandling;
using Npgsql.Internal.TypeMapping;
using Npgsql.PostgresTypes;
using Npgsql.TypeMapping;
using NpgsqlTypes;
Expand Down
1 change: 1 addition & 0 deletions src/Npgsql/Internal/TypeHandlers/RecordHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Threading.Tasks;
using Npgsql.BackendMessages;
using Npgsql.Internal.TypeHandling;
using Npgsql.Internal.TypeMapping;
using Npgsql.PostgresTypes;
using Npgsql.TypeMapping;

Expand Down
6 changes: 6 additions & 0 deletions src/Npgsql/Internal/TypeHandling/TypeHandlerResolver.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using NpgsqlTypes;
using Npgsql.PostgresTypes;

namespace Npgsql.Internal.TypeHandling;
Expand All @@ -14,6 +15,11 @@ public abstract class TypeHandlerResolver
/// <remarks>See <see href="https://www.postgresql.org/docs/current/catalog-pg-type.html" />.</remarks>
public abstract NpgsqlTypeHandler? ResolveByDataTypeName(string typeName);

/// <summary>
/// Resolves a type handler for a given NpgsqlDbType.
/// </summary>
public virtual NpgsqlTypeHandler? ResolveByNpgsqlDbType(NpgsqlDbType npgsqlDbType) => null;

/// <summary>
/// Resolves a type handler given a .NET CLR type.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
using System;
using Npgsql.Internal.TypeMapping;
using Npgsql.TypeMapping;

namespace Npgsql.Internal.TypeHandling;

public abstract class TypeHandlerResolverFactory
{
public abstract TypeHandlerResolver Create(NpgsqlConnector connector);
public abstract TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector);

public abstract string? GetDataTypeNameByClrType(Type clrType);
public virtual string? GetDataTypeNameByValueDependentValue(object value) => null;
Expand Down
Loading