diff options
author | Marco Bubke <marco.bubke@qt.io> | 2023-08-27 16:28:24 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2023-08-28 16:17:53 +0000 |
commit | 2a301d41c41afb1e1fceda0b1a22fa507c668366 (patch) | |
tree | e67522cde9df8be7f2678c5f5d291c1a51625efd /src/libs/sqlite | |
parent | a55efac890e5c23a1cc46ce9c0af91750b0df156 (diff) |
Sqlite: Flatten calls inside functions
The code is doing quite some template magic. This helps the compiler to
be persistent in removing intermediate function calls. So it would look
like handwritten code.
Change-Id: Idbe152b9256f5ea23d5a4c42ea2cfd117346d3a7
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/libs/sqlite')
-rw-r--r-- | src/libs/sqlite/sqlitebasestatement.h | 26 | ||||
-rw-r--r-- | src/libs/sqlite/sqlitereadstatement.h | 10 | ||||
-rw-r--r-- | src/libs/sqlite/sqlitereadwritestatement.h | 16 |
3 files changed, 28 insertions, 24 deletions
diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h index fd57b4f8f1..397068477c 100644 --- a/src/libs/sqlite/sqlitebasestatement.h +++ b/src/libs/sqlite/sqlitebasestatement.h @@ -27,6 +27,12 @@ using std::int64_t; +#ifdef Q_CC_MSVC +#define FLATTEN [[msvc::flatten]] +#else +#define FLATTEN [[gnu::flatten]] +#endif + namespace Sqlite { class Database; @@ -150,7 +156,7 @@ public: using BaseStatement::BaseStatement; StatementImplementation(StatementImplementation &&) = default; - void execute() + FLATTEN void execute() { Resetter resetter{this}; BaseStatement::next(); @@ -166,7 +172,7 @@ public: } template<typename... ValueType> - void write(const ValueType&... values) + FLATTEN void write(const ValueType &...values) { Resetter resetter{this}; bindValues(values...); @@ -190,7 +196,7 @@ public: std::size_t capacity = 32, typename = std::enable_if_t<is_container<Container>::value>, typename... QueryTypes> - auto values(const QueryTypes &...queryValues) + FLATTEN auto values(const QueryTypes &...queryValues) { Resetter resetter{this}; Container resultValues; @@ -211,7 +217,7 @@ public: template<typename...> typename Container = std::vector, typename = std::enable_if_t<!is_container<ResultType>::value>, typename... QueryTypes> - auto values(const QueryTypes &...queryValues) + FLATTEN auto values(const QueryTypes &...queryValues) { return values<Container<ResultType>, capacity>(queryValues...); } @@ -231,7 +237,7 @@ public: } template<typename ResultType, typename... QueryTypes> - auto optionalValue(const QueryTypes &...queryValues) + FLATTEN auto optionalValue(const QueryTypes &...queryValues) { Resetter resetter{this}; std::optional<ResultType> resultValue; @@ -245,7 +251,7 @@ public: } template<typename Type> - static auto toValue(Utils::SmallStringView sqlStatement, Database &database) + FLATTEN static auto toValue(Utils::SmallStringView sqlStatement, Database &database) { StatementImplementation statement(sqlStatement, database); @@ -257,7 +263,7 @@ public: } template<typename Callable, typename... QueryTypes> - void readCallback(Callable &&callable, const QueryTypes &...queryValues) + FLATTEN void readCallback(Callable &&callable, const QueryTypes &...queryValues) { Resetter resetter{this}; @@ -272,7 +278,7 @@ public: } template<typename Container, typename... QueryTypes> - void readTo(Container &container, const QueryTypes &...queryValues) + FLATTEN void readTo(Container &container, const QueryTypes &...queryValues) { Resetter resetter{this}; @@ -283,13 +289,13 @@ public: } template<typename ResultType, typename... QueryTypes> - auto range(const QueryTypes &...queryValues) + FLATTEN auto range(const QueryTypes &...queryValues) { return SqliteResultRange<ResultType>{*this, queryValues...}; } template<typename ResultType, typename... QueryTypes> - auto rangeWithTransaction(const QueryTypes &...queryValues) + FLATTEN auto rangeWithTransaction(const QueryTypes &...queryValues) { return SqliteResultRangeWithTransaction<ResultType>{*this, queryValues...}; } diff --git a/src/libs/sqlite/sqlitereadstatement.h b/src/libs/sqlite/sqlitereadstatement.h index 4f8091598b..eebce41780 100644 --- a/src/libs/sqlite/sqlitereadstatement.h +++ b/src/libs/sqlite/sqlitereadstatement.h @@ -32,7 +32,7 @@ public: using Base::values; template<typename ResultType, typename... QueryTypes> - auto valueWithTransaction(const QueryTypes &...queryValues) + FLATTEN auto valueWithTransaction(const QueryTypes &...queryValues) { return withDeferredTransaction(Base::database(), [&] { return Base::template value<ResultType>(queryValues...); @@ -40,7 +40,7 @@ public: } template<typename ResultType, typename... QueryTypes> - auto optionalValueWithTransaction(const QueryTypes &...queryValues) + FLATTEN auto optionalValueWithTransaction(const QueryTypes &...queryValues) { return withDeferredTransaction(Base::database(), [&] { return Base::template optionalValue<ResultType>(queryValues...); @@ -48,7 +48,7 @@ public: } template<typename ResultType, std::size_t capacity = 32, typename... QueryTypes> - auto valuesWithTransaction(const QueryTypes &...queryValues) + FLATTEN auto valuesWithTransaction(const QueryTypes &...queryValues) { return withDeferredTransaction(Base::database(), [&] { return Base::template values<ResultType, capacity>(queryValues...); @@ -56,7 +56,7 @@ public: } template<typename Callable, typename... QueryTypes> - void readCallbackWithTransaction(Callable &&callable, const QueryTypes &...queryValues) + FLATTEN void readCallbackWithTransaction(Callable &&callable, const QueryTypes &...queryValues) { withDeferredTransaction(Base::database(), [&] { Base::readCallback(std::forward<Callable>(callable), queryValues...); @@ -64,7 +64,7 @@ public: } template<typename Container, typename... QueryTypes> - void readToWithTransaction(Container &container, const QueryTypes &...queryValues) + FLATTEN void readToWithTransaction(Container &container, const QueryTypes &...queryValues) { withDeferredTransaction(Base::database(), [&] { Base::readTo(container, queryValues...); }); } diff --git a/src/libs/sqlite/sqlitereadwritestatement.h b/src/libs/sqlite/sqlitereadwritestatement.h index 2b3e6c3247..8e3825cb52 100644 --- a/src/libs/sqlite/sqlitereadwritestatement.h +++ b/src/libs/sqlite/sqlitereadwritestatement.h @@ -32,7 +32,7 @@ public: using Base::write; template<typename ResultType, typename... QueryTypes> - auto valueWithTransaction(const QueryTypes &...queryValues) + FLATTEN auto valueWithTransaction(const QueryTypes &...queryValues) { return withImmediateTransaction(Base::database(), [&] { return Base::template value<ResultType>(queryValues...); @@ -40,17 +40,15 @@ public: } template<typename ResultType, typename... QueryTypes> - auto optionalValueWithTransaction(const QueryTypes &...queryValues) + FLATTEN auto optionalValueWithTransaction(const QueryTypes &...queryValues) { return withImmediateTransaction(Base::database(), [&] { return Base::template optionalValue<ResultType>(queryValues...); }); } - template<typename ResultType, - std::size_t capacity = 32, - typename... QueryTypes> - auto valuesWithTransaction(const QueryTypes &...queryValues) + template<typename ResultType, std::size_t capacity = 32, typename... QueryTypes> + FLATTEN auto valuesWithTransaction(const QueryTypes &...queryValues) { return withImmediateTransaction(Base::database(), [&] { return Base::template values<ResultType, capacity>(queryValues...); @@ -58,7 +56,7 @@ public: } template<typename Callable, typename... QueryTypes> - void readCallbackWithTransaction(Callable &&callable, const QueryTypes &...queryValues) + FLATTEN void readCallbackWithTransaction(Callable &&callable, const QueryTypes &...queryValues) { withImmediateTransaction(Base::database(), [&] { Base::readCallback(std::forward<Callable>(callable), queryValues...); @@ -66,14 +64,14 @@ public: } template<typename Container, typename... QueryTypes> - void readToWithTransaction(Container &container, const QueryTypes &...queryValues) + FLATTEN void readToWithTransaction(Container &container, const QueryTypes &...queryValues) { withImmediateTransaction(Base::database(), [&] { Base::readTo(container, queryValues...); }); } - void executeWithTransaction() + FLATTEN void executeWithTransaction() { withImmediateTransaction(Base::database(), [&] { Base::execute(); |