/
dev-npgsql
/
npgsql
Обзор
Документация
Войти
/
dev-npgsql
/
npgsql
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
v8.0.3
src/Npgsql/Util/Statics.cs
96 строк
3 KB
Nino Floris
Actually rename switch to EnableAssertions (#5433)
21 ноя 2023, 20:26
Не верифицирован
21 ноя 2023, 20:26
704195e
Код
Авторство
О чём код?
using Npgsql.Internal; using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; namespace Npgsql.Util; static class Statics { internal static readonly bool EnableAssertions; #if DEBUG internal static bool LegacyTimestampBehavior; internal static bool DisableDateTimeInfinityConversions; #else internal static readonly bool LegacyTimestampBehavior; internal static readonly bool DisableDateTimeInfinityConversions; #endif static Statics() { EnableAssertions = AppContext.TryGetSwitch("Npgsql.EnableAssertions", out var enabled) && enabled; LegacyTimestampBehavior = AppContext.TryGetSwitch("Npgsql.EnableLegacyTimestampBehavior", out enabled) && enabled; DisableDateTimeInfinityConversions = AppContext.TryGetSwitch("Npgsql.DisableDateTimeInfinityConversions", out enabled) && enabled; } internal static T Expect<T>(IBackendMessage msg, NpgsqlConnector connector) { if (msg.GetType() != typeof(T)) ThrowIfMsgWrongType<T>(msg, connector); return (T)msg; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static T ExpectAny<T>(IBackendMessage msg, NpgsqlConnector connector) { if (msg is T t) return t; ThrowIfMsgWrongType<T>(msg, connector); return default; } [DoesNotReturn] static void ThrowIfMsgWrongType<T>(IBackendMessage msg, NpgsqlConnector connector) => throw connector.Break( new NpgsqlException($"Received backend message {msg.Code} while expecting {typeof(T).Name}. Please file a bug.")); [Conditional("DEBUG")] internal static void ValidateBackendMessageCode(BackendMessageCode code) { switch (code) { case BackendMessageCode.AuthenticationRequest: case BackendMessageCode.BackendKeyData: case BackendMessageCode.BindComplete: case BackendMessageCode.CloseComplete: case BackendMessageCode.CommandComplete: case BackendMessageCode.CopyData: case BackendMessageCode.CopyDone: case BackendMessageCode.CopyBothResponse: case BackendMessageCode.CopyInResponse: case BackendMessageCode.CopyOutResponse: case BackendMessageCode.DataRow: case BackendMessageCode.EmptyQueryResponse: case BackendMessageCode.ErrorResponse: case BackendMessageCode.FunctionCall: case BackendMessageCode.FunctionCallResponse: case BackendMessageCode.NoData: case BackendMessageCode.NoticeResponse: case BackendMessageCode.NotificationResponse: case BackendMessageCode.ParameterDescription: case BackendMessageCode.ParameterStatus: case BackendMessageCode.ParseComplete: case BackendMessageCode.PasswordPacket: case BackendMessageCode.PortalSuspended: case BackendMessageCode.ReadyForQuery: case BackendMessageCode.RowDescription: return; default: ThrowUnknownMessageCode(code); return; } static void ThrowUnknownMessageCode(BackendMessageCode code) => ThrowHelper.ThrowNpgsqlException($"Unknown message code: {code}"); } } static class EnumerableExtensions { internal static string Join(this IEnumerable<string> values, string separator) => string.Join(separator, values); }