diff --git a/docs/building/hello-world.mdx b/docs/building/hello-world.mdx index 7f86d7788..19c577473 100644 --- a/docs/building/hello-world.mdx +++ b/docs/building/hello-world.mdx @@ -93,7 +93,7 @@ cd HelloWorld vim vcpkg.json ``` -```json +```json title='vcpkg.json' { "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", "name": "tinyorm-helloworld", @@ -156,37 +156,39 @@ To paste a source code correctly in `vim`, press Shift + p And paste the following code. - #include +```cpp title='main.cpp' +#include - #ifdef _WIN32 - # include - #endif +#ifdef _WIN32 +# include +#endif - #include +#include - using Orm::DB; +using Orm::DB; - int main(int /*unused*/, char */*unused*/[]) - { - #ifdef _WIN32 - SetConsoleOutputCP(CP_UTF8); - // SetConsoleOutputCP(1250); - #endif +int main(int /*unused*/, char */*unused*/[]) +{ +#ifdef _WIN32 + SetConsoleOutputCP(CP_UTF8); +// SetConsoleOutputCP(1250); +#endif - // Ownership of a shared_ptr() - auto manager = DB::create({ - {"driver", "QSQLITE"}, - {"database", qEnvironmentVariable("TINYORM_HELLOWORLD_DB_SQLITE_DATABASE", - "../../HelloWorld.sqlite3")}, - {"check_database_exists", true}, - }); + // Ownership of a shared_ptr() + auto manager = DB::create({ + {"driver", "QSQLITE"}, + {"database", qEnvironmentVariable("TINYORM_HELLOWORLD_DB_SQLITE_DATABASE", + "../../HelloWorld.sqlite3")}, + {"check_database_exists", true}, + }); - auto posts = DB::select("select * from posts"); + auto posts = DB::select("select * from posts"); - while(posts.next()) - qDebug() << posts.value("id").toULongLong() - << posts.value("name").toString(); - } + while(posts.next()) + qDebug() << posts.value("id").toULongLong() + << posts.value("name").toString(); +} +``` ## Hello world with CMake @@ -478,7 +480,7 @@ vim HelloWorld.pro To paste a source code correctly in `vim`, press Shift + p. ::: -```qmake +```qmake title='HelloWorld.pro' QT -= gui TEMPLATE = app @@ -511,7 +513,7 @@ Read the [Consume TinyOrm library (qmake)](tinyorm.mdx#consume-tinyorm-library-q Create the `.qmake.conf` file in the `HelloWorld` project root folder with the following content. -```qmake +```qmake title='.qmake.conf' # Path to the PARENT folder of the TinyORM source folder TINY_MAIN_DIR = $$clean_path($$PWD/../../TinyORM/) # To find .env and .env.$$QMAKE_PLATFORM files diff --git a/docs/building/migrations.mdx b/docs/building/migrations.mdx index 309c569ab..3ebc84fe9 100644 --- a/docs/building/migrations.mdx +++ b/docs/building/migrations.mdx @@ -95,7 +95,7 @@ cd tom vim vcpkg.json ``` -```json +```json title='vcpkg.json' { "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", "name": "tom", @@ -162,70 +162,72 @@ And paste the following code. - #include +```cpp title='main.cpp' +#include - #include +#include - #include "migrations/2014_10_12_000000_create_posts_table.hpp" +#include "migrations/2014_10_12_000000_create_posts_table.hpp" - #include "seeders/databaseseeder.hpp" +#include "seeders/databaseseeder.hpp" - using Orm::DatabaseManager; - using Orm::DB; +using Orm::DatabaseManager; +using Orm::DB; - using TomApplication = Tom::Application; +using TomApplication = Tom::Application; - using namespace Migrations; // NOLINT(google-build-using-namespace) - using namespace Seeders; // NOLINT(google-build-using-namespace) +using namespace Migrations; // NOLINT(google-build-using-namespace) +using namespace Seeders; // NOLINT(google-build-using-namespace) - /*! Create the database manager instance and add a database connection. */ - std::shared_ptr setupDatabaseManager(); - - /*! C++ main function. */ - int main(int argc, char *argv[]) - { - try { - // Ownership of the shared_ptr() - auto db = setupDatabaseManager(); - - return TomApplication(argc, argv, std::move(db), "TOM_MIGRATIONS_ENV") - .migrations() - .seeders() - // Fire it up 🔥🚀✨ - .run(); - - } catch (const std::exception &e) { - - TomApplication::logException(e); - } - - return EXIT_FAILURE; - } - - std::shared_ptr setupDatabaseManager() - { - using namespace Orm::Constants; // NOLINT(google-build-using-namespace) +/*! Create the database manager instance and add a database connection. */ +std::shared_ptr setupDatabaseManager(); +/*! C++ main function. */ +int main(int argc, char *argv[]) +{ + try { // Ownership of the shared_ptr() - return DB::create({ - {driver_, QMYSQL}, - {host_, qEnvironmentVariable("DB_MYSQL_HOST", H127001)}, - {port_, qEnvironmentVariable("DB_MYSQL_PORT", P3306)}, - {database_, qEnvironmentVariable("DB_MYSQL_DATABASE", EMPTY)}, - {username_, qEnvironmentVariable("DB_MYSQL_USERNAME", EMPTY)}, - {password_, qEnvironmentVariable("DB_MYSQL_PASSWORD", EMPTY)}, - {charset_, qEnvironmentVariable("DB_MYSQL_CHARSET", UTF8MB4)}, - {collation_, qEnvironmentVariable("DB_MYSQL_COLLATION", UTF8MB40900aici)}, - {timezone_, TZ00}, - /* Specifies what time zone all QDateTime-s will have, the overridden default is - the Qt::UTC, set to the Qt::LocalTime or QtTimeZoneType::DontConvert to use - the system local time. */ - {qt_timezone, QVariant::fromValue(Qt::UTC)}, - {strict_, true}, - }, - QStringLiteral("tinyorm_tom_mysql")); // shell:connection + auto db = setupDatabaseManager(); + + return TomApplication(argc, argv, std::move(db), "TOM_EXAMPLE_ENV") + .migrations() + .seeders() + // Fire it up 🔥🚀✨ + .run(); + + } catch (const std::exception &e) { + + TomApplication::logException(e); } + return EXIT_FAILURE; +} + +std::shared_ptr setupDatabaseManager() +{ + using namespace Orm::Constants; // NOLINT(google-build-using-namespace) + + // Ownership of the shared_ptr() + return DB::create({ + {driver_, QMYSQL}, + {host_, qEnvironmentVariable("DB_MYSQL_HOST", H127001)}, + {port_, qEnvironmentVariable("DB_MYSQL_PORT", P3306)}, + {database_, qEnvironmentVariable("DB_MYSQL_DATABASE", EMPTY)}, + {username_, qEnvironmentVariable("DB_MYSQL_USERNAME", EMPTY)}, + {password_, qEnvironmentVariable("DB_MYSQL_PASSWORD", EMPTY)}, + {charset_, qEnvironmentVariable("DB_MYSQL_CHARSET", UTF8MB4)}, + {collation_, qEnvironmentVariable("DB_MYSQL_COLLATION", UTF8MB40900aici)}, + {timezone_, TZ00}, + /* Specifies what time zone all QDateTime-s will have, the overridden default is + the Qt::UTC, set to the Qt::LocalTime or QtTimeZoneType::DontConvert to use + the system local time. */ + {qt_timezone, QVariant::fromValue(Qt::UTC)}, + {strict_, true}, + }, + QStringLiteral("tinyorm_tom_mysql")); // shell:connection +} +``` + :::tip If you have defined more database connections then you can tag the lines with the database connection names with the `// shell:connection` comment and this connection names will be provided to the bash, zsh, pwsh completions for the `--database=` option 😎, [example](https://github.com/silverqx/TinyORM/blob/main/examples/tom/main.cpp#L74). ::: @@ -270,39 +272,40 @@ vim database/migrations/2014_10_12_000000_create_posts_table.hpp`} And paste the following code. - #pragma once +```cpp title='database/migrations/2014_10_12_000000_create_posts_table.hpp' +#pragma once - #include +#include - namespace Migrations +namespace Migrations +{ + + struct CreatePostsTable : Migration { + /*! Filename of the migration file. */ + T_MIGRATION - struct CreatePostsTable : Migration + /*! Run the migrations. */ + void up() const override { - /*! Filename of the migration file. */ - T_MIGRATION - - /*! Run the migrations. */ - void up() const override + Schema::create("posts", [](Blueprint &table) { - Schema::create("posts", [](Blueprint &table) - { - table.id(); + table.id(); - table.string(NAME); - table.timestamps(); - }); - } + table.string(NAME); + table.timestamps(); + }); + } - /*! Reverse the migrations. */ - void down() const override - { - Schema::dropIfExists("posts"); - } - }; - - } // namespace Migrations + /*! Reverse the migrations. */ + void down() const override + { + Schema::dropIfExists("posts"); + } + }; +} // namespace Migrations +``` :::tip The `TinyORM` source tree contains the [`CreatePostsTable`](https://github.com/silverqx/TinyORM/blob/main/tests/database/migrations/2014_10_12_000000_create_posts_table.hpp#L5) example migration that also acts as the full-fledged example migration. It has defined and also nicely commented all possible features that migration classes can use or define. @@ -341,27 +344,29 @@ vim database/seeders/databaseseeder.hpp`} And paste the following code. - #pragma once +```cpp title='database/seeders/databaseseeder.hpp' +#pragma once - #include +#include - namespace Seeders +namespace Seeders +{ + + /*! Main database seeder. */ + struct DatabaseSeeder : Seeder { - - /*! Main database seeder. */ - struct DatabaseSeeder : Seeder + /*! Run the database seeders. */ + void run() override { - /*! Run the database seeders. */ - void run() override - { - DB::table("posts")->insert({ - {{"name", "1. post"}}, - {{"name", "2. post"}}, - }); - } - }; + DB::table("posts")->insert({ + {{"name", "1. post"}}, + {{"name", "2. post"}}, + }); + } + }; - } // namespace Seeders +} // namespace Seeders +``` :::tip The `TinyORM` source tree contains the [`DatabaseSeeder`](https://github.com/silverqx/TinyORM/blob/main/tests/database/seeders/databaseseeder.hpp#L8) root seeder example class that also acts as the full-fledged example seeder. It has defined and also nicely commented all possible features that seeder classes can use or define. @@ -685,7 +690,7 @@ vim tom.pro To paste a source code correctly in `vim`, press Shift + p. ::: -```qmake +```qmake title='tom.pro' QT -= gui TEMPLATE = app @@ -822,7 +827,7 @@ Configuring by the `.qmake.conf` and `.env` files has one big advantage, which i Create `database/migrations.pri` file and paste the following code. -```qmake +```qmake title='database/migrations.pri' INCLUDEPATH *= $$PWD HEADERS += \ @@ -833,7 +838,7 @@ HEADERS += \ Create `database/seeders.pri` file and paste the following code. -```qmake +```qmake title='database/seeders.pri' INCLUDEPATH *= $$PWD HEADERS += \ diff --git a/docs/building/tinyorm.mdx b/docs/building/tinyorm.mdx index 27c41d0f0..71cb51105 100644 --- a/docs/building/tinyorm.mdx +++ b/docs/building/tinyorm.mdx @@ -534,7 +534,7 @@ Important `CMake` options. In your application or library `CMakeLists.txt` file add following `find_package()` call. -```cmake +```cmake title='CMakeLists.txt' find_package(TinyOrm 0.16.0 CONFIG REQUIRED) ``` @@ -814,7 +814,7 @@ Let's explain one by one. Create the `.qmake.conf` file in your application root folder with the following content. -```qmake +```qmake title='.qmake.conf' # Path to the PARENT folder of the TinyORM source folder TINY_MAIN_DIR = $$clean_path() # To find .env and .env.$$QMAKE_PLATFORM files in YOUR project