diff --git a/ClickHouse.Driver.Tests/ADO/DataSourceTests.cs b/ClickHouse.Driver.Tests/ADO/DataSourceTests.cs index 27086d992..5ba5eee0c 100644 --- a/ClickHouse.Driver.Tests/ADO/DataSourceTests.cs +++ b/ClickHouse.Driver.Tests/ADO/DataSourceTests.cs @@ -1,4 +1,6 @@ #if NET7_0_OR_GREATER +using System.Data; +using System.Threading.Tasks; using ClickHouse.Driver.ADO; using NUnit.Framework; @@ -14,5 +16,16 @@ public void CanCreateConnection() using var connection = dataSource.CreateConnection(); Assert.That(connectionString, Is.EqualTo(connection.ConnectionString)); } + + [Test] + public async Task OpenConnectionAsync_WithoutCancellationToken_ReturnsOpenClickHouseConnection() + { + using var dataSource = new ClickHouseDataSource(TestUtilities.GetTestClickHouseClientSettings()); + await using ClickHouseConnection connection = await dataSource.OpenConnectionAsync(); + Assert.That(connection.State, Is.EqualTo(ConnectionState.Open)); + + using var command = connection.CreateCommand("SELECT 1"); + Assert.That(await command.ExecuteScalarAsync(), Is.EqualTo(1)); + } } #endif diff --git a/ClickHouse.Driver/ADO/ClickHouseDataSource.cs b/ClickHouse.Driver/ADO/ClickHouseDataSource.cs index 998c1b3a9..8489cffe0 100644 --- a/ClickHouse.Driver/ADO/ClickHouseDataSource.cs +++ b/ClickHouse.Driver/ADO/ClickHouseDataSource.cs @@ -144,7 +144,7 @@ protected override DbConnection CreateDbConnection() IClickHouseConnection IClickHouseDataSource.OpenConnection() => OpenConnection(); - public new async Task OpenConnectionAsync(CancellationToken cancellationToken) + public new async Task OpenConnectionAsync(CancellationToken cancellationToken = default) { var cn = await OpenDbConnectionAsync(cancellationToken).ConfigureAwait(false); return (ClickHouseConnection)cn; diff --git a/ClickHouse.Driver/PublicAPI/PublicAPI.Unshipped.txt b/ClickHouse.Driver/PublicAPI/PublicAPI.Unshipped.txt index 156f29ee6..519045bec 100644 --- a/ClickHouse.Driver/PublicAPI/PublicAPI.Unshipped.txt +++ b/ClickHouse.Driver/PublicAPI/PublicAPI.Unshipped.txt @@ -91,7 +91,7 @@ ClickHouse.Driver.ADO.ClickHouseDataSource.CreateConnection() -> ClickHouse.Driv ClickHouse.Driver.ADO.ClickHouseDataSource.LoggerFactory.get -> Microsoft.Extensions.Logging.ILoggerFactory ClickHouse.Driver.ADO.ClickHouseDataSource.LoggerFactory.set -> void ClickHouse.Driver.ADO.ClickHouseDataSource.OpenConnection() -> ClickHouse.Driver.ADO.ClickHouseConnection -ClickHouse.Driver.ADO.ClickHouseDataSource.OpenConnectionAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +ClickHouse.Driver.ADO.ClickHouseDataSource.OpenConnectionAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task ClickHouse.Driver.ADO.ClickHouseDataSource.Settings.get -> ClickHouse.Driver.ADO.ClickHouseClientSettings ClickHouse.Driver.ADO.ClickHouseDefaults ClickHouse.Driver.ADO.Feature.Dynamic = 2048 -> ClickHouse.Driver.ADO.Feature diff --git a/ClickHouse.Driver/PublicAPI/net8.0/PublicAPI.Shipped.txt b/ClickHouse.Driver/PublicAPI/net8.0/PublicAPI.Shipped.txt index a36e88a58..dc4c5aaae 100644 --- a/ClickHouse.Driver/PublicAPI/net8.0/PublicAPI.Shipped.txt +++ b/ClickHouse.Driver/PublicAPI/net8.0/PublicAPI.Shipped.txt @@ -5,7 +5,7 @@ ClickHouse.Driver.ADO.ClickHouseDataSource.CreateConnection() -> ClickHouse.Driv ClickHouse.Driver.ADO.ClickHouseDataSource.Logger.get -> Microsoft.Extensions.Logging.ILogger ClickHouse.Driver.ADO.ClickHouseDataSource.Logger.set -> void ClickHouse.Driver.ADO.ClickHouseDataSource.OpenConnection() -> ClickHouse.Driver.ADO.ClickHouseConnection -ClickHouse.Driver.ADO.ClickHouseDataSource.OpenConnectionAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +ClickHouse.Driver.ADO.ClickHouseDataSource.OpenConnectionAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task ClickHouse.Driver.ADO.Readers.ClickHouseDataReader.GetTuple(int ordinal) -> System.Runtime.CompilerServices.ITuple ClickHouse.Driver.IClickHouseDataSource ClickHouse.Driver.IClickHouseDataSource.ConnectionString.get -> string diff --git a/changelog.d/686-datasource-openconnectionasync.fixes.md b/changelog.d/686-datasource-openconnectionasync.fixes.md new file mode 100644 index 000000000..c0e4c0a92 --- /dev/null +++ b/changelog.d/686-datasource-openconnectionasync.fixes.md @@ -0,0 +1,7 @@ +* Fixed `ClickHouseDataSource.OpenConnectionAsync()` without a cancellation token being typed as + `DbConnection` instead of `ClickHouseConnection` + ([#686](https://github.com/ClickHouse/clickhouse-cs/issues/686)). The documented ADO.NET examples + now compile. + - The call now returns `Task` instead of `ValueTask`. Code + that stores it as a `ValueTask`, or calls `.AsTask()` or `.Preserve()` on it, no + longer compiles: await the call directly, or call it through `DbDataSource` to keep the old type.