Remove NpgsqlParameter.SpecificType · npgsql/npgsql@f69c28b · GitHub
Skip to content

Commit f69c28b

Browse files
committed
Remove NpgsqlParameter.SpecificType
Replaced by NpgsqlParameter.DataTypeName
1 parent c931695 commit f69c28b

8 files changed

Lines changed: 60 additions & 148 deletions

File tree

‎doc/migration/3.3.md‎

Lines changed: 1 addition & 1 deletion

‎src/Npgsql/NpgsqlParameter.cs‎

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -403,37 +403,6 @@ public string DataTypeName
403403
}
404404
}
405405

406-
/// <summary>
407-
/// Used in combination with NpgsqlDbType.Enum or NpgsqlDbType.Composite to indicate the specific enum or composite type.
408-
/// For other NpgsqlDbTypes, this field is not used.
409-
/// </summary>
410-
[PublicAPI, CanBeNull, Obsolete("Use " + nameof(DataTypeName) + " instead.")]
411-
public Type SpecificType
412-
{
413-
get => SpecificTypeInternal;
414-
set => SpecificTypeInternal = value;
415-
}
416-
417-
private protected Type SpecificTypeInternal
418-
{
419-
get {
420-
if (_specificType != null)
421-
return _specificType;
422-
423-
// Try to infer type if NpgsqlDbType is Enum or has not been set
424-
if ((!_npgsqlDbType.HasValue || _npgsqlDbType == NpgsqlDbType.Enum) && _value != null)
425-
{
426-
var type = _value.GetType();
427-
if (type.GetTypeInfo().IsEnum)
428-
return type;
429-
if (type.IsArray && type.GetElementType().GetTypeInfo().IsEnum)
430-
return type.GetElementType();
431-
}
432-
return null;
433-
}
434-
set => _specificType = value;
435-
}
436-
437406
#endregion Type
438407

439408
#region Other Properties
@@ -551,7 +520,7 @@ internal virtual void ResolveHandler(ConnectorTypeMapper typeMapper)
551520
return;
552521

553522
if (_npgsqlDbType.HasValue)
554-
Handler = typeMapper.GetByNpgsqlDbType(_npgsqlDbType.Value, SpecificTypeInternal);
523+
Handler = typeMapper.GetByNpgsqlDbType(_npgsqlDbType.Value);
555524
else if (_dataTypeName != null)
556525
Handler = typeMapper.GetByDataTypeName(_dataTypeName);
557526
else if (_dbType.HasValue)

