Commit Graph

66 Commits

Author SHA1 Message Date
silverqx 1d6d219d68 vcpkg enabled tom example on Linux
Disabled versioned tom executable on Linux because of
vcpkg/issues/33551.
2023-10-19 11:56:50 +02:00
silverqx 744cc2449c cmake formatting 2023-10-17 15:26:15 +02:00
silverqx ec70b893e7 cmake added $<BUILD_INTERFACE:...> everywhere 2023-10-17 15:26:15 +02:00
silverqx 16fc03eb04 cmake tom example link PRIVATE against TinyORM 2023-10-17 15:26:14 +02:00
silverqx a5752eb5ca cmake bugfix PUBLIC vs PRIVATE in linkage 2023-09-10 12:06:44 +02:00
silverqx 002889d65e cmake added STRICT_MODE option
It propagate strict compiler/linker options and Qt definitions using the
TinyOrm::CommonConfig interface library to the user code (highly
recommended; can also be set with the TINYORM_STRICT_MODE environment
variable).

 - updated vcpkg ports
 - updated docs
2023-09-10 12:06:44 +02:00
silverqx 57a33e503a qmake updated comment 2023-09-09 09:15:53 +02:00
silverqx 1a3dc45221 qmake commented useless load() 2023-09-09 09:15:52 +02:00
silverqx 76b652522c qmake added disable_autoconf
Removed the tiny_autoconf, it's still enabled by default, and instead
added the disable_autoconf qmake configuration feature.

This change was made to follow name and logic convention of another
qmake configuration options.

 - updated docs
2023-09-09 09:15:51 +02:00
silverqx e5ac7df7b9 qmake removed duplicate QT *= core sql 2023-09-09 09:13:34 +02:00
silverqx 892e153b75 qmake moved include(tom.pri) few lines up
- also added section comment
2023-09-09 09:13:34 +02:00
silverqx 7780c91f9d qmake removed forgotten tiny_autoconf blocks 2023-09-09 09:13:33 +02:00
silverqx 26a6c17587 qmake updated conf.pri error messages
- also formatting
2023-09-09 09:13:32 +02:00
silverqx 11693e32a3 tom renamed local function 2023-08-19 13:09:44 +02:00
silverqx e044979429 updated tom.exe description
Updated to - Tom console application for TinyORM C++ library
2023-08-18 17:52:42 +02:00
silverqx 84c6da09f6 tom fixtypo 2023-08-18 17:52:42 +02:00
silverqx 54dee94e91 qmake bugfix tiny_autoconf
Throw conf.pri error only if the tiny_autoconf is disabled.

 - also moved the User Configuration to the bottom, as the last thing
2023-08-18 17:52:42 +02:00
silverqx 24fb2d395e qmake bugix missing load() and CONFIG 2023-08-18 17:52:40 +02:00
silverqx 1c1beb990f qmake removed vcpkgconf.pri
It was used in the vcpkg port file to build the TinyORM using qmake
build system, it's not used anymore as the CMake build is used instead.
2023-08-11 18:42:33 +02:00
silverqx 01fc5af3b0 qmake renamed to tiny_ccache_win32 2023-08-11 18:42:32 +02:00
silverqx d0d4e2b628 qmake added tiny_autoconf feature
The tiny_autoconf and tiny_dotenv qmake CONFIG were added in the TinyORM
v0.34.0. These new features allow to auto-configure TinyORM, and with
their help, the conf.pri files can be skipped entirely. The
tiny_autoconf is designed to find the vcpkg installation and tiny_dotenv
to include the .env and .env.$$QMAKE_PLATFORM files in the project's
root folder. They can be configured using qmake and environment
variables, and they also contain some guessing logic if these variables
are not defined.

These are qmake and environment variables that affect the
auto-configuration feature:

- TINY_VCPKG_ROOT - path to the vcpkg installation folder (if not
  defined then it tries to use the VCPKG_ROOT environment variable)
- TINY_VCPKG_TRIPLET - vcpkg triplet to use
  (vcpkg/installed/$$TINY_VCPKG_TRIPLET/); if not defined then it tries
  to guess the vcpkg triplet on the base of the current compiler and OS
  (QMAKESPEC)
