forked from npgsql/npgsql
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTimeHandler.cs
More file actions
34 lines (28 loc) · 1.37 KB
/
TimeHandler.cs
File metadata and controls
34 lines (28 loc) · 1.37 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
using System;
using NodaTime;
using Npgsql.BackendMessages;
using Npgsql.PostgresTypes;
using Npgsql.TypeHandling;
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
namespace Npgsql.NodaTime
{
public class TimeHandlerFactory : NpgsqlTypeHandlerFactory<LocalTime>
{
// Check for the legacy floating point timestamps feature
public override NpgsqlTypeHandler<LocalTime> Create(PostgresType postgresType, NpgsqlConnection conn)
=> conn.HasIntegerDateTimes
? new TimeHandler(postgresType)
: throw new NotSupportedException($"The deprecated floating-point date/time format is not supported by {nameof(Npgsql)}.");
}
class TimeHandler : NpgsqlSimpleTypeHandler<LocalTime>
{
public TimeHandler(PostgresType postgresType) : base(postgresType) {}
// PostgreSQL time resolution == 1 microsecond == 10 ticks
public override LocalTime Read(NpgsqlReadBuffer buf, int len, FieldDescription? fieldDescription = null)
=> LocalTime.FromTicksSinceMidnight(buf.ReadInt64() * 10);
public override int ValidateAndGetLength(LocalTime value, NpgsqlParameter? parameter)
=> 8;
public override void Write(LocalTime value, NpgsqlWriteBuffer buf, NpgsqlParameter? parameter)
=> buf.WriteInt64(value.TickOfDay / 10);
}
}