diff --git a/src/Ydb.Sdk/CHANGELOG.md b/src/Ydb.Sdk/CHANGELOG.md index 29120e05..23011212 100644 --- a/src/Ydb.Sdk/CHANGELOG.md +++ b/src/Ydb.Sdk/CHANGELOG.md @@ -1,3 +1,5 @@ +- `Connection.State` is set to `Broken` when the session is deactivated. + ## v0.16.2 - Fixed bug in method GetSchema(): collection columns return Unspecified when decimal type about column. diff --git a/src/Ydb.Sdk/src/Ado/YdbCommand.cs b/src/Ydb.Sdk/src/Ado/YdbCommand.cs index 9fece60e..e92a4e85 100644 --- a/src/Ydb.Sdk/src/Ado/YdbCommand.cs +++ b/src/Ydb.Sdk/src/Ado/YdbCommand.cs @@ -214,7 +214,7 @@ protected override async Task ExecuteDbDataReaderAsync(CommandBeha await YdbConnection.Session.ExecuteQuery( preparedSql.ToString(), ydbParameters, execSettings, transaction?.TransactionControl ), - YdbConnection.Session.OnStatus, transaction + YdbConnection.OnStatus, transaction ); YdbConnection.LastReader = ydbDataReader; diff --git a/src/Ydb.Sdk/src/Ado/YdbConnection.cs b/src/Ydb.Sdk/src/Ado/YdbConnection.cs index 1c82aadc..71a25a9d 100644 --- a/src/Ydb.Sdk/src/Ado/YdbConnection.cs +++ b/src/Ydb.Sdk/src/Ado/YdbConnection.cs @@ -160,6 +160,16 @@ public override string ConnectionString private ConnectionState ConnectionState { get; set; } = ConnectionState.Closed; // Invoke AsyncOpen() + internal void OnStatus(Status status) + { + _session.OnStatus(status); + + if (!_session.IsActive) + { + ConnectionState = ConnectionState.Broken; + } + } + internal YdbDataReader? LastReader { get; set; } internal string LastCommand { get; set; } = string.Empty; internal bool IsBusy => LastReader is { IsOpen: true }; diff --git a/src/Ydb.Sdk/src/Ado/YdbSchema.cs b/src/Ydb.Sdk/src/Ado/YdbSchema.cs index 514efa20..402eb571 100644 --- a/src/Ydb.Sdk/src/Ado/YdbSchema.cs +++ b/src/Ydb.Sdk/src/Ado/YdbSchema.cs @@ -65,7 +65,7 @@ internal static async Task DescribeTable( if (status.IsNotSuccess) { - ydbConnection.Session.OnStatus(status); + ydbConnection.OnStatus(status); throw new YdbException(status); } @@ -76,7 +76,7 @@ internal static async Task DescribeTable( } catch (Driver.TransportException e) { - ydbConnection.Session.OnStatus(e.Status); + ydbConnection.OnStatus(e.Status); throw new YdbException("Transport error on DescribeTable", e); } diff --git a/src/Ydb.Sdk/src/Ado/YdbTransaction.cs b/src/Ydb.Sdk/src/Ado/YdbTransaction.cs index 32ba5f89..6765b8d1 100644 --- a/src/Ydb.Sdk/src/Ado/YdbTransaction.cs +++ b/src/Ydb.Sdk/src/Ado/YdbTransaction.cs @@ -99,7 +99,7 @@ private async Task FinishTransaction(Func> finishMethod) { Failed = true; - DbConnection.Session.OnStatus(status); + DbConnection.OnStatus(status); throw new YdbException(status); } @@ -108,7 +108,7 @@ private async Task FinishTransaction(Func> finishMethod) { Failed = true; - DbConnection.Session.OnStatus(e.Status); + DbConnection.OnStatus(e.Status); throw new YdbException(e.Status); }