diff --git a/third_party/mysql_client/CHANGELOG.md b/third_party/mysql_client/CHANGELOG.md index 03693309..59f59c76 100644 --- a/third_party/mysql_client/CHANGELOG.md +++ b/third_party/mysql_client/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased (Querya patch) + +- Request `CLIENT_FOUND_ROWS` in the client handshake so `affectedRows` is the number of matched rows, not changed rows + ## 0.0.27 - Add timeoutMs param to pool constructor diff --git a/third_party/mysql_client/lib/src/mysql_protocol/packet/packet_handshake_response_41.dart b/third_party/mysql_client/lib/src/mysql_protocol/packet/packet_handshake_response_41.dart index 52fd600d..8af7b3da 100644 --- a/third_party/mysql_client/lib/src/mysql_protocol/packet/packet_handshake_response_41.dart +++ b/third_party/mysql_client/lib/src/mysql_protocol/packet/packet_handshake_response_41.dart @@ -5,6 +5,7 @@ import 'package:mysql_client/mysql_protocol.dart'; import 'package:mysql_client/mysql_protocol_extension.dart'; const _supportedCapabitilies = mysqlCapFlagClientProtocol41 | + mysqlCapFlagClientFoundRows | mysqlCapFlagClientSecureConnection | mysqlCapFlagClientPluginAuth | mysqlCapFlagClientPluginAuthLenEncClientData | diff --git a/third_party/mysql_client/lib/src/mysql_protocol/packet/packet_ssl_request.dart b/third_party/mysql_client/lib/src/mysql_protocol/packet/packet_ssl_request.dart index 800e6ad0..cb3b54e1 100644 --- a/third_party/mysql_client/lib/src/mysql_protocol/packet/packet_ssl_request.dart +++ b/third_party/mysql_client/lib/src/mysql_protocol/packet/packet_ssl_request.dart @@ -3,6 +3,7 @@ import 'package:buffer/buffer.dart'; import 'package:mysql_client/mysql_protocol.dart'; const _supportedCapabitilies = mysqlCapFlagClientProtocol41 | + mysqlCapFlagClientFoundRows | mysqlCapFlagClientSecureConnection | mysqlCapFlagClientPluginAuth | mysqlCapFlagClientPluginAuthLenEncClientData | diff --git a/third_party/mysql_client/test/mysql_packet_test.dart b/third_party/mysql_client/test/mysql_packet_test.dart index a09159ad..d1efb025 100644 --- a/third_party/mysql_client/test/mysql_packet_test.dart +++ b/third_party/mysql_client/test/mysql_packet_test.dart @@ -629,6 +629,36 @@ void main() { ); }); + test("client handshake requests CLIENT_FOUND_ROWS", () { + final handshake = MySQLPacket.decodeInitialHandshake( + Uint8List.fromList( + HEX.decode( + '4d0000000a352e372e33352d3338007b000000181e73526349597c00ffff080200ffc1150000000000000000000007317a2531721d587825181d006d7973716c5f6e61746976655f70617373776f726400', + ), + ), + ).payload as MySQLPacketInitialHandshake; + + final response = MySQLPacketHandshakeResponse41.createWithNativePassword( + username: 'root', + password: 'secret', + initialHandshakePayload: handshake, + ); + final sslRequest = MySQLPacketSSLRequest.createDefault( + initialHandshakePayload: handshake, + connectWithDB: false, + ); + + // So UPDATE reports matched (not changed) rows, like PostgreSQL / SQLite. + expect( + response.capabilityFlags & mysqlCapFlagClientFoundRows, + mysqlCapFlagClientFoundRows, + ); + expect( + sslRequest.capabilityFlags & mysqlCapFlagClientFoundRows, + mysqlCapFlagClientFoundRows, + ); + }); + test("testing response ok packet", () { final buffer = Uint8List.fromList(HEX.decode('0700000200000002000000')); final packet = MySQLPacket.decodeGenericPacket(buffer);