/
dev-npgsql
/
npgsql
Обзор
Документация
Войти
/
dev-npgsql
/
npgsql
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Npgsql.NodaTime/Internal/DateIntervalConverter.cs
45 строк
2 KB
Nino Floris
Introduce bind operation on PgConverter surface (#6566)
11 май 2026, 20:01
Не верифицирован
11 май 2026, 20:01
0f4cfd8
Код
Авторство
О чём код?
using System; using System.Threading; using System.Threading.Tasks; using NodaTime; using Npgsql.Internal; using NpgsqlTypes; namespace Npgsql.NodaTime.Internal; public class DateIntervalConverter(PgConverter<NpgsqlRange<LocalDate>> rangeConverter, bool dateTimeInfinityConversions) : PgStreamingConverter<DateInterval> { public override DateInterval Read(PgReader reader) => Read(async: false, reader, CancellationToken.None).GetAwaiter().GetResult(); public override ValueTask<DateInterval> ReadAsync(PgReader reader, CancellationToken cancellationToken = default) => Read(async: true, reader, cancellationToken); async ValueTask<DateInterval> Read(bool async, PgReader reader, CancellationToken cancellationToken) { var range = async ? await rangeConverter.ReadAsync(reader, cancellationToken).ConfigureAwait(false) // ReSharper disable once MethodHasAsyncOverloadWithCancellation : rangeConverter.Read(reader); if (range.IsEmpty) throw new InvalidCastException("Cannot read an empty range as a NodaTime DateInterval."); var upperBound = range.UpperBound; if (upperBound != LocalDate.MaxIsoValue || !dateTimeInfinityConversions) upperBound -= Period.FromDays(1); return new(range.LowerBound, upperBound); } protected override Size BindValue(in BindContext context, DateInterval value, ref object? writeState) => rangeConverter.Bind(context, new NpgsqlRange<LocalDate>(value.Start, value.End), ref writeState); public override void Write(PgWriter writer, DateInterval value) => rangeConverter.Write(writer, new NpgsqlRange<LocalDate>(value.Start, value.End)); public override ValueTask WriteAsync(PgWriter writer, DateInterval value, CancellationToken cancellationToken = default) => rangeConverter.WriteAsync(writer, new NpgsqlRange<LocalDate>(value.Start, value.End), cancellationToken); }