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
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
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:
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.
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
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
- Fix #48: Unittests don't work on MariaDB 5.5
- Remove redundant (and outdated) "homepage" field from package.json.
(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
- 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.