Skip to content

Commit bd4f75b

Browse files
authored
normalize async API surface over all TFMs (#2144)
* - normalize async API surface over all TFMs (fix #2143) - target net8.0 instead of net5.0 - lib updates * net9 SDK * perf tests: clean up SqlClient warning * CI fix: test concurrency * rev snowflake
1 parent 4e57602 commit bd4f75b

34 files changed

+116
-79
lines changed

Dapper.ProviderTools/Dapper.ProviderTools.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<Title>Dapper Provider Tools</Title>
66
<Description>Provider-agnostic ADO.NET helper utilities</Description>
77
<Authors>Marc Gravell</Authors>
8-
<TargetFrameworks>net461;netstandard2.0;net5.0</TargetFrameworks>
8+
<TargetFrameworks>net461;netstandard2.0;net8.0</TargetFrameworks>
99
<SignAssembly>true</SignAssembly>
1010
<Nullable>enable</Nullable>
1111
</PropertyGroup>

Dapper.SqlBuilder/Dapper.SqlBuilder.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<Title>Dapper SqlBuilder component</Title>
66
<Description>The Dapper SqlBuilder component, for building SQL queries dynamically.</Description>
77
<Authors>Sam Saffron, Johan Danforth</Authors>
8-
<TargetFrameworks>net461;netstandard2.0;net5.0</TargetFrameworks>
8+
<TargetFrameworks>net461;netstandard2.0;net8.0</TargetFrameworks>
99
<GenerateDocumentationFile>false</GenerateDocumentationFile>
1010
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
1111
<Nullable>enable</Nullable>

Dapper.StrongName/Dapper.StrongName.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<Title>Dapper (Strong Named)</Title>
66
<Description>A high performance Micro-ORM supporting SQL Server, MySQL, Sqlite, SqlCE, Firebird etc. Major Sponsor: Dapper Plus from ZZZ Projects.</Description>
77
<Authors>Sam Saffron;Marc Gravell;Nick Craver</Authors>
8-
<TargetFrameworks>net461;netstandard2.0;net5.0;net7.0</TargetFrameworks>
8+
<TargetFrameworks>net461;netstandard2.0;net8.0</TargetFrameworks>
99
<SignAssembly>true</SignAssembly>
1010
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
1111
<Nullable>enable</Nullable>
@@ -17,7 +17,12 @@
1717
<Compile Include="..\Dapper\**\*.cs" Exclude="..\Dapper\obj\**\*.cs" />
1818
</ItemGroup>
1919

20+
<ItemGroup Condition=" '$(TargetFramework)' == 'net461'">
21+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
22+
</ItemGroup>
23+
2024
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0'">
25+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
2126
<PackageReference Include="System.Reflection.Emit.Lightweight" />
2227
</ItemGroup>
2328
</Project>

Dapper/Dapper.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<PackageTags>orm;sql;micro-orm</PackageTags>
66
<Description>A high performance Micro-ORM supporting SQL Server, MySQL, Sqlite, SqlCE, Firebird etc. Major Sponsor: Dapper Plus from ZZZ Projects.</Description>
77
<Authors>Sam Saffron;Marc Gravell;Nick Craver</Authors>
8-
<TargetFrameworks>net461;netstandard2.0;net5.0;net6.0;net7.0</TargetFrameworks>
8+
<TargetFrameworks>net461;netstandard2.0;net8.0</TargetFrameworks>
99
<Nullable>enable</Nullable>
1010
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
1111
</PropertyGroup>
@@ -24,7 +24,12 @@
2424
</PackageReference>
2525
</ItemGroup>
2626

27+
<ItemGroup Condition=" '$(TargetFramework)' == 'net461'">
28+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
29+
</ItemGroup>
30+
2731
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0'">
32+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
2833
<PackageReference Include="System.Reflection.Emit.Lightweight" />
2934
</ItemGroup>
3035
</Project>

Dapper/PublicAPI.Shipped.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ Dapper.SqlMapper.GridReader.CancellationToken.get -> System.Threading.Cancellati
6969
Dapper.SqlMapper.GridReader.Command.get -> System.Data.IDbCommand!
7070
Dapper.SqlMapper.GridReader.Command.set -> void
7171
Dapper.SqlMapper.GridReader.Dispose() -> void
72+
Dapper.SqlMapper.GridReader.DisposeAsync() -> System.Threading.Tasks.ValueTask
7273
Dapper.SqlMapper.GridReader.GridReader(System.Data.IDbCommand! command, System.Data.Common.DbDataReader! reader, Dapper.SqlMapper.Identity? identity, System.Action<object?>? onCompleted = null, object? state = null, bool addToCache = false, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> void
7374
Dapper.SqlMapper.GridReader.IsConsumed.get -> bool
7475
Dapper.SqlMapper.GridReader.OnAfterGrid(int index) -> void
@@ -112,6 +113,8 @@ Dapper.SqlMapper.GridReader.ReadSingleOrDefault<T>() -> T?
112113
Dapper.SqlMapper.GridReader.ReadSingleOrDefaultAsync() -> System.Threading.Tasks.Task<dynamic?>!
113114
Dapper.SqlMapper.GridReader.ReadSingleOrDefaultAsync(System.Type! type) -> System.Threading.Tasks.Task<object?>!
114115
Dapper.SqlMapper.GridReader.ReadSingleOrDefaultAsync<T>() -> System.Threading.Tasks.Task<T?>!
116+
Dapper.SqlMapper.GridReader.ReadUnbufferedAsync() -> System.Collections.Generic.IAsyncEnumerable<dynamic!>!
117+
Dapper.SqlMapper.GridReader.ReadUnbufferedAsync<T>() -> System.Collections.Generic.IAsyncEnumerable<T>!
115118
Dapper.SqlMapper.GridReader.ResultIndex.get -> int
116119
Dapper.SqlMapper.ICustomQueryParameter
117120
Dapper.SqlMapper.ICustomQueryParameter.AddParameter(System.Data.IDbCommand! command, string! name) -> void
@@ -295,6 +298,8 @@ static Dapper.SqlMapper.QuerySingleOrDefaultAsync(this System.Data.IDbConnection
295298
static Dapper.SqlMapper.QuerySingleOrDefaultAsync(this System.Data.IDbConnection! cnn, System.Type! type, string! sql, object? param = null, System.Data.IDbTransaction? transaction = null, int? commandTimeout = null, System.Data.CommandType? commandType = null) -> System.Threading.Tasks.Task<object?>!
296299
static Dapper.SqlMapper.QuerySingleOrDefaultAsync<T>(this System.Data.IDbConnection! cnn, Dapper.CommandDefinition command) -> System.Threading.Tasks.Task<T?>!
297300
static Dapper.SqlMapper.QuerySingleOrDefaultAsync<T>(this System.Data.IDbConnection! cnn, string! sql, object? param = null, System.Data.IDbTransaction? transaction = null, int? commandTimeout = null, System.Data.CommandType? commandType = null) -> System.Threading.Tasks.Task<T?>!
301+
static Dapper.SqlMapper.QueryUnbufferedAsync(this System.Data.Common.DbConnection! cnn, string! sql, object? param = null, System.Data.Common.DbTransaction? transaction = null, int? commandTimeout = null, System.Data.CommandType? commandType = null) -> System.Collections.Generic.IAsyncEnumerable<dynamic!>!
302+
static Dapper.SqlMapper.QueryUnbufferedAsync<T>(this System.Data.Common.DbConnection! cnn, string! sql, object? param = null, System.Data.Common.DbTransaction? transaction = null, int? commandTimeout = null, System.Data.CommandType? commandType = null) -> System.Collections.Generic.IAsyncEnumerable<T>!
298303
static Dapper.SqlMapper.ReadChar(object! value) -> char
299304
static Dapper.SqlMapper.ReadNullableChar(object! value) -> char?
300305
static Dapper.SqlMapper.RemoveTypeMap(System.Type! type) -> void

Dapper/PublicAPI/net5.0/PublicAPI.Shipped.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

Dapper/PublicAPI/net6.0/PublicAPI.Shipped.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

Dapper/PublicAPI/net6.0/PublicAPI.Unshipped.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

Dapper/PublicAPI/net7.0/PublicAPI.Shipped.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

Dapper/PublicAPI/net7.0/PublicAPI.Unshipped.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#nullable enable

Dapper/SqlMapper.Async.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,6 @@ private static async Task<DbDataReader> ExecuteWrappedReaderImplAsync(IDbConnect
12491249
return Parse<T>(result);
12501250
}
12511251

1252-
#if NET5_0_OR_GREATER
12531252
/// <summary>
12541253
/// Execute a query asynchronously using <see cref="IAsyncEnumerable{dynamic}"/>.
12551254
/// </summary>
@@ -1338,12 +1337,15 @@ static async IAsyncEnumerable<T> Impl(IDbConnection cnn, Type effectiveType, Com
13381337
try { cmd?.Cancel(); }
13391338
catch { /* don't spoil any existing exception */ }
13401339
}
1340+
#if NET5_0_OR_GREATER
13411341
await reader.DisposeAsync();
1342+
#else
1343+
reader.Dispose();
1344+
#endif
13421345
}
13431346
if (wasClosed) cnn.Close();
13441347
}
13451348
}
13461349
}
1347-
#endif
13481350
}
13491351
}

