/TinyORM

Modern C++ ORM library

Primary LanguageC++MIT LicenseMIT

TinyORM Logo TinyORM

MSVC2019 Qt5.15 MSVC2022 Qt6.3 Linux GCC/Clang Qt5.15 Linux GCC/Clang Qt6.2 MSYS2 UCRT64 GCC/Clang clang-cl MSVC2022 Clang-Tidy/Clazy Qt5.15/6.5 Vcpkg Windows Vcpkg Linux

TinyORM - www.tinyorm.org License MIT TinyORM v0.36.5 tom v0.7.0

TinyORM is a modern ORM library that makes interacting with a database extremely simple.

The code is written in the modern c++20 way and is heavily tested with 3269 unit and functional tests. Almost all the query builder methods are unit tested. The TinyORM's query builder code and the code which is responsible for obtaining relationships, is tested by functional tests against all supported databases. The code coverage is good enough to guarantee API and behavior compatibility.

Donations ❤️

Bitcoin address  1NiF2cTvYxUj8FTZJnGn1ycN4yisWfo1vJ
PayPal                 https://paypal.me/silverzachara

Documentation

Whole library is documented as markdown documents:

www.tinyorm.org

Features Summary

The following list fastly summarizes all the TinyORM features.

  • simple database connections management 🧬
    • database manager that helps with the database connections management
    • Orm::DB facade class for nicer and shorter syntax
    • MySQL, MariaDB, SQLite, and PostgreSQL support for all features 💎
    • multi-threading support 👀
    • SSL connections support 🔒
  • impressive query builder 🔧
    • allows passing sub-queries and raw expressions practically everywhere, to column names, values, and to every SQL clause as select, where, joins, group by, having, order by 🔥
    • a logical grouping that offers to wrap logical groups in parenthesis
    • chunked results for lower memory footprint ✨
    • raw methods for all SQL clauses
    • all join types (left, right, cross, inner) and also join where clause support 🫤
    • aggregate methods min, max, sum, increment, decrement, ...
    • whereExists and exists methods for an existence queries
    • transactions and pessimistic locking 🔒
    • of course, insert, update, and delete SQL clauses support
    • correct QDateTime time zone using the qt_timezone connection configuration option 📅 (returned QDateTime instances will have the correct time zone, and also works for an ORM)
      • this feature allows you to set up the database server time zone to the UTC and all returned QDateTime instances will have the correct UTC time zone
  • clever ORM with all relation types support 🎉
    • one-to-one, one-to-many, and many-to-many relation types (also inverse relationships) 🧨
    • eager and lazy loading with custom select and constraints 🚀
    • fluent ModelsCollection that expose a variety of map / reduce operations that may be chained using an intuitive interface ✨
    • all query builder methods are proxied from the model instances and also from the relation instances back to the query builder 🤯 (everything that can be called on the query builder can also be called on the model and relation instances)
    • clean active record pattern
    • advanced features like timestamps, touching parent timestamps, soft deleting, default models, default model attributes, and attribute casting 🤓
    • querying relationships existence/absence using the has, whereHas, and hasNested methods (using dot notation for selecting nested relationships users.posts.comments)
    • serializing models and collection of models including all nested relations to JSON and converting to vectors and maps 🪡
      • supports controlling a custom date format during serialization
      • supports hiding and appending attributes
  • compiled database migrations and seeders 🕺
    • create, update, drop, and rename database tables
    • create, drop, and rename table columns
    • extensive schema builder that allows creating of all possible column types
    • terser syntax for creating foreign keys and foreign key constraints
    • supports creating, and dropping column indexes (primary, unique, fulltext, spatial)
  • the tom console application with tab completion for all shells (pwsh, bash, zsh) 🥳
    • scaffolding of models, migrations, and seeders
    • impressive models scaffolding, every feature that is supported by models can be generated using the tom make:model cli command
  • a huge amount of code is unit tested, currently 3269 unit tests 🤯
  • C++20 only, with all the latest features used like concepts/constraints, ranges, smart pointers (no new keyword in the whole code 😎), folding expressions
  • qmake and CMake build systems support
    • CMake FetchContent module support 🤙
  • vcpkg support (also the vcpkg port, currently not committed to the vcpkg repository ☹️)
  • it's really fast, you can run 1000 complex queries in 500ms (heavily DB dependant, the PostgreSQL is by far the fastest) ⌚
  • extensive documentation 📃
  • ...

Showcase Images

Tom console application

Tom console application

Passed all unit tests 🥳

Passed all unit tests

TinyOrmPlayground single-threaded

Invoked TinyOrmPlayground single-threaded

TinyOrmPlayground multi-threaded

Invoked TinyOrmPlayground multi-threaded