Skip to content

Commit 617a18b

Browse files
committed
Invoke callback when auto-enlisting a transaction.
Signed-off-by: Bradley Grainger <[email protected]>
1 parent 1453ef5 commit 617a18b

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/MySqlConnector/MySqlConnection.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,13 @@ internal async Task OpenAsync(IOBehavior? ioBehavior, CancellationToken cancella
551551
ActivitySourceHelper.CopyTags(m_session!.ActivityTags, activity);
552552
m_hasBeenOpened = true;
553553
SetState(ConnectionState.Open);
554+
555+
if (ConnectionOpenedCallback is { } autoEnlistConnectionOpenedCallback)
556+
{
557+
cancellationToken.ThrowIfCancellationRequested();
558+
await autoEnlistConnectionOpenedCallback(new(this, MySqlConnectionOpenedConditions.None), cancellationToken).ConfigureAwait(false);
559+
}
560+
554561
return;
555562
}
556563
}

tests/IntegrationTests/TransactionScopeTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,38 @@ public void Bug1348()
886886

887887
Assert.True(rollbacked, $"First branch transaction '{xid}1' not rolled back");
888888
}
889+
890+
[Fact]
891+
public void ConnectionOpenedCallbackAutoEnlistInTransaction()
892+
{
893+
var connectionOpenedCallbackCount = 0;
894+
var connectionOpenedConditions = MySqlConnectionOpenedConditions.None;
895+
using var dataSource = new MySqlDataSourceBuilder(AppConfig.ConnectionString)
896+
.UseConnectionOpenedCallback((ctx, token) =>
897+
{
898+
connectionOpenedCallbackCount++;
899+
connectionOpenedConditions = ctx.Conditions;
900+
return default;
901+
})
902+
.Build();
903+
904+
using (var transactionScope = new TransactionScope())
905+
{
906+
using (var conn = dataSource.OpenConnection())
907+
{
908+
Assert.Equal(1, connectionOpenedCallbackCount);
909+
Assert.Equal(MySqlConnectionOpenedConditions.New, connectionOpenedConditions);
910+
}
911+
912+
using (var conn = dataSource.OpenConnection())
913+
{
914+
Assert.Equal(2, connectionOpenedCallbackCount);
915+
Assert.Equal(MySqlConnectionOpenedConditions.None, connectionOpenedConditions);
916+
}
917+
918+
transactionScope.Complete();
919+
}
920+
}
889921
#endif
890922

891923
readonly DatabaseFixture m_database;

0 commit comments

Comments
 (0)