Proposing a MySQL client library for inclusion in Boost

Hi all, I would like to propose my MySQL client library for inclusion in Boost. The library features asynchronous communication with MySQL and MariaDB servers, allowing the user to use txt queries and prepared statements. The library is based on Boost.Asio and follows its asynchronous model (in a similar way Boost.Beast does). The library is specific to MySQL and MariaDB systems, and is not intended as a SQL framework or ORM. It fits use cases like HTTP servers (possibly already using Beast), ETL pipelines or any other application that needs to access a MySQL database and wants to benefit from Asio's asynchrony. Please note that the library is a full implementation of MySQL wire protocol and does not use libmysqlclient under the hood. I'm looking for people who officially endorse the library. You can see the code in this GitHub repository https://github.com/anarthal/mysql, and the documentation is here https://anarthal.github.io/mysql/index.html. Many thanks, Ruben.

On Wed, 30 Mar 2022, 23:00 Ruben Perez via Boost,
I believe, you've found a review manager, am I right? I'm looking for people who officially endorse the library. I recall the library has already received some endorsements here https://lists.boost.org/Archives/boost//2021/03/251046.php Best regards, -- Mateusz Loskot

On Wed, 30 Mar 2022, 23:21 Mateusz Loskot via Boost,
Yes, Richard Hodges had volunteered as review manager.
Thanks for taking your time searching for those messages. Although it was endorsed then, I decided to incorporate some improvements before the review, which took me a little more time than expected.

Wow, together with sqlpp11 (https://github.com/rbock/sqlpp11) this becomes a killer combination ;-) I dont know if my endorsement will help, but in any case I endorse this library. Regards, Matthijs On 30/03/2022 23:00, Ruben Perez via Boost wrote:

On 31/03/2022 17:28, Ruben Perez wrote:
I just took a look at https://github.com/rbock/sqlpp11/tree/main/connector_api And I guess there is no async connector API for sqlpp11 yet. I'm going to take a look and see if I can come up with something nice for the integration into sqlpp11. Regards, Matthijs

On 30.03.2022 23:00, Ruben Perez via Boost wrote:
Great work! Although MariaDB is a fork of MySQL and still to a large degree is compatible, at least in the simple and most common cases, both DBMSs are adding features independently and are diverging more and more. I work at MySQL Engineering at Oracle, and I've seen other attempts to treat MySQL and MariaDB as two variations of the same product, e.g., in packaging in Linux distros and client applications. As the DBMSs diverge more and more, these attempts usually fail, and the DBMSs have to be treated as two completely different DBMSs, like MySQL and Postgres. AFAIK, the basic protocol is still the same in both DBMSs, but new extensions are implemented in one and not the other, and there is no guarantee that they will remain compatible. I wouldn't be surprised if there are already subtle protocol differences when enabling some of the most recent extensions. I believe that in the long term the protocols will diverge more. Is the library designed in a way that can handle growing differences, and maybe a complete protocol incompatibility, in the future? Best regards, Norvald

On Wed, 6 Apr 2022 at 14:58, Norvald H. Ryeng via Boost < boost@lists.boost.org> wrote:
Thanks :)
I think your knowledge would be invaluable during the formal library review. If you have the time and the energy, we would all appreciate leaving your review, when the time comes.
At this point in time, the library treats both systems the same. There are, however, the following measures in place: * In addition to unit tests, the library has a large set of integration tests, which run against real MySQL and MariaDB systems, in an attempt to catch such differences as soon as possible. I have caught a couple of these minor differences in the past, but was able to solve them in a way that made both DBMS happy (there was something MySQL accepted and MariaDB didn't). * These tests are run in CIs, which do differentiate between them (e.g. run SHA256 auth tests for MySQL 8.x but not for MariaDB or MySQL 5.x). The connection object stores a state object, holding stuff like the server capabilities, which are set after the initial handshake. These capabilities are then passed to the individual operations, to handle any possible difference between servers that may be expressed in terms of server capabilities. A couple questions: * Which kind of protocol incompatibilities would you think would be possible in the future? Are we talking about minor differences (like different auth plugins, and things that can be expressed in terms of server capabilities)? Or are we talking about a complete redesign of the MySQL protocol? * Is there any place in the documentation where I could read about these new additions we are talking about? * Do you think anyone else in MySQL server team would be interested in participating in the formal review for this library? I think their help would be much appreciated. Cheers, Ruben.

On 07.04.2022 11:18, Ruben Perez wrote:
I'm expecting new auth plugins and new server capabilities. New data types, perhaps. I'm not expecting a major redesign in the foreseeable future.
* Is there any place in the documentation where I could read about these new additions we are talking about?
I think the best starting point would be https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_PROTOCOL.html
I'm not an expert on the protocol myself, so I'll try to find someone when the formal review starts. Best regards, Norvald
participants (4)
-
Mateusz Loskot
-
Matthijs Möhlmann
-
Norvald H. Ryeng
-
Ruben Perez