Dapper/SqlMapper.GridReader.Async.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ namespace Dapper
1010
public static partial class SqlMapper
1111
{
1212
public partial class GridReader
13-
#if NET5_0_OR_GREATER
1413
: IAsyncDisposable
15-
#endif
1614
{
1715
/// <summary>
1816
/// Read the next grid of results, returned as a dynamic object
@@ -161,11 +159,8 @@ protected async Task OnAfterGridAsync(int index)
161159
#endif
162160
reader = null!;
163161
onCompleted?.Invoke(state);
164-
#if NET5_0_OR_GREATER
162+
165163
await DisposeAsync();
166-
#else
167-
Dispose();
168-
#endif
169164
}
170165
}
171166

@@ -247,7 +242,6 @@ private async Task<IEnumerable<T>> ReadBufferedAsync<T>(int index, Func<DbDataRe
247242
}
248243
}
249244

250-
#if NET5_0_OR_GREATER
251245
/// <summary>
252246
/// Read the next grid of results.
253247
/// </summary>
@@ -283,19 +277,29 @@ private async IAsyncEnumerable<T> ReadUnbufferedAsync<T>(int index, Func<DbDataR
283277
/// <summary>
284278
/// Dispose the grid, closing and disposing both the underlying reader and command.
285279
/// </summary>
280+
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously - for netfx version
286281
public async ValueTask DisposeAsync()
282+
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
287283
{
288284
if (reader is not null)
289285
{
290286
if (!reader.IsClosed) Command?.Cancel();
287+
#if NET5_0_OR_GREATER
291288
await reader.DisposeAsync();
289+
#else
290+
reader.Dispose();
291+
#endif
292292
reader = null!;
293293
}
294294
if (Command is not null)
295295
{
296296
if (Command is DbCommand typed)
297297
{
298+
#if NET5_0_OR_GREATER
298299
await typed.DisposeAsync();
300+
#else
301+
typed.Dispose();
302+
#endif
299303
}
300304
else
301305
{
@@ -305,7 +309,6 @@ public async ValueTask DisposeAsync()
305309
}
306310
GC.SuppressFinalize(this);
307311
}
308-
#endif
309312
}
310313
}
311314
}

