Skip to content

Commit 98a41c5

Browse files
authored
Make range and multirange opt-int to help with AOT size (#4899)
Closes #4898
1 parent d110eef commit 98a41c5

34 files changed

Lines changed: 434 additions & 153 deletions

src/Npgsql.GeoJSON/Internal/GeoJSONTypeHandlerResolverFactory.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using Npgsql.Internal;
33
using Npgsql.Internal.TypeHandling;
4+
using Npgsql.Internal.TypeMapping;
45
using Npgsql.TypeMapping;
56

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

16-
public override TypeHandlerResolver Create(NpgsqlConnector connector)
17+
public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
1718
=> new GeoJSONTypeHandlerResolver(connector, _options, _geographyAsDefault);
1819

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

2223
public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
2324
=> GeoJSONTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName);
24-
}
25+
}

src/Npgsql.Json.NET/Internal/JsonNetTypeHandlerResolverFactory.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
using Newtonsoft.Json.Linq;
55
using Npgsql.Internal;
66
using Npgsql.Internal.TypeHandling;
7+
using Npgsql.Internal.TypeMapping;
78
using Npgsql.TypeMapping;
89

910
namespace Npgsql.Json.NET.Internal;
1011

1112
public class JsonNetTypeHandlerResolverFactory : TypeHandlerResolverFactory
1213
{
13-
readonly Type[] _jsonbClrTypes;
14-
readonly Type[] _jsonClrTypes;
1514
readonly JsonSerializerSettings _settings;
1615
readonly Dictionary<Type, string> _byType;
1716

@@ -20,8 +19,6 @@ public JsonNetTypeHandlerResolverFactory(
2019
Type[]? jsonClrTypes,
2120
JsonSerializerSettings? settings)
2221
{
23-
_jsonbClrTypes = jsonbClrTypes ?? Array.Empty<Type>();
24-
_jsonClrTypes = jsonClrTypes ?? Array.Empty<Type>();
2522
_settings = settings ?? new JsonSerializerSettings();
2623

2724
_byType = new()
@@ -39,7 +36,7 @@ public JsonNetTypeHandlerResolverFactory(
3936
_byType[type] = "json";
4037
}
4138

42-
public override TypeHandlerResolver Create(NpgsqlConnector connector)
39+
public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
4340
=> new JsonNetTypeHandlerResolver(connector, _byType, _settings);
4441

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

51-
}
48+
}

src/Npgsql.NetTopologySuite/Internal/NetTopologySuiteTypeHandlerResolverFactory.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using NetTopologySuite.Geometries;
55
using Npgsql.Internal;
66
using Npgsql.Internal.TypeHandling;
7+
using Npgsql.Internal.TypeMapping;
78
using Npgsql.TypeMapping;
89

910
namespace Npgsql.NetTopologySuite.Internal;
@@ -27,7 +28,7 @@ public NetTopologySuiteTypeHandlerResolverFactory(
2728
_geographyAsDefault = geographyAsDefault;
2829
}
2930

30-
public override TypeHandlerResolver Create(NpgsqlConnector connector)
31+
public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
3132
=> new NetTopologySuiteTypeHandlerResolver(connector, _coordinateSequenceFactory, _precisionModel, _handleOrdinates,
3233
_geographyAsDefault);
3334

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

3738
public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
3839
=> NetTopologySuiteTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName);
39-
}
40+
}

src/Npgsql.NodaTime/Internal/NodaTimeTypeHandlerResolver.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,18 @@ internal NodaTimeTypeHandlerResolver(NpgsqlConnector connector)
7878
? handler
7979
: null;
8080

81+
public override NpgsqlTypeHandler? ResolveByNpgsqlDbType(NpgsqlDbType npgsqlDbType)
82+
=> npgsqlDbType switch
83+
{
84+
NpgsqlDbType.TimestampTzRange => TsTzRange(),
85+
NpgsqlDbType.DateRange => DateRange(),
86+
NpgsqlDbType.TimestampTzMultirange => TsTzMultirange(),
87+
NpgsqlDbType.DateMultirange => DateMultirange(),
88+
NpgsqlDbType.TimestampTzRange | NpgsqlDbType.Array => TsTzRangeArray(),
89+
NpgsqlDbType.DateRange | NpgsqlDbType.Array => TsTzRangeArray(),
90+
_ => null
91+
};
92+
8193
public override NpgsqlTypeHandler? ResolveValueTypeGenerically<T>(T value)
8294
{
8395
// This method only ever gets called for value types, and relies on the JIT specializing the method for T by eliding all the
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
using System;
22
using Npgsql.Internal;
33
using Npgsql.Internal.TypeHandling;
4+
using Npgsql.Internal.TypeMapping;
5+
using Npgsql.TypeMapping;
46

57
namespace Npgsql.NodaTime.Internal;
68

79
public class NodaTimeTypeHandlerResolverFactory : TypeHandlerResolverFactory
810
{
9-
public override TypeHandlerResolver Create(NpgsqlConnector connector)
11+
public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
1012
=> new NodaTimeTypeHandlerResolver(connector);
1113

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

1517
public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
1618
=> NodaTimeTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName);
17-
}
19+
}

src/Npgsql/BackendMessages/RowDescriptionMessage.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Npgsql.Internal;
77
using Npgsql.Internal.TypeHandlers;
88
using Npgsql.Internal.TypeHandling;
9+
using Npgsql.Internal.TypeMapping;
910
using Npgsql.PostgresTypes;
1011
using Npgsql.Replication.PgOutput.Messages;
1112
using Npgsql.TypeMapping;

src/Npgsql/Internal/NpgsqlConnector.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
using static Npgsql.Util.Statics;
2424
using System.Transactions;
2525
using Microsoft.Extensions.Logging;
26+
using Npgsql.Internal.TypeMapping;
2627
using Npgsql.Properties;
2728

2829
namespace Npgsql.Internal;

src/Npgsql/Internal/TypeHandlers/CompositeHandlers/CompositeHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Threading.Tasks;
99
using Npgsql.BackendMessages;
1010
using Npgsql.Internal.TypeHandling;
11+
using Npgsql.Internal.TypeMapping;
1112
using Npgsql.PostgresTypes;
1213
using Npgsql.TypeMapping;
1314
using NpgsqlTypes;

src/Npgsql/Internal/TypeHandlers/RecordHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Threading.Tasks;
66
using Npgsql.BackendMessages;
77
using Npgsql.Internal.TypeHandling;
8+
using Npgsql.Internal.TypeMapping;
89
using Npgsql.PostgresTypes;
910
using Npgsql.TypeMapping;
1011

src/Npgsql/Internal/TypeHandling/TypeHandlerResolver.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using NpgsqlTypes;
23
using Npgsql.PostgresTypes;
34

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

18+
/// <summary>
19+
/// Resolves a type handler for a given NpgsqlDbType.
20+
/// </summary>
21+
public virtual NpgsqlTypeHandler? ResolveByNpgsqlDbType(NpgsqlDbType npgsqlDbType) => null;
22+
1723
/// <summary>
1824
/// Resolves a type handler given a .NET CLR type.
1925
/// </summary>

0 commit comments

Comments
 (0)