/
dev-npgsql
/
npgsql
Обзор
Документация
Войти
/
dev-npgsql
/
npgsql
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
v7.0.9
src/Npgsql/PostgresMinimalDatabaseInfo.cs
62 строки
2 KB
Nikita Kazmin
Seal internal classes, optimize Expect check (#4676)
25 сен 2022, 21:47
Не верифицирован
25 сен 2022, 21:47
7f97dba
Код
Авторство
О чём код?
using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading.Tasks; using Npgsql.Internal; using Npgsql.PostgresTypes; using Npgsql.Util; using NpgsqlTypes; namespace Npgsql; sealed class PostgresMinimalDatabaseInfoFactory : INpgsqlDatabaseInfoFactory { public Task<NpgsqlDatabaseInfo?> Load(NpgsqlConnector conn, NpgsqlTimeout timeout, bool async) => Task.FromResult( conn.Settings.ServerCompatibilityMode == ServerCompatibilityMode.NoTypeLoading ? (NpgsqlDatabaseInfo)new PostgresMinimalDatabaseInfo(conn) : null); } sealed class PostgresMinimalDatabaseInfo : PostgresDatabaseInfo { static PostgresType[]? _typesWithMultiranges, _typesWithoutMultiranges; static PostgresType[] CreateTypes(bool withMultiranges) => typeof(NpgsqlDbType).GetFields() .Select(f => f.GetCustomAttribute<BuiltInPostgresType>()) .OfType<BuiltInPostgresType>() .SelectMany(attr => { var baseType = new PostgresBaseType("pg_catalog", attr.Name, attr.BaseOID); var arrayType = new PostgresArrayType("pg_catalog", "_" + attr.Name, attr.ArrayOID, baseType); if (attr.RangeName is null) { return new PostgresType[] { baseType, arrayType }; } var rangeType = new PostgresRangeType("pg_catalog", attr.RangeName, attr.RangeOID, baseType); return withMultiranges ? new PostgresType[] { baseType, arrayType, rangeType, new PostgresMultirangeType("pg_catalog", attr.MultirangeName!, attr.MultirangeOID, rangeType) } : new PostgresType[] { baseType, arrayType, rangeType }; }) .ToArray(); protected override IEnumerable<PostgresType> GetTypes() => SupportsMultirangeTypes ? _typesWithMultiranges ??= CreateTypes(withMultiranges: true) : _typesWithoutMultiranges ??= CreateTypes(withMultiranges: false); internal PostgresMinimalDatabaseInfo(NpgsqlConnector conn) : base(conn) { HasIntegerDateTimes = !conn.PostgresParameters.TryGetValue("integer_datetimes", out var intDateTimes) || intDateTimes == "on"; } }