Directory.Build.props

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@
2121
<IncludeSymbols>false</IncludeSymbols>
2222
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
2323
<PublishRepositoryUrl>true</PublishRepositoryUrl>
24-
<LangVersion>12</LangVersion>
24+
<LangVersion>13</LangVersion>
2525
<CheckEolTargetFramework>false</CheckEolTargetFramework>
2626
<SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
2727
<PackageReadmeFile>readme.md</PackageReadmeFile>
28+
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
2829
</PropertyGroup>
2930

3031
<PropertyGroup Condition="'$(Configuration)' == 'Release'">

Directory.Packages.props

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,46 @@
77
<PackageVersion Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" />
88
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
99
<PackageVersion Include="Microsoft.SqlServer.Types" Version="14.0.1016.290" />
10-
<PackageVersion Include="Nerdbank.GitVersioning" Version="3.6.143" />
10+
<PackageVersion Include="Nerdbank.GitVersioning" Version="3.7.115" />
11+
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.1" />
1112
<PackageVersion Include="Microsoft.CodeAnalysis.PublicApiAnalyzers" Version="3.3.4" />
1213
<PackageVersion Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
1314
<!-- tests -->
14-
<PackageVersion Include="Azure.Identity" Version="1.12.1" />
15+
<PackageVersion Include="Azure.Identity" Version="1.13.2" />
1516
<PackageVersion Include="Belgrade.Sql.Client" Version="1.1.4" />
1617
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
1718
<PackageVersion Include="Dashing" Version="2.10.1" />
1819
<PackageVersion Include="Dapper.Contrib" Version="2.0.78" />
19-
<PackageVersion Include="DuckDB.NET.Data.Full" Version="1.1.1" />
20-
<PackageVersion Include="DevExpress.Xpo" Version="24.1.6" />
21-
<PackageVersion Include="FirebirdSql.Data.FirebirdClient" Version="10.3.1" />
20+
<PackageVersion Include="DuckDB.NET.Data.Full" Version="1.1.3" />
21+
<PackageVersion Include="DevExpress.Xpo" Version="24.2.3" />
22+
<PackageVersion Include="FirebirdSql.Data.FirebirdClient" Version="10.3.2" />
2223
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
2324
<PackageVersion Include="Iesi.Collections" Version="4.1.1" />
2425
<PackageVersion Include="linq2db.SqlServer" Version="5.4.1" />
25-
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.2" />
26-
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.8" />
27-
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.8" />
28-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
29-
<PackageVersion Include="Mighty" Version="3.2.0" />
30-
<PackageVersion Include="MySqlConnector" Version="2.3.7" />
26+
<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.0.1" />
27+
<PackageVersion Include="Microsoft.Data.Sqlite" Version="9.0.1" />
28+
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.1" />
29+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
30+
<PackageVersion Include="Mighty" Version="3.3.0" />
31+
<PackageVersion Include="MySqlConnector" Version="2.4.0" />
3132
<PackageVersion Include="NHibernate" Version="5.5.2" />
3233
<PackageVersion Include="Norm.net" Version="5.4.0" />
33-
<PackageVersion Include="Npgsql" Version="8.0.4" />
34+
<PackageVersion Include="Npgsql" Version="9.0.2" />
3435
<PackageVersion Include="PetaPoco" Version="5.1.306" />
3536
<PackageVersion Include="RepoDb.SqlServer" Version="1.13.1" />
36-
<PackageVersion Include="ServiceStack.OrmLite.SqlServer" Version="8.4.0" />
37-
<PackageVersion Include="Snowflake.Data" Version="4.1.0" />
37+
<PackageVersion Include="ServiceStack.OrmLite.SqlServer" Version="8.5.2" />
38+
<PackageVersion Include="Snowflake.Data" Version="4.3.0" />
3839
<PackageVersion Include="SqlMarshal" Version="0.5.0" />
3940
<PackageVersion Include="SubSonic" Version="3.0.0.4" />
4041
<PackageVersion Include="Susanoo.SqlServer" Version="1.2.4.2" />
41-
<PackageVersion Include="System.Data.SqlClient" Version="4.8.6" />
42+
<PackageVersion Include="System.Data.SqlClient" Version="4.9.0" />
4243
<PackageVersion Include="System.Data.SQLite" Version="1.0.119" />
4344
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
4445
<PackageVersion Include="System.Private.Uri" Version="4.3.2" />
45-
<PackageVersion Include="System.Reflection.Metadata" Version="8.0.0" />
46+
<PackageVersion Include="System.Reflection.Metadata" Version="9.0.1" />
4647
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
4748
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
48-
<PackageVersion Include="xunit" Version="2.9.2" />
49-
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
49+
<PackageVersion Include="xunit" Version="2.9.3" />
50+
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.1" />
5051
</ItemGroup>
5152
</Project>

