disable DateOnly / TimeOnly support - see #2071 / #2072

This commit is contained in:
Marc Gravell
2024-04-26 08:49:47 +01:00
parent 2fa046cd39
commit 907a4d9b35
2 changed files with 24 additions and 6 deletions
+2 -2
View File
@@ -202,7 +202,7 @@ namespace Dapper
static SqlMapper()
{
typeMap = new Dictionary<Type, TypeMapEntry>(41
#if NET6_0_OR_GREATER
#if NET6_0_OR_GREATER && DATEONLY
+ 4 // {Date|Time}Only[?]
#endif
)
@@ -248,7 +248,7 @@ namespace Dapper
[typeof(SqlDecimal?)] = TypeMapEntry.DecimalFieldValue,
[typeof(SqlMoney)] = TypeMapEntry.DecimalFieldValue,
[typeof(SqlMoney?)] = TypeMapEntry.DecimalFieldValue,
#if NET6_0_OR_GREATER
#if NET6_0_OR_GREATER && DATEONLY
[typeof(DateOnly)] = TypeMapEntry.DoNotSetFieldValue,
[typeof(TimeOnly)] = TypeMapEntry.DoNotSetFieldValue,
[typeof(DateOnly?)] = TypeMapEntry.DoNotSetFieldValue,
+22 -4
View File
@@ -9,7 +9,7 @@ namespace Dapper.Tests;
[Collection("DateTimeOnlyTests")]
public sealed class SystemSqlClientDateTimeOnlyTests : DateTimeOnlyTests<SystemSqlClientProvider> { }
*/
#if MSSQLCLIENT
#if MSSQLCLIENT && DATEONLY
[Collection("DateTimeOnlyTests")]
public sealed class MicrosoftSqlClientDateTimeOnlyTests : DateTimeOnlyTests<MicrosoftSqlClientProvider> { }
#endif
@@ -17,8 +17,11 @@ public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where T
{
public class HazDateTimeOnly
{
public string Name { get; set; }
public DateOnly Date { get; set; }
public TimeOnly Time { get; set; }
public DateOnly? NDate { get; set; }
public TimeOnly? NTime { get; set; }
}
[Fact]
@@ -27,12 +30,18 @@ public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where T
var now = DateTime.Now;
var args = new HazDateTimeOnly
{
Name = nameof(TypedInOut),
Date = DateOnly.FromDateTime(now),
Time = TimeOnly.FromDateTime(now),
NDate = DateOnly.FromDateTime(now),
NTime = TimeOnly.FromDateTime(now),
};
var row = connection.QuerySingle<HazDateTimeOnly>("select @date as [Date], @time as [Time]", args);
var row = connection.QuerySingle<HazDateTimeOnly>("select @name as [Name], @date as [Date], @time as [Time], @ndate as [NDate], @ntime as [NTime]", args);
Assert.Equal(args.Name, row.Name);
Assert.Equal(args.Date, row.Date);
Assert.Equal(args.Time, row.Time);
Assert.Equal(args.NDate, row.NDate);
Assert.Equal(args.NTime, row.NTime);
}
[Fact]
@@ -41,12 +50,18 @@ public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where T
var now = DateTime.Now;
var args = new HazDateTimeOnly
{
Name = nameof(TypedInOutAsync),
Date = DateOnly.FromDateTime(now),
Time = TimeOnly.FromDateTime(now),
NDate = DateOnly.FromDateTime(now),
NTime = TimeOnly.FromDateTime(now),
};
var row = await connection.QuerySingleAsync<HazDateTimeOnly>("select @date as [Date], @time as [Time]", args);
var row = await connection.QuerySingleAsync<HazDateTimeOnly>("select @name as [Name], @date as [Date], @time as [Time], @ndate as [NDate], @ntime as [NTime]", args);
Assert.Equal(args.Name, row.Name);
Assert.Equal(args.Date, row.Date);
Assert.Equal(args.Time, row.Time);
Assert.Equal(args.NDate, row.NDate);
Assert.Equal(args.NTime, row.NTime);
}
[Fact]
@@ -54,11 +69,14 @@ public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where T
{
var now = DateTime.Now;
var args = new DynamicParameters();
var name = nameof(UntypedInOut);
var date = DateOnly.FromDateTime(now);
var time = TimeOnly.FromDateTime(now);
args.Add("name", name);
args.Add("date", date);
args.Add("time", time);
var row = connection.QuerySingle<dynamic>("select @date as [Date], @time as [Time]", args);
var row = connection.QuerySingle<dynamic>("select @name as [Name], @date as [Date], @time as [Time]", args);
Assert.Equal(name, (string)row.Name);
// untyped, observation is that these come back as DateTime and TimeSpan
Assert.Equal(date, DateOnly.FromDateTime((DateTime)row.Date));
Assert.Equal(time, TimeOnly.FromTimeSpan((TimeSpan)row.Time));