Skip to content

Commit 192ec78

Browse files
committed
Proper handling of WarningMessage and InfoMessage on FbService (DNET-843).
1 parent 8dc5abd commit 192ec78

File tree

9 files changed

+47
-31
lines changed

9 files changed

+47
-31
lines changed

Provider/src/FirebirdSql.Data.FirebirdClient/Client/Managed/Version10/GdsDatabase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ internal class GdsDatabase : IDatabase
3838

3939
#region Callbacks
4040

41-
public WarningMessageCallback WarningMessage
41+
public Action<IscException> WarningMessage
4242
{
4343
get { return _warningMessage; }
4444
set { _warningMessage = value; }
@@ -48,7 +48,7 @@ public WarningMessageCallback WarningMessage
4848

4949
#region Fields
5050

51-
protected WarningMessageCallback _warningMessage;
51+
protected Action<IscException> _warningMessage;
5252

5353
private GdsConnection _connection;
5454
private GdsEventManager _eventManager;

Provider/src/FirebirdSql.Data.FirebirdClient/Client/Managed/Version10/GdsServiceManager.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,20 @@ namespace FirebirdSql.Data.Client.Managed.Version10
2323
{
2424
internal class GdsServiceManager : IServiceManager
2525
{
26+
#region Callbacks
27+
28+
public Action<IscException> WarningMessage
29+
{
30+
get { return _warningMessage; }
31+
set { _warningMessage = value; }
32+
}
33+
34+
#endregion
35+
2636
#region Fields
2737

38+
private Action<IscException> _warningMessage;
39+
2840
private int _handle;
2941
private GdsConnection _connection;
3042
private GdsDatabase _database;
@@ -56,6 +68,7 @@ public GdsServiceManager(GdsConnection connection)
5668
{
5769
_connection = connection;
5870
_database = CreateDatabase(_connection);
71+
RewireWarningMessage();
5972
}
6073

6174
#endregion
@@ -183,6 +196,11 @@ protected virtual GdsDatabase CreateDatabase(GdsConnection connection)
183196
return new GdsDatabase(connection);
184197
}
185198

199+
private void RewireWarningMessage()
200+
{
201+
_database.WarningMessage = ex => _warningMessage?.Invoke(ex);
202+
}
203+
186204
#endregion
187205
}
188206
}

Provider/src/FirebirdSql.Data.FirebirdClient/Client/Native/FesDatabase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ internal sealed class FesDatabase : IDatabase
2929
{
3030
#region Callbacks
3131

32-
public WarningMessageCallback WarningMessage
32+
public Action<IscException> WarningMessage
3333
{
3434
get { return _warningMessage; }
3535
set { _warningMessage = value; }
@@ -39,7 +39,7 @@ public WarningMessageCallback WarningMessage
3939

4040
#region Fields
4141

42-
private WarningMessageCallback _warningMessage;
42+
private Action<IscException> _warningMessage;
4343

4444
private DatabaseHandle _handle;
4545
private int _transactionCount;

Provider/src/FirebirdSql.Data.FirebirdClient/Client/Native/FesServiceManager.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,20 @@ namespace FirebirdSql.Data.Client.Native
2323
{
2424
internal sealed class FesServiceManager : IServiceManager
2525
{
26+
#region Callbacks
27+
28+
public Action<IscException> WarningMessage
29+
{
30+
get { return _warningMessage; }
31+
set { _warningMessage = value; }
32+
}
33+
34+
#endregion
35+
2636
#region Fields
2737

38+
private Action<IscException> _warningMessage;
39+
2840
private IFbClient _fbClient;
2941
private int _handle;
3042
private IntPtr[] _statusVector;
@@ -149,8 +161,7 @@ private void ProcessStatusVector(IntPtr[] statusVector)
149161
{
150162
if (ex.IsWarning)
151163
{
152-
#warning This is not propagated to FesDatabase's callback as with GdsDatabase
153-
//_warningMessage?.Invoke(ex);
164+
_warningMessage?.Invoke(ex);
154165
}
155166
else
156167
{

Provider/src/FirebirdSql.Data.FirebirdClient/Common/IDatabase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace FirebirdSql.Data.Common
2323
{
2424
internal interface IDatabase : IDisposable
2525
{
26-
WarningMessageCallback WarningMessage { get; set; }
26+
Action<IscException> WarningMessage { get; set; }
2727

2828
int Handle { get; }
2929
int TransactionCount { get; set; }

Provider/src/FirebirdSql.Data.FirebirdClient/Common/IServiceManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ namespace FirebirdSql.Data.Common
2121
{
2222
internal interface IServiceManager
2323
{
24+
Action<IscException> WarningMessage { get; set; }
25+
2426
int Handle { get; }
2527

2628
void Attach(ServiceParameterBuffer spb, string dataSource, int port, string service, byte[] cryptKey);

Provider/src/FirebirdSql.Data.FirebirdClient/Common/WarningMessageCallback.cs

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

Provider/src/FirebirdSql.Data.FirebirdClient/FirebirdClient/FbConnection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ public override void Open()
481481
#endif
482482

483483
// Bind Warning messages event
484-
_innerConnection.Database.WarningMessage = new WarningMessageCallback(OnWarningMessage);
484+
_innerConnection.Database.WarningMessage = OnWarningMessage;
485485

486486
// Update the connection state
487487
OnStateChange(_state, ConnectionState.Open);

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbService.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public abstract class FbService
3030
{
3131
public event EventHandler<ServiceOutputEventArgs> ServiceOutput;
3232

33+
public event EventHandler<FbInfoMessageEventArgs> InfoMessage;
34+
3335
private const string ServiceName = "service_mgr";
3436

3537
private IServiceManager _svc;
@@ -111,6 +113,7 @@ protected void Open()
111113
_svc = ClientFactory.CreateServiceManager(_csManager);
112114
}
113115
_svc.Attach(BuildSpb(), _csManager.DataSource, _csManager.Port, ServiceName, _csManager.CryptKey);
116+
_svc.WarningMessage = OnWarningMessage;
114117
State = FbServiceState.Open;
115118
}
116119
catch (Exception ex)
@@ -357,6 +360,11 @@ private byte[] QueryService(byte[] items)
357360
}
358361
}
359362

363+
private void OnWarningMessage(IscException warning)
364+
{
365+
InfoMessage?.Invoke(this, new FbInfoMessageEventArgs(warning));
366+
}
367+
360368
private static FbServerConfig ParseServerConfig(byte[] buffer, ref int pos)
361369
{
362370
var config = new FbServerConfig();

0 commit comments

Comments
 (0)