forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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...};
|
||||
}
|
||||
|
@@ -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...); });
|
||||
}
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user