- TINY_MYSQL_ROOT - path to the MySQL installation folder (if not
  defined then it tries to guess the MySQL installation folder:
  $$(ProgramFiles)/MySQL/MySQL Server (8.1|8.0|5.7)/)

You can set these variables in the .env or .conf files (recommended), in
the qmake file (or wherever you want), or as environment variables.

These variables are set after the auto-configuration is done:

- TINY_VCPKG_INCLUDE - path to vcpkg include folder
  (vcpkg/installed/<triplet>/include/)
- TINY_MYSQL_INCLUDE - path to the MySQL include folder (MySQL Server
  8.1/include/)
- TINY_MYSQL_LIB - path to the MySQL lib folder (MySQL Server
  8.1/include/)

The TINY_MYSQL_INCLUDE and TINY_MYSQL_LIB are only set on win32 except
mingw.
2023-08-09 20:34:18 +02:00
silverqx 9bc35edae6 qmake removed useless code
The same logic is done in the qmake/common.pri file.
2023-08-02 20:04:35 +02:00
silverqx 09227e2013 qmake/cmake renamed to PROJECT_TOM_EXAMPLE 2023-08-02 18:53:10 +02:00
silverqx 31453c32db qmake updated error message
- used the $$TARGET instead of a hardcoded target
2023-08-02 18:53:09 +02:00
silverqx 51a4a0a54b qmake used cmdline everywhere
Used instead of the console configuration option.

 - also updated docs
2023-08-02 18:30:10 +02:00
silverqx aad52a89c8 changed qt_timezone default to Qt::UTC
Previously, it was the QtTimeZoneType::DontConvert that implied the
Qt::LocalTime timezone spec.

Setting this to the Qt::UTC by default is the only way to have the
maximum level of interoperability between TinyORM and other libraries
and services.

 - updated comments in docs and source code
2023-06-29 12:07:42 +02:00
silverqx e74d987bf5 added mold linker to conf.pri.example
[skip ci]
2023-04-02 13:26:31 +02:00
silverqx b97818b67a forced TLS connection for MariaDB
Everywhere, tom, tom_testdata, and tests.
2023-03-14 12:48:22 +01:00
silverqx 880bc91317 verified MariaDB support 🔥🚀🎉
Added the MariaDB connections and verified and passed all auto tests.
There was not too much to fix. The TLS connections are still not
enabled.

 - fixed upsert
 - fixed tests
 - enhanced upsert tests
 - refactored tst_mysql_qdatetime to be able test both, the MySQL and
   also MariaDB database connections
 - added a few new MariaDB related tests
2023-03-14 12:48:22 +01:00
silverqx 140c3319f9 added comment 2023-02-15 13:58:18 +01:00
silverqx b9aad6a830 tests and tom set prefix_indexes to false 2023-02-14 21:38:34 +01:00
silverqx b13728db08 refactored PostgreSQL search_path configuration
Changed from the 'schema' configuration option to the 'search_path',
the 'schema' config. option was dropped and currently throws exception
with a suggestion to use the 'search_path' instead.

The new 'search_path' config. option can be the QString or QStringList
and also supports to set an empty search_path using '' or empty QString
or QStringList.
This search_path config. option is correctly parsed and quoted.
Setting the search_path is initiated from the PostgresConnector
right after the database connection is established.

The PostgresSchemaBuilder is actively using the search_path during
practically all method calls (dropAllTables(), getColumnListing(),
hasTable(), ...). If the search_path is not defined then it queries
the database for the real search_path because the search_path can be
changed anytime and the search_path configuration option value can be
incorrect (out of sync).
It also works correctly with the empty search_path, in this case a fully
qualified table names are required. If the table name is not fully
qualified then the SearchPathEmptyError exception is thrown.
And it also works correctly with the "$user" PostgreSQL's variable, this
variable is resolved to the config["username"] during obtaining
the search_path from the database.