appveyor.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ skip_commits:
66
files:
77
- '**/*.md'
88

9-
# install:
10-
# - choco install dotnet-sdk --version 8.0.100
9+
install:
10+
- choco install dotnet-sdk --version 9.0.101
1111

1212
environment:
1313
Appveyor: true

benchmarks/Dapper.Tests.Performance/Benchmarks.HandCoded.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System;
33
using System.ComponentModel;
44
using System.Data;
5-
using System.Data.SqlClient;
5+
using Microsoft.Data.SqlClient;
66

77
namespace Dapper.Tests.Performance
88
{

benchmarks/Dapper.Tests.Performance/Benchmarks.RepoDB.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ public void Setup()
2020
// We need this since benchmarks using System.Data.SqlClient
2121
var dbSetting = new SqlServerDbSetting();
2222
DbSettingMapper
23-
.Add<System.Data.SqlClient.SqlConnection>(dbSetting, true);
23+
.Add<Microsoft.Data.SqlClient.SqlConnection>(dbSetting, true);
2424
DbHelperMapper
25-
.Add<System.Data.SqlClient.SqlConnection>(new SqlServerDbHelper(), true);
25+
.Add<Microsoft.Data.SqlClient.SqlConnection>(new SqlServerDbHelper(), true);
2626
StatementBuilderMapper
27-
.Add<System.Data.SqlClient.SqlConnection>(new SqlServerStatementBuilder(dbSetting), true);
27+
.Add<Microsoft.Data.SqlClient.SqlConnection>(new SqlServerStatementBuilder(dbSetting), true);
2828

2929
ClassMapper.Add<Post>("Posts");
3030
}
@@ -54,7 +54,7 @@ public Post QueryDynamic()
5454
public Post QueryField()
5555
{
5656
Step();
57-
return _connection.Query<Post>(new QueryField[] { new(nameof(Post.Id), i) }).First();
57+
return _connection.Query<Post>([new(nameof(Post.Id), i)]).First();
5858
}
5959

