forked from qt-creator/qt-creator
Fix build after merge
Change-Id: I424cb312d7ede82890d46cd9b09260babb11f62f Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include "sqliteblob.h"
|
#include "sqliteblob.h"
|
||||||
#include "sqliteexception.h"
|
#include "sqliteexception.h"
|
||||||
|
#include "sqlitetransaction.h"
|
||||||
#include "sqlitevalue.h"
|
#include "sqlitevalue.h"
|
||||||
|
|
||||||
#include <utils/smallstringvector.h>
|
#include <utils/smallstringvector.h>
|
||||||
@@ -37,6 +38,7 @@
|
|||||||
#include <utils/span.h>
|
#include <utils/span.h>
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <exception>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
@@ -91,6 +93,7 @@ public:
|
|||||||
void bind(int index, Utils::span<const char *> values);
|
void bind(int index, Utils::span<const char *> values);
|
||||||
void bind(int index, Utils::SmallStringView value);
|
void bind(int index, Utils::SmallStringView value);
|
||||||
void bind(int index, const Value &value);
|
void bind(int index, const Value &value);
|
||||||
|
void bind(int index, ValueView value);
|
||||||
void bind(int index, BlobView blobView);
|
void bind(int index, BlobView blobView);
|
||||||
|
|
||||||
void bind(int index, uint value) { bind(index, static_cast<long long>(value)); }
|
void bind(int index, uint value) { bind(index, static_cast<long long>(value)); }
|
||||||
@@ -162,13 +165,14 @@ extern template SQLITE_EXPORT Utils::PathString BaseStatement::fetchValue<Utils:
|
|||||||
template<typename BaseStatement, int ResultCount>
|
template<typename BaseStatement, int ResultCount>
|
||||||
class StatementImplementation : public BaseStatement
|
class StatementImplementation : public BaseStatement
|
||||||
{
|
{
|
||||||
|
struct Resetter;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using BaseStatement::BaseStatement;
|
using BaseStatement::BaseStatement;
|
||||||
|
|
||||||
void execute()
|
void execute()
|
||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{this};
|
||||||
BaseStatement::next();
|
BaseStatement::next();
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
}
|
}
|
||||||
@@ -185,7 +189,7 @@ public:
|
|||||||
template<typename... ValueType>
|
template<typename... ValueType>
|
||||||
void write(const ValueType&... values)
|
void write(const ValueType&... values)
|
||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{this};
|
||||||
bindValues(values...);
|
bindValues(values...);
|
||||||
BaseStatement::next();
|
BaseStatement::next();
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
@@ -194,7 +198,7 @@ public:
|
|||||||
template<typename ResultType>
|
template<typename ResultType>
|
||||||
std::vector<ResultType> values(std::size_t reserveSize)
|
std::vector<ResultType> values(std::size_t reserveSize)
|
||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{this};
|
||||||
std::vector<ResultType> resultValues;
|
std::vector<ResultType> resultValues;
|
||||||
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
||||||
|
|
||||||
@@ -211,7 +215,7 @@ public:
|
|||||||
template<typename ResultType, typename... QueryTypes>
|
template<typename ResultType, typename... QueryTypes>
|
||||||
auto values(std::size_t reserveSize, const QueryTypes &...queryValues)
|
auto values(std::size_t reserveSize, const QueryTypes &...queryValues)
|
||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{this};
|
||||||
std::vector<ResultType> resultValues;
|
std::vector<ResultType> resultValues;
|
||||||
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
||||||
|
|
||||||
@@ -230,13 +234,13 @@ public:
|
|||||||
template<typename ResultType, typename... QueryTypes>
|
template<typename ResultType, typename... QueryTypes>
|
||||||
auto value(const QueryTypes &...queryValues)
|
auto value(const QueryTypes &...queryValues)
|
||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{this};
|
||||||
Utils::optional<ResultType> resultValue;
|
Utils::optional<ResultType> resultValue;
|
||||||
|
|
||||||
bindValues(queryValues...);
|
bindValues(queryValues...);
|
||||||
|
|
||||||
if (BaseStatement::next())
|
if (BaseStatement::next())
|
||||||
resultValue = assignValue<Utils::optional<ResultType>>();
|
resultValue = createOptionalValue<Utils::optional<ResultType>>();
|
||||||
|
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
|
|
||||||
@@ -258,7 +262,7 @@ public:
|
|||||||
template<typename Callable, typename... QueryTypes>
|
template<typename Callable, typename... QueryTypes>
|
||||||
void readCallback(Callable &&callable, const QueryTypes &...queryValues)
|
void readCallback(Callable &&callable, const QueryTypes &...queryValues)
|
||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{this};
|
||||||
|
|
||||||
bindValues(queryValues...);
|
bindValues(queryValues...);
|
||||||
|
|
||||||
@@ -272,10 +276,10 @@ public:
|
|||||||
resetter.reset();
|
resetter.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<int ResultTypeCount = 1, typename Container, typename... QueryTypes>
|
template<typename Container, typename... QueryTypes>
|
||||||
void readTo(Container &container, const QueryTypes &...queryValues)
|
void readTo(Container &container, const QueryTypes &...queryValues)
|
||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{this};
|
||||||
|
|
||||||
bindValues(queryValues...);
|
bindValues(queryValues...);
|
||||||
|
|
||||||
@@ -285,39 +289,187 @@ public:
|
|||||||
resetter.reset();
|
resetter.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename ResultType, typename... QueryTypes>
|
||||||
|
auto range(const QueryTypes &...queryValues)
|
||||||
|
{
|
||||||
|
return SqliteResultRange<ResultType>{*this, queryValues...};
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename ResultType, typename... QueryTypes>
|
||||||
|
auto rangeWithTransaction(const QueryTypes &...queryValues)
|
||||||
|
{
|
||||||
|
return SqliteResultRangeWithTransaction<ResultType>{*this, queryValues...};
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename ResultType>
|
||||||
|
class BaseSqliteResultRange
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
class SqliteResultIteratator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using iterator_category = std::input_iterator_tag;
|
||||||
|
using difference_type = int;
|
||||||
|
using value_type = ResultType;
|
||||||
|
using pointer = ResultType *;
|
||||||
|
using reference = ResultType &;
|
||||||
|
|
||||||
|
SqliteResultIteratator(StatementImplementation &statement)
|
||||||
|
: m_statement{statement}
|
||||||
|
, m_hasNext{m_statement.next()}
|
||||||
|
{}
|
||||||
|
|
||||||
|
SqliteResultIteratator(StatementImplementation &statement, bool hasNext)
|
||||||
|
: m_statement{statement}
|
||||||
|
, m_hasNext{hasNext}
|
||||||
|
{}
|
||||||
|
|
||||||
|
SqliteResultIteratator &operator++()
|
||||||
|
{
|
||||||
|
m_hasNext = m_statement.next();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator++(int) { m_hasNext = m_statement.next(); }
|
||||||
|
|
||||||
|
friend bool operator==(const SqliteResultIteratator &first,
|
||||||
|
const SqliteResultIteratator &second)
|
||||||
|
{
|
||||||
|
return first.m_hasNext == second.m_hasNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend bool operator!=(const SqliteResultIteratator &first,
|
||||||
|
const SqliteResultIteratator &second)
|
||||||
|
{
|
||||||
|
return !(first == second);
|
||||||
|
}
|
||||||
|
|
||||||
|
value_type operator*() const { return m_statement.createValue<ResultType>(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
StatementImplementation &m_statement;
|
||||||
|
bool m_hasNext = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
using value_type = ResultType;
|
||||||
|
using iterator = SqliteResultIteratator;
|
||||||
|
using const_iterator = iterator;
|
||||||
|
|
||||||
|
template<typename... QueryTypes>
|
||||||
|
BaseSqliteResultRange(StatementImplementation &statement, const QueryTypes &...queryValues)
|
||||||
|
: m_statement{statement}
|
||||||
|
{
|
||||||
|
statement.bindValues(queryValues...);
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseSqliteResultRange(BaseSqliteResultRange &) = delete;
|
||||||
|
BaseSqliteResultRange &operator=(BaseSqliteResultRange &) = delete;
|
||||||
|
|
||||||
|
BaseSqliteResultRange(BaseSqliteResultRange &&other)
|
||||||
|
: m_statement{std::move(other.resetter)}
|
||||||
|
{}
|
||||||
|
BaseSqliteResultRange &operator=(BaseSqliteResultRange &&) = delete;
|
||||||
|
|
||||||
|
iterator begin() & { return iterator{m_statement}; }
|
||||||
|
iterator end() & { return iterator{m_statement, false}; }
|
||||||
|
|
||||||
|
const_iterator begin() const & { return iterator{m_statement}; }
|
||||||
|
const_iterator end() const & { return iterator{m_statement, false}; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
StatementImplementation &m_statement;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename ResultType>
|
||||||
|
class SqliteResultRange : public BaseSqliteResultRange<ResultType>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
template<typename... QueryTypes>
|
||||||
|
SqliteResultRange(StatementImplementation &statement, const QueryTypes &...queryValues)
|
||||||
|
: BaseSqliteResultRange<ResultType>{statement}
|
||||||
|
, resetter{&statement}
|
||||||
|
|
||||||
|
{
|
||||||
|
statement.bindValues(queryValues...);
|
||||||
|
}
|
||||||
|
|
||||||
|
~SqliteResultRange()
|
||||||
|
{
|
||||||
|
if (!std::uncaught_exceptions())
|
||||||
|
resetter.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Resetter resetter;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename ResultType>
|
||||||
|
class SqliteResultRangeWithTransaction : public BaseSqliteResultRange<ResultType>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
template<typename... QueryTypes>
|
||||||
|
SqliteResultRangeWithTransaction(StatementImplementation &statement,
|
||||||
|
const QueryTypes &...queryValues)
|
||||||
|
: BaseSqliteResultRange<ResultType>{statement}
|
||||||
|
, m_transaction{statement.database()}
|
||||||
|
, resetter{&statement}
|
||||||
|
{
|
||||||
|
statement.bindValues(queryValues...);
|
||||||
|
}
|
||||||
|
|
||||||
|
~SqliteResultRangeWithTransaction()
|
||||||
|
{
|
||||||
|
if (!std::uncaught_exceptions()) {
|
||||||
|
resetter.reset();
|
||||||
|
m_transaction.commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
DeferredTransaction m_transaction;
|
||||||
|
Resetter resetter;
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
~StatementImplementation() = default;
|
~StatementImplementation() = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Resetter
|
struct Resetter
|
||||||
{
|
{
|
||||||
Resetter(StatementImplementation &statement)
|
Resetter(StatementImplementation *statement)
|
||||||
: statement(statement)
|
: statement(statement)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
Resetter(Resetter &) = delete;
|
||||||
|
Resetter &operator=(Resetter &) = delete;
|
||||||
|
|
||||||
|
Resetter(Resetter &&other)
|
||||||
|
: statement{std::exchange(other.statement, nullptr)}
|
||||||
|
{}
|
||||||
|
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
statement.reset();
|
if (statement)
|
||||||
|
statement->reset();
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
shouldReset = false;
|
statement = nullptr;
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldReset = false;
|
statement = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
~Resetter() noexcept
|
~Resetter() noexcept
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
if (shouldReset)
|
if (statement)
|
||||||
statement.reset();
|
statement->reset();
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StatementImplementation &statement;
|
StatementImplementation *statement;
|
||||||
bool shouldReset = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ValueGetter
|
struct ValueGetter
|
||||||
@@ -351,17 +503,28 @@ private:
|
|||||||
emplaceBackValues(container, std::make_integer_sequence<int, ResultCount>{});
|
emplaceBackValues(container, std::make_integer_sequence<int, ResultCount>{});
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ResultOptionalType,
|
template<typename ResultOptionalType, int... ColumnIndices>
|
||||||
int... ColumnIndices>
|
ResultOptionalType createOptionalValue(std::integer_sequence<int, ColumnIndices...>)
|
||||||
ResultOptionalType assignValue(std::integer_sequence<int, ColumnIndices...>)
|
|
||||||
{
|
{
|
||||||
return ResultOptionalType(Utils::in_place, ValueGetter(*this, ColumnIndices)...);
|
return ResultOptionalType(Utils::in_place, ValueGetter(*this, ColumnIndices)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ResultOptionalType>
|
template<typename ResultOptionalType>
|
||||||
ResultOptionalType assignValue()
|
ResultOptionalType createOptionalValue()
|
||||||
{
|
{
|
||||||
return assignValue<ResultOptionalType>(std::make_integer_sequence<int, ResultCount>{});
|
return createOptionalValue<ResultOptionalType>(std::make_integer_sequence<int, ResultCount>{});
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename ResultType, int... ColumnIndices>
|
||||||
|
ResultType createValue(std::integer_sequence<int, ColumnIndices...>)
|
||||||
|
{
|
||||||
|
return ResultType{ValueGetter(*this, ColumnIndices)...};
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename ResultType>
|
||||||
|
ResultType createValue()
|
||||||
|
{
|
||||||
|
return createValue<ResultType>(std::make_integer_sequence<int, ResultCount>{});
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Callable, int... ColumnIndices>
|
template<typename Callable, int... ColumnIndices>
|
||||||
|
@@ -213,8 +213,7 @@ QmlDesignerPlugin::~QmlDesignerPlugin()
|
|||||||
bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage/* = 0*/)
|
bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage/* = 0*/)
|
||||||
{
|
{
|
||||||
Sqlite::LibraryInitializer::initialize();
|
Sqlite::LibraryInitializer::initialize();
|
||||||
|
QDir{}.mkpath(Core::ICore::cacheResourcePath().toString());
|
||||||
QDir{}.mkpath(Core::ICore::cacheResourcePath());
|
|
||||||
|
|
||||||
if (!Utils::HostOsInfo::canCreateOpenGLContext(errorMessage))
|
if (!Utils::HostOsInfo::canCreateOpenGLContext(errorMessage))
|
||||||
return false;
|
return false;
|
||||||
@@ -222,8 +221,10 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e
|
|||||||
if (DesignerSettings::getValue(DesignerSettingsKey::STANDALONE_MODE).toBool())
|
if (DesignerSettings::getValue(DesignerSettingsKey::STANDALONE_MODE).toBool())
|
||||||
GenerateResource::generateMenuEntry();
|
GenerateResource::generateMenuEntry();
|
||||||
|
|
||||||
QString fontPath = Core::ICore::resourcePath() +
|
const QString fontPath
|
||||||
QStringLiteral("/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf");
|
= Core::ICore::resourcePath(
|
||||||
|
"qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf")
|
||||||
|
.toString();
|
||||||
if (QFontDatabase::addApplicationFont(fontPath) < 0)
|
if (QFontDatabase::addApplicationFont(fontPath) < 0)
|
||||||
qCWarning(qmldesignerLog) << "Could not add font " << fontPath << "to font database";
|
qCWarning(qmldesignerLog) << "Could not add font " << fontPath << "to font database";
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user