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 files -
trilogy_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.h -
client.hThe non-blocking client API. Every command is split into a
_sendand_recvfunction allowing callers to wait for IO readiness externally to Trilogy -
builder.hMySQL-compatible packet builder API
-
charset.hCharacter set and encoding tables
-
error.hError table. Every Trilogy function returning an
intuses the error codes defined here -
packet_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.