In the pretend mode it behaves little different, if pretending then
the 'search_path' is obtained from the connection configuration and
if the 'search_path' is not defined in the config. the 'public' will
be used as the default.

 - added many new unit and functional tests which are testing all the
   above described scenarios
   - added new functional test case tst_PostgreSQL_SchemaBuilder_f
   - added new functional test case tst_SchemaBuilder
   - added new tests for dropAllTable(), dropAllViews(), hasTable(),
     getColumnListing(), createDatabase(), dropDatabaseIfExists()
     for ALL supported databases
 - added new search_path constant
 - renamed env. variable to DB_PGSQL_SEARCHPATH (from DB_PGSQL_SCHEMA)
 - added new search_path and dont_drop configuration validations to
   check correct type (QString or QStringList)
 - added new 'schema' config. option validation
 - added new exception SearchPathEmptyError
 - started the TinyUtils::Databases refactor
2023-02-11 09:39:28 +01:00
silverqx e9693d7867 added Postgres isolation_level configuration
- also added a new constants the isolation_level and spatial_ref_sys
2023-01-31 11:25:09 +01:00
silverqx 8750b612d1 added PostgreSQL application_name conn. option 2023-01-28 14:22:14 +01:00
silverqx b285f54430 added support to pass sslmode for PostgreSQL
It can be passed by the DB_PGSQL_SSLMODE env. variable.
2023-01-21 18:35:23 +01:00
silverqx 5ab041512c tom whitespaces 2023-01-19 14:22:21 +01:00
silverqx 636b4d1ead added support for SSL connections
If the DB_MYSQL_SSL_CERT/KEY/CA env. variables are set then used them
for the MySQL SSL connections in all tests, tom, and tom_testdata.
2023-01-06 19:12:35 +01:00
silverqx 5f4b3f11bb updated comment for return_qdatetime 2022-10-31 16:34:29 +01:00
silverqx 90a03e67f8 cmake added header files to projects
Added using the target_sources() so IDE-s can show these header files
in the Project Explorer.
2022-10-29 19:22:06 +02:00
silverqx 1ded27bbc8 QDateTime overhaul 🤯🤐🙃
Fixed buggy behavior of QDateTime values during SELECT, INSERT, and
UPDATE queries for all supported QtSql drivers. Behavior is fixed if
querying the database using Orm::QueryBuilder or TinyBuilder/Model.
Can't be fixed if using raw queries using the QSqlQuery because I don't
have any control over this code.

Every QtSql driver behaves differently in how it works with
the QDateTime and datetime-related database types. It doesn't have only
one problem, it has various kinds of problems, eg. it returns all
QDateTime objects in the local time zone. All issues are summarized
in NOTES.TXT under "QDateTime and database date/time types:"
section.

This buggy behavior can be fixed or corrected using a new "qt_timezone"
database connection configuration option. It accepts the time zone value
in various formats (QTimeZone, Qt::TimeSpec, int number as an offset
from UTC, QString eg. +02:00, Europe/Prague or Orm::QtTimeZoneConfig).
This "qt_timezone" value affects how the  QueryBuilder and TinyBuilder
send and receives datetime-related types to/from database. It should be
set to the same time zone value as the "timezone" connection
configuration option.

During the INSERT and UPDATE statements, it CONVERTS QDateTime's
time zone to the qt_timezone value before the statement is sent
to the database.
And during the SELECT statements it SETS QDateTime's time zone value
after the values are obtained from the database.

So if you set the "timezone" to UTC and "qt_timezone" to eg. Qt::UTC or
QTimeZone::utc(), then QDateTime values will have set the correct
time zone, in this case, the time zone will be UTC.

For the SQLite database was also added the "return_qdatetime" connection
configuration option which default value is true. By default,
the QSQLITE driver returns datetime values as QString.
The "return_qdatetime" controls this behavior and if is set to true then
the QDateTime will be returned instead.

TinyORM QueryBuilder returns the Orm::SqlQuery instead of QSqlQuery
from methods for which the QDateTime's time zone should be corrected.
That are eg. the select(), selectOne(), unprepared(), or chunk(),
chunkById(), each(), eachById(), ...

Orm::SqlQuery is a simple wrapper around the QSqlQuery whose
responsibility is only to fix a QDateTime's time zone.

