Skip to content

Commit 907a4d9

Browse files
committed
disable DateOnly / TimeOnly support - see #2071 / #2072
1 parent 2fa046c commit 907a4d9

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

Dapper/SqlMapper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public static implicit operator TypeMapEntry(DbType dbType)
202202
static SqlMapper()
203203
{
204204
typeMap = new Dictionary<Type, TypeMapEntry>(41
205-
#if NET6_0_OR_GREATER
205+
#if NET6_0_OR_GREATER && DATEONLY
206206
+ 4 // {Date|Time}Only[?]
207207
#endif
208208
)
@@ -248,7 +248,7 @@ static SqlMapper()
248248
[typeof(SqlDecimal?)] = TypeMapEntry.DecimalFieldValue,
249249
[typeof(SqlMoney)] = TypeMapEntry.DecimalFieldValue,
250250
[typeof(SqlMoney?)] = TypeMapEntry.DecimalFieldValue,
251-
#if NET6_0_OR_GREATER
251+
#if NET6_0_OR_GREATER && DATEONLY
252252
[typeof(DateOnly)] = TypeMapEntry.DoNotSetFieldValue,
253253
[typeof(TimeOnly)] = TypeMapEntry.DoNotSetFieldValue,
254254
[typeof(DateOnly?)] = TypeMapEntry.DoNotSetFieldValue,

tests/Dapper.Tests/DateTimeOnlyTests.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ namespace Dapper.Tests;
99
[Collection("DateTimeOnlyTests")]
1010
public sealed class SystemSqlClientDateTimeOnlyTests : DateTimeOnlyTests<SystemSqlClientProvider> { }
1111
*/
12-
#if MSSQLCLIENT
12+
#if MSSQLCLIENT && DATEONLY
1313
[Collection("DateTimeOnlyTests")]
1414
public sealed class MicrosoftSqlClientDateTimeOnlyTests : DateTimeOnlyTests<MicrosoftSqlClientProvider> { }
1515
#endif
1616
public abstract class DateTimeOnlyTests<TProvider> : TestBase<TProvider> where TProvider : DatabaseProvider
1717
{
1818
public class HazDateTimeOnly
1919
{
20+
public string Name { get; set; }
2021
public DateOnly Date { get; set; }
2122
public TimeOnly Time { get; set; }
23+
public DateOnly? NDate { get; set; }
24+
public TimeOnly? NTime { get; set; }
2225
}
2326

2427
[Fact]
@@ -27,12 +30,18 @@ public void TypedInOut()
2730
var now = DateTime.Now;
2831
var args = new HazDateTimeOnly
2932
{
33+
Name = nameof(TypedInOut),
3034
Date = DateOnly.FromDateTime(now),
3135
Time = TimeOnly.FromDateTime(now),
36+
NDate = DateOnly.FromDateTime(now),
37+
NTime = TimeOnly.FromDateTime(now),
3238
};
33-
var row = connection.QuerySingle<HazDateTimeOnly>("select @date as [Date], @time as [Time]", args);
39+
var row = connection.QuerySingle<HazDateTimeOnly>("select @name as [Name], @date as [Date], @time as [Time], @ndate as [NDate], @ntime as [NTime]", args);
40+
Assert.Equal(args.Name, row.Name);
3441
Assert.Equal(args.Date, row.Date);
3542
Assert.Equal(args.Time, row.Time);
43+
Assert.Equal(args.NDate, row.NDate);
44+
Assert.Equal(args.NTime, row.NTime);
3645
}
3746

3847
[Fact]
@@ -41,24 +50,33 @@ public async Task TypedInOutAsync()
4150
var now = DateTime.Now;
4251
var args = new HazDateTimeOnly
4352
{
53+
Name = nameof(TypedInOutAsync),
4454
Date = DateOnly.FromDateTime(now),
4555
Time = TimeOnly.FromDateTime(now),
56+
NDate = DateOnly.FromDateTime(now),
57+
NTime = TimeOnly.FromDateTime(now),
4658
};
47-
var row = await connection.QuerySingleAsync<HazDateTimeOnly>("select @date as [Date], @time as [Time]", args);
59+
var row = await connection.QuerySingleAsync<HazDateTimeOnly>("select @name as [Name], @date as [Date], @time as [Time], @ndate as [NDate], @ntime as [NTime]", args);
60+
Assert.Equal(args.Name, row.Name);
4861
Assert.Equal(args.Date, row.Date);
4962
Assert.Equal(args.Time, row.Time);
63+
Assert.Equal(args.NDate, row.NDate);
64+
Assert.Equal(args.NTime, row.NTime);
5065
}
5166

5267
[Fact]
5368
public void UntypedInOut()
5469
{
5570
var now = DateTime.Now;
5671
var args = new DynamicParameters();
72+
var name = nameof(UntypedInOut);
5773
var date = DateOnly.FromDateTime(now);
5874
var time = TimeOnly.FromDateTime(now);
75+
args.Add("name", name);
5976
args.Add("date", date);
6077
args.Add("time", time);
61-
var row = connection.QuerySingle<dynamic>("select @date as [Date], @time as [Time]", args);
78+
var row = connection.QuerySingle<dynamic>("select @name as [Name], @date as [Date], @time as [Time]", args);
79+
Assert.Equal(name, (string)row.Name);
6280
// untyped, observation is that these come back as DateTime and TimeSpan
6381
Assert.Equal(date, DateOnly.FromDateTime((DateTime)row.Date));
6482
Assert.Equal(time, TimeOnly.FromTimeSpan((TimeSpan)row.Time));

0 commit comments

Comments
 (0)