@@ -451,7 +451,9 @@ public async Task DisposeAsync(IOBehavior ioBehavior, CancellationToken cancella
451451 ServerVersion = new ( initialHandshake . ServerVersion ) ;
452452 ConnectionId = initialHandshake . ConnectionId ;
453453 AuthPluginData = initialHandshake . AuthPluginData ;
454- m_useCompression = cs . UseCompression && ( initialHandshake . ProtocolCapabilities & ProtocolCapabilities . Compress ) != 0 ;
454+ m_compressionMethod = ! cs . UseCompression ? CompressionMethod . None :
455+ ( ( initialHandshake . ProtocolCapabilities & ProtocolCapabilities . ZstandardCompressionAlgorithm ) != 0 && connection . ZstandardPlugin is not null ) ? CompressionMethod . Zstandard :
456+ ( ( initialHandshake . ProtocolCapabilities & ProtocolCapabilities . Compress ) != 0 ) ? CompressionMethod . Zlib : CompressionMethod . None ;
455457 CancellationTimeout = cs . CancellationTimeout ;
456458 UserID = cs . UserID ;
457459
@@ -483,7 +485,7 @@ public async Task DisposeAsync(IOBehavior ioBehavior, CancellationToken cancella
483485 else
484486 {
485487 // pipelining is not currently compatible with compression
486- m_supportsPipelining = ! cs . UseCompression && cs . Pipelining is not false ;
488+ m_supportsPipelining = m_compressionMethod == CompressionMethod . None && cs . Pipelining is not false ;
487489
488490 // for pipelining, concatenate reset connection and SET NAMES query into one buffer
489491 if ( m_supportsPipelining )
@@ -500,7 +502,7 @@ public async Task DisposeAsync(IOBehavior ioBehavior, CancellationToken cancella
500502 }
501503 }
502504
503- Log . SessionMadeConnection ( m_logger , Id , ServerVersion . OriginalString , ConnectionId , m_useCompression , m_supportsConnectionAttributes , SupportsDeprecateEof , SupportsCachedPreparedMetadata , serverSupportsSsl , SupportsSessionTrack , m_supportsPipelining , SupportsQueryAttributes ) ;
505+ Log . SessionMadeConnection ( m_logger , Id , ServerVersion . OriginalString , ConnectionId , m_compressionMethod != CompressionMethod . None , m_supportsConnectionAttributes , SupportsDeprecateEof , SupportsCachedPreparedMetadata , serverSupportsSsl , SupportsSessionTrack , m_supportsPipelining , SupportsQueryAttributes ) ;
504506
505507 if ( cs . SslMode != MySqlSslMode . None && ( cs . SslMode != MySqlSslMode . Preferred || serverSupportsSsl ) )
506508 {
@@ -517,7 +519,7 @@ public async Task DisposeAsync(IOBehavior ioBehavior, CancellationToken cancella
517519 cs . ConnectionAttributes = CreateConnectionAttributes ( cs . ApplicationName ) ;
518520
519521 var password = GetPassword ( cs , connection ) ;
520- using ( var handshakeResponsePayload = HandshakeResponse41Payload . Create ( initialHandshake , cs , password , m_useCompression , m_characterSet , m_supportsConnectionAttributes ? cs . ConnectionAttributes : null ) )
522+ using ( var handshakeResponsePayload = HandshakeResponse41Payload . Create ( initialHandshake , cs , password , m_compressionMethod , connection . ZstandardPlugin ? . CompressionLevel , m_characterSet , m_supportsConnectionAttributes ? cs . ConnectionAttributes : null ) )
521523 await SendReplyAsync ( handshakeResponsePayload , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
522524 payload = await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
523525
@@ -570,8 +572,10 @@ public async Task DisposeAsync(IOBehavior ioBehavior, CancellationToken cancella
570572
571573 var redirectionUrl = ok . RedirectionUrl ;
572574
573- if ( m_useCompression )
575+ if ( m_compressionMethod == CompressionMethod . Zlib )
574576 m_payloadHandler = new CompressedPayloadHandler ( m_payloadHandler . ByteHandler ) ;
577+ else if ( m_compressionMethod == CompressionMethod . Zstandard )
578+ m_payloadHandler = connection . ZstandardPlugin ! . CreatePayloadHandler ( m_payloadHandler . ByteHandler ) ;
575579
576580 // send 'SET NAMES' to set the character set and collation unless the server reports that it's already using the desired character set (e.g., MariaDB >= 11.5)
577581 if ( ok . NewCharacterSet != ( ServerVersion . Version >= ServerVersions . SupportsUtf8Mb4 ? CharacterSet . Utf8Mb4Binary : CharacterSet . Utf8Mb3Binary ) )
@@ -1632,7 +1636,7 @@ caCertificateChain is not null &&
16321636
16331637 var checkCertificateRevocation = cs . SslMode == MySqlSslMode . VerifyFull ;
16341638
1635- using ( var initSsl = HandshakeResponse41Payload . CreateWithSsl ( serverCapabilities , cs , m_useCompression , m_characterSet ) )
1639+ using ( var initSsl = HandshakeResponse41Payload . CreateWithSsl ( serverCapabilities , cs , m_compressionMethod , m_characterSet ) )
16361640 await SendReplyAsync ( initSsl , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
16371641
16381642 var clientAuthenticationOptions = new SslClientAuthenticationOptions
@@ -2129,7 +2133,7 @@ protected override void OnStatementBegin(int index)
21292133 private SslStream ? m_sslStream ;
21302134 private X509Certificate2 ? m_clientCertificate ;
21312135 private IPayloadHandler ? m_payloadHandler ;
2132- private bool m_useCompression ;
2136+ private CompressionMethod m_compressionMethod ;
21332137 private bool m_isSecureConnection ;
21342138 private bool m_supportsConnectionAttributes ;
21352139 private bool m_supportsPipelining ;
0 commit comments