‎src/Npgsql/NpgsqlParameter`.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ internal override void ResolveHandler(ConnectorTypeMapper typeMapper)
7171

7272
// TODO: Better exceptions in case of cast failure etc.
7373
if (_npgsqlDbType.HasValue)
74-
Handler = typeMapper.GetByNpgsqlDbType(_npgsqlDbType.Value, SpecificTypeInternal);
74+
Handler = typeMapper.GetByNpgsqlDbType(_npgsqlDbType.Value);
7575
else if (_dataTypeName != null)
7676
Handler = typeMapper.GetByDataTypeName(_dataTypeName);
7777
else if (_dbType.HasValue)

‎src/Npgsql/NpgsqlTypes/NpgsqlDbType.cs‎

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,6 @@ public enum NpgsqlDbType
9090

9191
#endregion
9292

93-
#region Enumerated Types
94-
95-
/// <summary>
96-
/// Corresponds to the PostgreSQL "enum" type.
97-
/// </summary>
98-
/// <remarks>See http://www.postgresql.org/docs/current/static/datatype-enum.html</remarks>
99-
Enum = 47,
100-
101-
#endregion
102-
10393
#region Geometric types
10494

10595
/// <summary>
@@ -388,16 +378,6 @@ public enum NpgsqlDbType
388378

389379
#endregion
390380

391-
#region Composite Types
392-
393-
/// <summary>
394-
/// Corresponds to the PostgreSQL "composite" type.
395-
/// </summary>
396-
/// <remarks>See http://www.postgresql.org/docs/current/static/rowtypes.html</remarks>
397-
Composite = 48,
398-
399-
#endregion
400-
401381
#region Range Types
402382

403383
/// <summary>

‎src/Npgsql/TypeMapping/ConnectorTypeMapper.cs‎

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -114,40 +114,12 @@ internal bool TryGetByOID(uint oid, out NpgsqlTypeHandler handler)
114114
return false;
115115
}
116116

117-
internal NpgsqlTypeHandler GetByNpgsqlDbType(NpgsqlDbType npgsqlDbType, Type specificType = null)
118-
{
119-
if (specificType != null && (npgsqlDbType & NpgsqlDbType.Enum) == 0 && (npgsqlDbType & NpgsqlDbType.Composite) == 0)
120-
throw new ArgumentException($"{nameof(specificType)} can only be used with {nameof(NpgsqlDbType.Enum)} or {nameof(NpgsqlDbType.Composite)}");
121-
122-
if (_byNpgsqlDbType.TryGetValue(npgsqlDbType, out var handler))
123-
return handler;
117+
internal NpgsqlTypeHandler GetByNpgsqlDbType(NpgsqlDbType npgsqlDbType)
118+
=> _byNpgsqlDbType.TryGetValue(npgsqlDbType, out var handler)
119+
? handler
120+
: throw new NpgsqlException($"The NpgsqlDbType '{npgsqlDbType}' isn't present in your database. " +
121+
"You may need to install an extension or upgrade to a newer version.");
124122

125-
if (specificType != null) // Enum/composite
126-
{
127-
if ((npgsqlDbType & NpgsqlDbType.Array) == 0)
128-
{
129-
if (_byClrType.TryGetValue(specificType, out handler))
130-
return handler;
131-
}
132-
else
133-
{
134-
// Array of enum/composite
135-
if (_arrayHandlerByClrType.TryGetValue(specificType, out handler))
136-
return handler;
137-
}
138-
throw new InvalidOperationException($"The CLR type {specificType.Name} must be mapped with Npgsql before usage, please refer to the documentation.");
139-
}
140-
141-
// Couldn't find already activated type, attempt to activate
142-
143-
#pragma warning disable CS0618 // Type or member is obsolete
144-
if (npgsqlDbType == NpgsqlDbType.Enum || npgsqlDbType == NpgsqlDbType.Composite)
145-
throw new InvalidCastException($"When specifying NpgsqlDbType.{nameof(NpgsqlDbType.Enum)}, {nameof(NpgsqlParameter.SpecificType)} must be specified as well");
146-
#pragma warning restore CS0618 // Type or member is obsolete
147-
148-
throw new NpgsqlException($"The NpgsqlDbType '{npgsqlDbType}' isn't present in your database. " +
149-
"You may need to install an extension or upgrade to a newer version.");
150-
}
151123

152124
internal NpgsqlTypeHandler GetByDbType(DbType dbType)
153125
{

‎src/Npgsql/TypeMapping/GlobalTypeMapper.cs‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,6 @@ NpgsqlDbType ToNpgsqlDbType(Type type)
184184
if (ilist != null)
185185
return NpgsqlDbType.Array | ToNpgsqlDbType(ilist.GetGenericArguments()[0]);
186186

187-
if (typeInfo.IsEnum)
188-
return NpgsqlDbType.Enum;
189-
190187
if (typeInfo.IsGenericType && type.GetGenericTypeDefinition() == typeof(NpgsqlRange<>))
191188
return NpgsqlDbType.Range | ToNpgsqlDbType(type.GetGenericArguments()[0]);
192189

‎test/Npgsql.Tests/Types/CompositeTests.cs‎

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,15 @@ public void CompositeTypeResolutionWithGlobalMapping()
7878
{
7979
conn.ReloadTypes();
8080

81-
// Resolve type by NpgsqlDbType
81+
// Resolve type by DataTypeName
8282
using (var cmd = new NpgsqlCommand("SELECT @p", conn))
8383
{
84-
cmd.Parameters.Add(new NpgsqlParameter("p", NpgsqlDbType.Composite) { SpecificType = typeof(SomeComposite), Value = DBNull.Value });
84+
cmd.Parameters.Add(new NpgsqlParameter
85+
{
86+
ParameterName = "p",
87+
DataTypeName = "composite1",
88+
Value = DBNull.Value
89+
});
8590
using (var reader = cmd.ExecuteReader())
8691
{
8792
reader.Read();
@@ -135,7 +140,13 @@ public void CompositeTypeResolutionWithLateMapping()
135140
conn.TypeMapper.MapComposite<SomeComposite>("composite2");
136141
using (var cmd = new NpgsqlCommand("SELECT @p", conn))
137142
{
138-
cmd.Parameters.Add(new NpgsqlParameter("p", NpgsqlDbType.Composite) { SpecificType = typeof(SomeComposite), Value = DBNull.Value });
143+
cmd.Parameters.Add(new NpgsqlParameter
144+
{
145+
ParameterName = "p",
146+
DataTypeName = "composite2",
147+
Value = DBNull.Value
148+
});
149+
139150
using (var reader = cmd.ExecuteReader())
140151
{
141152
reader.Read();
@@ -181,9 +192,11 @@ public void LateMapping()
181192
var expected = new SomeComposite {x = 8, SomeText = "foo"};
182193
using (var cmd = new NpgsqlCommand("SELECT @p1::composite3, @p2::composite3", conn))
183194
{
184-
cmd.Parameters.Add(new NpgsqlParameter("p1", NpgsqlDbType.Composite) {
185-
Value = expected,
186-
SpecificType = typeof(SomeComposite)
195+
cmd.Parameters.Add(new NpgsqlParameter
196+
{
197+
ParameterName = "p1",
198+
DataTypeName = "composite3",
199+
Value = expected
187200
});
188201
cmd.Parameters.AddWithValue("p2", expected);
189202
using (var reader = cmd.ExecuteReader())
@@ -317,9 +330,11 @@ public void Array()
317330

318331
using (var cmd = new NpgsqlCommand("SELECT @p1::composite5[], @p2::composite5[]", conn))
319332
{
320-
cmd.Parameters.Add(new NpgsqlParameter("p1", NpgsqlDbType.Array | NpgsqlDbType.Composite) {
321-
Value = expected,
322-
SpecificType = typeof(SomeComposite)
333+
cmd.Parameters.Add(new NpgsqlParameter
334+
{
335+
ParameterName = "p1",
336+
DataTypeName = "_composite5",
337+
Value = expected
323338
});
324339
cmd.Parameters.AddWithValue("p2", expected); // Infer
325340
using (var reader = cmd.ExecuteReader())

‎test/Npgsql.Tests/Types/EnumTests.cs‎

Lines changed: 28 additions & 49 deletions

0 commit comments

Comments
 (0)