Also unified the QDate behavior across all QtSql drivers.

 - added a new migration for the datetime table for testing QDateTime
   and datetime-related database types
 - added new Datetime model
 - added functional tests for testing datetime-related queries
   - testing QDateTime for all supported drivers
   - testing with different time zones, UTC, +02:00
   - testing QDate for all supported drivers
 - added two new connection configuration options "qt_timezone" and
   "return_qdatetime" which is for the SQLite database only
 - added returnQDateTime()/setReturnQDateTime() getter/setter
   to the SQLiteConnection class
 - added getQtTimeZone()/setQtTimeZone()/isConvertingTimeZone()
   to the DatabaseConnection class
 - tests, fixed all QDateTime instances, changed time zone to UTC, so
   auto tests are now UTC, they force also MySQL and PostgreSQL server
   time zone session variable to UTC

Others:

 - StringUtils moved from orm/tiny/utils/ to the orm/utils/ folder
   to the ::Orm::Utils namespace
 - enhanced all database connection constructors, used rvalue references
 - added delegated DatabaseConnection() constructor
   for SQLiteConnection() because of m_returnQDateTime
2022-10-27 14:30:00 +02:00
silverqx 39388abc47 tom used move for DM 2022-08-16 20:38:20 +02:00
silverqx 5ff160dec5 use upsert alias on MySQL
The MySQL >=8.0.19 supports aliases in the VALUES and SET clauses
of INSERT INTO ... ON DUPLICATE KEY UPDATE statement for the row to be
inserted and its columns. It also generates warning from >=8.0.20 if
an old style used.

This enhancement detects the MySQL version and on the base of it uses
alias during the upsert call.

Also a user can override the version through the MySQL database
configuration. It helps to save/avoid one database query
(select version()) during the upsert method call or during connecting
to the MySQL database (version is needed if strict mode is enabled).

 - added unit and functional tests
 - updated number of unit tests to 1402
 - updated upsert docs
 - added ConfigUtils to avoid duplicates

Others:

 - added the version database configuration everywhere
 - docs added few lines about MySQL version configuration option
 - docs updated database configurations, added a new missing options
2022-08-12 15:37:56 +02:00
silverqx 23d0d9045b cmake added FetchContent support
Primary fixed paths CMAKE_SOURCE_DIR, PROJECT_SOURCE_DIR,
CMAKE_BINARY_DIR and similar.

An user can use the following code in the CMakeLists.txt file to
fetch and configure the TinyORM project from GitHub:

FetchContent_Declare(TinyORM
    GIT_REPOSITORY https://github.com/silverqx/TinyORM.git
    GIT_TAG        origin/main
)
# Here you can configure TinyORM CMake options
set(TOM_EXAMPLE ON)
FetchContent_MakeAvailable(TinyORM)
2022-08-11 15:19:56 +02:00
silverqx 8a90bd8653 qmake disabled tiny_ccache in example configs 2022-07-17 11:15:53 +02:00
silverqx 109ed60913 added qmake ccache support on Windows
The ccache can be enable using the "CONFIG*=tiny_ccache" feature.

 - updated docs
2022-07-13 13:56:23 +02:00
silverqx cca1305054 shell complete, rename shell:connection tag 2022-07-09 06:24:45 +02:00
silverqx 96d0924983 added SQLite connection to tom example 2022-06-21 08:51:39 +02:00
silverqx f0a985ca6b added zsh completion 🤯🚀 2022-06-15 15:40:30 +02:00
silverqx 43335a6ca4 updated conf.pri.example/s
[skip ci]
2022-06-04 15:10:52 +02:00
silverqx 4f1c931eae added support for clang-cl
Be able to build with clang-cl with MSVC 2019/2022 but only with
inline constants.

 - supported by both CMake and qmake 🎉
 - updated docs support compilers

qmake specific:

 - enhanced and fixed tiny_toolchain_requirement
 - added clang-cl min. required version to tiny_toolchain_requirement
 - enhanced winconf.pri
 - updated conf.pri.examples
 - added a new feature file the tiny_system_headers.prf, it unifies
   tagging system headers

cmake specific:

 - also added clang-cl min. required version as minReqClangClVersion
 - for clang-cl set the INLINE_CONSTANTS to ON and don't show this
   CMake option
2022-06-04 09:23:53 +02:00