Thread overview
mysql-native: Update, Status and Plans
Oct 04, 2014
Nick Sabalausky
Oct 04, 2014
Nick Sabalausky
Oct 04, 2014
Gary Willoughby
October 04, 2014
The mysql-native lib (often abbreviated as "mysqln") is a low-level client library for MySQL and MariaDB, written entirely in D with no reliance on the official libmysql. It supports both Phobos and Vibe.d sockets.

Since Steve Teale's original release, mysql-native has seen many years (by D's young standards) of usage and updates, with various people (such as simendsjo, Sönke Ludwig and myself) assuming lead at various points to help keep it going strong, even if perhaps slightly under-the-radar. (And cheers to everyone else who has and/or continues to contribute.)

There have been some changes and updates lately which I'd like to formally announce:

New Home
--------------
The main active fork of mysql-native now has a slight change-of-address. Since the project is not directly related to Vibe.d (but simply has optional support for it), Sönke has recently spun it off from his "rejectedsoftware" group on GitHub to it's own GitHub group: "mysql-d".

So the new addresses are:

Web:        https://github.com/mysql-d/mysql-native
Git/HTTPS:  https://github.com/mysql-d/mysql-native.git
Git/SSH:    git@github.com:mysql-d/mysql-native.git

The DUB repository at code.dlang.org has been updated to reflect this change, so it should be transparent and "just work" for DUB users.

New Release
---------------
A new release has just been tagged, v0.0.16. (Don't be fooled: Despite the scary-sounding "v0.0.x" label, people are successfully relying on it in real projects, and we do try to minimize breaking changes.)

The previous release, v0.0.15, marked the beginning of a deliberate trend for mysql-native:

After several years of miscellaneous updates and fixes, and the many versions of DMD the project has seen, mysql-native has outgrown its initial one-module design. It's also, admittedly, accumulated some amount of internal clutter and rough corners as well.

Sensing that, simendsjo did quite a bit of work in a separate fork, on a big cleanup and re-architecting of the library. That fork hasn't been completed, but to minimize divergence and duplicated maintenance efforts (and also to perform some much-needed cleanup on mainline) I've begun incorporating some of simendsjo's changes into the main mysql-native, with an emphasis on minimizing breakages.

The incorporation of those improvements began in v0.0.15 by resurrecting some bitrotted unittests, merging in many of simendsjo's new tests, and in general beginning a much stronger emphasis on proper testing (unit/regression/integration).

The merging of simendsjo's cleanups continues in v0.0.16 by splitting the increasingly-monolithic into a more manageable series of smaller modules. This is an internal change which shouldn't affect users of the library, but it lays the groundwork allowing the main library to be directly compared with simendsjo's redesign much more easily.

Changes in v0.0.16 (since v0.0.15):
- Split into multiple modules.
- Fix: When querying for a table's column metadata, limit the search to the appropriate schema.
- Fix #39: Unsupported SQL type NEWDECIMAL
- Fix #45: Retrieving table metadata fails with an exception for certain server versions.
- Fix #48: Unittests don't work on MariaDB 5.5
- Remove redundant (and outdated) "homepage" field from package.json.

New Horizons
-----------------
(Too marketing-ish? ;) )

Formal priorities for mysql-native moving forward: I don't consider these to be ranked - they're all important right now, and ultimately somewhat general, but here are the primary focuses at this point:

- Professionalism: It's time for mysql-native to graduate from a functional "works for our purposes" utility to a well-presented newcomer-friendly library. At this point, that means having clearly stated project purpose and goals, updated DDOX-generated online documentation, improved readme and introductory material, changelog, and release announcements. Bug reports should be responded to promptly (even if not promptly addressed - the project does continue to face a manpower s a version bump to, at the very least, v0.1.x would probably be approprhortage). Also a version bump to, at the very least, v0.1.x would probably be appropriate at this point. ;)

- Cleanups: Continue merging in changes from simendsjo's cleanup/redesign branch with an emphasis on minimizing breakages. However, a few breaks may be needed, so in keeping with the professionalism point, semantic versioning system should be used.

- Robustness: Continued emphasis on unit/integration/regression tests, and on various combinations of OS and DB server versions (both MySQL and MariaDB).

- Usability: There have been many improvements in D since the library's initial design. I think we can improve some aspects of the API while still staying within the project's goals. This also ties into both simendsjo's work and having good documentation.

- Encourage Contributions: It's no secret that mysql-native faces a shortage of manpower. To help cultivate a larger community of contributors, the library should continue to work on being more developer-friendly. Running the tests should be easy and well-communicated, generating docs should be easy, dub should be as well-supported as possible, the internal code should be easy to grok, etc.
October 04, 2014
On 10/04/2014 05:16 AM, Nick Sabalausky wrote:
> - Professionalism: It's time for mysql-native to graduate from a
> functional "works for our purposes" utility to a well-presented
> newcomer-friendly library. At this point, that means having clearly
> stated project purpose and goals, updated DDOX-generated online
> documentation, improved readme and introductory material, changelog, and
> release announcements. Bug reports should be responded to promptly (even
> if not promptly addressed - the project does continue to face a manpower
> s a version bump to, at the very least, v0.1.x would probably be
> approprhortage). Also a version bump to, at the very least, v0.1.x would
> probably be appropriate at this point. ;)

The irony of advocating increased professionalism while suffering a gigantic copy-paste mistake towards the end is not lost on me...

The above paragraph should be:

- Professionalism: It's time for mysql-native to graduate from a functional "works for our purposes" utility to a well-presented newcomer-friendly library. At this point, that means having clearly stated project purpose and goals, updated DDOX-generated online documentation, improved readme and introductory material, changelog, and release announcements. Bug reports should be responded to promptly (even if not promptly addressed - the project does continue to face a shortage of manpower). Also a version bump to, at the very least, v0.1.x would probably be appropriate at this point. ;)
October 04, 2014
On Saturday, 4 October 2014 at 09:16:15 UTC, Nick Sabalausky wrote:
> snip

Excellent news! I've used this lib a great deal for high traffic applications and it performs very well. Along with carefully designed schema i've had this lib working with tables filled with over a billion rows and performance is still fantastic!

Keep up with the great work guys!