From f2fa243f4170c882fe8e5d9e7f31786197d500b1 Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Wed, 1 Jun 2022 08:38:06 +0200 Subject: [PATCH] General infinity literals for DateTimeOffset min/max values Fixes #2389 --- .../Mapping/NpgsqlTimestampTzTypeMapping.cs | 13 +++++++++++++ .../Storage/NpgsqlTypeMappingTest.cs | 8 ++++++++ 2 files changed, 21 insertions(+) diff --git a/src/EFCore.PG/Storage/Internal/Mapping/NpgsqlTimestampTzTypeMapping.cs b/src/EFCore.PG/Storage/Internal/Mapping/NpgsqlTimestampTzTypeMapping.cs index ab48a1390..cf3ca7b50 100644 --- a/src/EFCore.PG/Storage/Internal/Mapping/NpgsqlTimestampTzTypeMapping.cs +++ b/src/EFCore.PG/Storage/Internal/Mapping/NpgsqlTimestampTzTypeMapping.cs @@ -58,6 +58,19 @@ private string GenerateLiteralCore(object value) }; case DateTimeOffset dateTimeOffset: + if (!NpgsqlTypeMappingSource.DisableDateTimeInfinityConversions) + { + if (dateTimeOffset == DateTimeOffset.MinValue) + { + return "-infinity"; + } + + if (dateTimeOffset == DateTimeOffset.MaxValue) + { + return "infinity"; + } + } + return dateTimeOffset.ToString("yyyy-MM-dd HH:mm:ss.FFFFFFzzz", CultureInfo.InvariantCulture); default: diff --git a/test/EFCore.PG.Tests/Storage/NpgsqlTypeMappingTest.cs b/test/EFCore.PG.Tests/Storage/NpgsqlTypeMappingTest.cs index ad54a3722..43aa50cf8 100644 --- a/test/EFCore.PG.Tests/Storage/NpgsqlTypeMappingTest.cs +++ b/test/EFCore.PG.Tests/Storage/NpgsqlTypeMappingTest.cs @@ -125,6 +125,14 @@ public void GenerateSqlLiteral_returns_timestamptz_infinity_literals() Assert.Equal( "TIMESTAMPTZ 'infinity'", GetMapping("timestamptz").GenerateSqlLiteral(DateTime.MaxValue)); + + Assert.Equal( + "TIMESTAMPTZ '-infinity'", + GetMapping("timestamptz").GenerateSqlLiteral(DateTimeOffset.MinValue)); + + Assert.Equal( + "TIMESTAMPTZ 'infinity'", + GetMapping("timestamptz").GenerateSqlLiteral(DateTimeOffset.MaxValue)); } [Fact]