https://github.com/trilogy-libraries/trilogy
Trilogy is a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding.
https://github.com/trilogy-libraries/trilogy
Last synced: 7 months ago
JSON representation
Trilogy is a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding.
- Host: GitHub
- URL: https://github.com/trilogy-libraries/trilogy
- Owner: trilogy-libraries
- License: mit
- Created: 2021-12-15T17:18:05.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2025-02-06T01:01:37.000Z (9 months ago)
- Last Synced: 2025-04-10T00:11:58.070Z (7 months ago)
- Language: C
- Size: 541 KB
- Stars: 727
- Watchers: 146
- Forks: 77
- Open Issues: 37
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
- fucking-awesome-cpp - Trilogy - a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding. [MIT] (Database)
- fucking-awesome-ruby - Trilogy - A performance-oriented C library for MySQL-compatible databases. (Database Drivers)
- awesome-ruby - Trilogy - A performance-oriented C library for MySQL-compatible databases. (Database Drivers)
- awesome-cpp - Trilogy - a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding. [MIT] (Database)
README
# Trilogy
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.
## Features
* 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
## Limitations
* Only supports the parts of the text protocol that are in common use.
* No support for `LOAD DATA INFILE` on local files
* `trilogy_escape` assumes an ASCII-compatible connection encoding
## Building
`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.
## API Documentation
Documentation for Trilogy's various APIs can be found in these header files:
* `blocking.h`
The blocking client API. These are simply a set of convenient wrapper functions around the non-blocking client API in `client.h`
* `client.h`
The non-blocking client API. Every command is split into a `_send` and `_recv` function allowing callers to wait for IO readiness externally to Trilogy
* `builder.h`
MySQL-compatible packet builder API
* `charset.h`
Character set and encoding tables
* `error.h`
Error table. Every Trilogy function returning an `int` uses the error codes defined here
* `packet_parser.h`
Streaming packet frame parser
* `protocol.h`
Low-level protocol API. Provides IO-decoupled functions to parse and build packets
* `reader.h`
Bounds-checked packet reader API
## Bindings
We maintain a [Ruby binding](contrib/ruby) in this repository. This is currently stable and production-ready.
## License
Trilogy is released under the [MIT license](LICENSE).