aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/sqlite
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2023-08-27 16:28:24 +0200
committerMarco Bubke <marco.bubke@qt.io>2023-08-28 16:17:53 +0000
commit2a301d41c41afb1e1fceda0b1a22fa507c668366 (patch)
treee67522cde9df8be7f2678c5f5d291c1a51625efd /src/libs/sqlite
parenta55efac890e5c23a1cc46ce9c0af91750b0df156 (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.h26
-rw-r--r--src/libs/sqlite/sqlitereadstatement.h10
-rw-r--r--src/libs/sqlite/sqlitereadwritestatement.h16
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();