6060
[Benchmark(Description = "ExecuteQuery<T>")]

benchmarks/Dapper.Tests.Performance/Benchmarks.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using BenchmarkDotNet.Attributes;
22
using System;
33
using System.Configuration;
4-
using System.Data.SqlClient;
4+
using Microsoft.Data.SqlClient;
55

66
namespace Dapper.Tests.Performance
77
{

benchmarks/Dapper.Tests.Performance/Dapper.Tests.Performance.csproj

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,22 @@
2121
<PackageReference Include="NHibernate" />
2222
<PackageReference Include="Iesi.Collections" />
2323
<PackageReference Include="Mighty" />
24-
<PackageReference Include="Npgsql" />
2524
<PackageReference Include="PetaPoco" />
2625
<PackageReference Include="RepoDb.SqlServer" />
2726
<PackageReference Include="ServiceStack.OrmLite.SqlServer" />
2827
<PackageReference Include="SqlMarshal" />
29-
<PackageReference Include="System.Data.SqlClient" />
3028
<PackageReference Include="System.Data.SQLite" />
3129
<PackageReference Include="System.Reflection.Metadata" />
3230
</ItemGroup>
3331

32+
<ItemGroup Condition="'$(TargetFramework)' != 'net462'">
33+
<PackageReference Include="Npgsql" />
34+
</ItemGroup>
35+
36+
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
37+
<PackageReference Include="Npgsql" VersionOverride="8.0.6"/>
38+
</ItemGroup>
39+
3440
<ItemGroup>
3541
<!-- NU1903 warnings -->
3642
<PackageReference Include="System.Text.RegularExpressions" />

0 commit comments

Comments
 (0)