-
Notifications
You must be signed in to change notification settings - Fork 874
Expand file tree
/
Copy pathNpgsqlTypeLoadingOptions.cs
More file actions
114 lines (99 loc) · 3.55 KB
/
NpgsqlTypeLoadingOptions.cs
File metadata and controls
114 lines (99 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System;
using System.Collections.Generic;
namespace Npgsql;
/// <summary>
/// Options for configuring Npgsql type loading.
/// </summary>
sealed class NpgsqlTypeLoadingOptions
{
/// <summary>
/// Load table composite type definitions, and not just free-standing composite types.
/// </summary>
public required bool LoadTableComposites { get; init; }
/// <summary>
/// When false, if the server doesn't support full type loading from the PostgreSQL catalogs,
/// support the basic set of types via information hardcoded inside Npgsql.
/// </summary>
public required bool LoadTypes { get; init; } = true;
/// <summary>
/// Load type definitions from the given schemas.
/// </summary>
public required string[]? TypeLoadingSchemas { get; init; }
}
/// <summary>
/// Options builder for configuring Npgsql type loading.
/// </summary>
public sealed class NpgsqlTypeLoadingOptionsBuilder
{
bool _loadTableComposites;
bool _loadTypes = true;
List<string>? _typeLoadingSchemas;
internal NpgsqlTypeLoadingOptionsBuilder() {}
/// <summary>
/// Enable loading table composite type definitions, and not just free-standing composite types.
/// </summary>
public NpgsqlTypeLoadingOptionsBuilder EnableTableCompositesLoading(bool enable = true)
{
_loadTableComposites = enable;
return this;
}
/// <summary>
/// Enable loading of types, when disabled Npgsql falls back to a small, builtin, set of known types and type ids.
/// </summary>
public NpgsqlTypeLoadingOptionsBuilder EnableTypeLoading(bool enable = true)
{
_loadTypes = enable;
return this;
}
/// <summary>
/// Set the schemas to load types from, this can be used to reduce the work done during type loading.
/// </summary>
/// <remarks>Npgsql will always load types from the following schemas: pg_catalog, information_schema, pg_toast.
/// Any user-defined types (typcategory 'U') will also be loaded regardless of their schema.</remarks>
/// <param name="schemas">Schemas to load types from.</param>
public NpgsqlTypeLoadingOptionsBuilder SetTypeLoadingSchemas(params IEnumerable<string>? schemas)
{
if (schemas is null)
{
_typeLoadingSchemas = null;
return this;
}
_typeLoadingSchemas = new();
foreach (var schema in schemas)
{
if (schema is not { Length: > 0 })
{
_typeLoadingSchemas = null;
throw new ArgumentException("Schema cannot be null or empty.");
}
_typeLoadingSchemas.Add(schema);
}
return this;
}
internal NpgsqlTypeLoadingOptions Build() => new()
{
LoadTableComposites = _loadTableComposites,
LoadTypes = _loadTypes,
TypeLoadingSchemas = _typeLoadingSchemas?.ToArray()
};
}
/// <summary>
/// An option specified in the connection string that activates special compatibility features.
/// </summary>
public enum ServerCompatibilityMode
{
/// <summary>
/// No special server compatibility mode is active
/// </summary>
None,
/// <summary>
/// The server is an Amazon Redshift instance.
/// </summary>
[Obsolete("ServerCompatibilityMode.Redshift no longer does anything and can be safely removed.")]
Redshift,
/// <summary>
/// The server is doesn't support full type loading from the PostgreSQL catalogs, support the basic set
/// of types via information hardcoded inside Npgsql.
/// </summary>
NoTypeLoading,
}