--- sidebar_position: 6 sidebar_label: 📄 Features Summary hide_table_of_contents: true description: List that fastly summarizes all TinyORM features. keywords: [c++ orm, tinyorm, features, summary, features summary] --- # Features Summary - [Summary List](#summary-list) - [Showcase Images](#showcase-images) ## Summary List 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, 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 🚀 - 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_) - __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 __2796 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 TinyORM - Tom console application - Showcase ###### Passed all unit tests đŸĨŗ TinyORM - Passed all unit tests - Showcase #### TinyOrmPlayground The [TinyOrmPlayground](https://github.com/silverqx/TinyOrmPlayground) project is my personal project where I have tested all the TinyORM database queries in the early development phases, currently, it executes ~1600 database queries across the whole TinyORM framework. Every query has a nice title header, is logged to the console, and is counted and measured (elapsed time). Every query also runs on all [supported databases](database/getting-started.mdx#introduction). The TinyOrmPlayground project can be compiled in a single-threaded or multi-threaded mode. In the multi-threaded mode, every database connection runs in its own thread. At the end of every database connection is logged a connection summary and before an exit is logged the application summary. Whole TinyOrmPlayground application is configurable through the [src/configuration.hpp](https://github.com/silverqx/TinyOrmPlayground/blob/main/src/configuration.hpp) class. ###### TinyOrmPlayground single-threaded TinyORM - Invoked TinyOrmPlayground single-threaded - Showcase ###### TinyOrmPlayground multi-threaded TinyORM - Invoked TinyOrmPlayground multi-threaded - Showcase