@@ -149,16 +149,31 @@ private async ValueTask<MySqlTransaction> BeginTransactionAsync(IsolationLevel i
149
149
// get the bytes for both payloads concatenated together (suitable for pipelining)
150
150
var startTransactionPayload = GetStartTransactionPayload ( isolationLevel , isReadOnly , m_session ! . SupportsQueryAttributes ) ;
151
151
152
- // send the two packets separately
153
- await m_session . SendAsync ( new Protocol . PayloadData ( startTransactionPayload . Slice ( 4 , startTransactionPayload . Span [ 0 ] ) ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
152
+ if ( GetInitializedConnectionSettings ( ) is { UseCompression : false , Pipelining : not false } )
153
+ {
154
+ // send the two packets together
155
+ await m_session . SendRawAsync ( startTransactionPayload , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
154
156
155
- var payload = await m_session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
156
- OkPayload . Verify ( payload . Span , m_session . SupportsDeprecateEof , m_session . SupportsSessionTrack ) ;
157
+ // read the two OK replies
158
+ var payload = await m_session . ReceiveReplyAsync ( 1 , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
159
+ OkPayload . Verify ( payload . Span , m_session . SupportsDeprecateEof , m_session . SupportsSessionTrack ) ;
160
+
161
+ payload = await m_session . ReceiveReplyAsync ( 1 , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
162
+ OkPayload . Verify ( payload . Span , m_session . SupportsDeprecateEof , m_session . SupportsSessionTrack ) ;
163
+ }
164
+ else
165
+ {
166
+ // send the two packets separately
167
+ await m_session . SendAsync ( new Protocol . PayloadData ( startTransactionPayload . Slice ( 4 , startTransactionPayload . Span [ 0 ] ) ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
157
168
158
- await m_session . SendAsync ( new Protocol . PayloadData ( startTransactionPayload . Slice ( 8 + startTransactionPayload . Span [ 0 ] , startTransactionPayload . Span [ startTransactionPayload . Span [ 0 ] + 4 ] ) ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
169
+ var payload = await m_session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
170
+ OkPayload . Verify ( payload . Span , m_session . SupportsDeprecateEof , m_session . SupportsSessionTrack ) ;
159
171
160
- payload = await m_session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
161
- OkPayload . Verify ( payload . Span , m_session . SupportsDeprecateEof , m_session . SupportsSessionTrack ) ;
172
+ await m_session . SendAsync ( new Protocol . PayloadData ( startTransactionPayload . Slice ( 8 + startTransactionPayload . Span [ 0 ] , startTransactionPayload . Span [ startTransactionPayload . Span [ 0 ] + 4 ] ) ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
173
+
174
+ payload = await m_session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
175
+ OkPayload . Verify ( payload . Span , m_session . SupportsDeprecateEof , m_session . SupportsSessionTrack ) ;
176
+ }
162
177
163
178
var transaction = new MySqlTransaction ( this , isolationLevel ) ;
164
179
CurrentTransaction = transaction ;
0 commit comments