Trilogy is a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding.
It's currently in production use on github.com.
Supports the most frequently used parts of the text protocol
- Handshake
- Password authentication
- Query, ping, and quit commands
Support prepared statements (binary protocol)
Low-level protocol API completely decoupled from IO
Non-blocking client API wrapping the protocol API
Blocking client API wrapping the non-blocking API
No dependencies outside of POSIX, the C standard library & OpenSSL
Minimal dynamic allocation
MIT licensed
Only supports the parts of the text protocol that are in common use.
No support for
LOAD DATA INFILEon local filestrilogy_escapeassumes an ASCII-compatible connection encoding
make - that's it. This will build a static libtrilogy.a
Trilogy should build out of the box on most UNIX systems which have OpenSSL installed.
Documentation for Trilogy's various APIs can be found in these header files:
blocking.hThe blocking client API. These are simply a set of convenient wrapper functions around the non-blocking client API in
client.hclient.hThe non-blocking client API. Every command is split into a
_sendand_recvfunction allowing callers to wait for IO readiness externally to Trilogybuilder.hMySQL-compatible packet builder API
charset.hCharacter set and encoding tables
error.hError table. Every Trilogy function returning an
intuses the error codes defined herepacket_parser.hStreaming packet frame parser
protocol.hLow-level protocol API. Provides IO-decoupled functions to parse and build packets
reader.hBounds-checked packet reader API
We maintain a Ruby binding in this repository. This is currently stable and production-ready.
Trilogy is released under the MIT license.