diff --git a/skgbasemodeler/skgdefine.h b/skgbasemodeler/skgdefine.h index 5c0a207..7a216ae 100644 --- a/skgbasemodeler/skgdefine.h +++ b/skgbasemodeler/skgdefine.h @@ -28,6 +28,7 @@ #include "skgbasemodeler_export.h" +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) template struct QAddConst { typedef const T Type; @@ -37,6 +38,8 @@ template struct QAddConst { template Q_DECL_CONSTEXPR typename QAddConst::Type& qAsConst(T& t) Q_DECL_NOTHROW { return t; } +#endif + /** * @var OBJECTSEPARATOR * Define the separator between object and subobject diff --git a/skgbasemodeler/skgdocument.cpp b/skgbasemodeler/skgdocument.cpp index cec76e9..5fb275a 100644 --- a/skgbasemodeler/skgdocument.cpp +++ b/skgbasemodeler/skgdocument.cpp @@ -854,7 +854,8 @@ QStringList SKGDocument::getImpactedViews(const QString& iTable) for (int i = 0; i < l.count(); ++i) { // Warning: the size of l will change in the loop QString item = l.at(i); if (m_ImpactedViews.contains(item)) { - for (const auto& name : qAsConst(m_ImpactedViews.value(item))) + QStringList impactedView = m_ImpactedViews.value(item); + for (const auto& name : qAsConst(impactedView)) if (!l.contains(name)) { l.push_back(name); } diff --git a/skgsqlcipher/qsql_sqlite.cpp b/skgsqlcipher/qsql_sqlite.cpp index 482cd35..ee1fcf6 100644 --- a/skgsqlcipher/qsql_sqlite.cpp +++ b/skgsqlcipher/qsql_sqlite.cpp @@ -130,7 +130,10 @@ protected: void virtual_hook(int id, void* data) Q_DECL_OVERRIDE; private: - QSQLiteResultPrivate* d; +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) + QSQLiteResultPrivate* d_ptr; +#endif + Q_DECLARE_PRIVATE(QSQLiteResult) }; class QSQLiteDriverPrivate : public QSqlDriverPrivate @@ -145,17 +148,25 @@ public: }; +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) +class QSQLiteResultPrivate : public QSqlCachedResultPrivate +#else class QSQLiteResultPrivate +#endif { public: - QSQLiteResultPrivate(QSQLiteResult* res); +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) + QSQLiteResultPrivate(QSQLiteResult *res, const QSQLiteDriver *drv); +#else + QSQLiteResultPrivate(QSQLiteResult *res); + QSQLiteResult* q_ptr; +#endif void cleanup(); bool fetchNext(QSqlCachedResult::ValueCache& values, int idx, bool initialFetch); // initializes the recordInfo and the cache void initColumns(bool emptyResultset); void finalize(); - QSQLiteResult* q; sqlite3* access; sqlite3_stmt* stmt; @@ -164,15 +175,27 @@ public: bool skipRow; // skip the next fetchNext()? QSqlRecord rInf; QVector firstRow; + + Q_DECLARE_PUBLIC(QSQLiteResult) }; -QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) : q(res), access(0), - stmt(0), skippedStatus(false), skipRow(false) +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) +QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult *res, const QSQLiteDriver *drv) + : QSqlCachedResultPrivate(res, drv) +#else +QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) + : q_ptr(res) +#endif + , access(0) + , stmt(0) + , skippedStatus(false) + , skipRow(false) { } void QSQLiteResultPrivate::cleanup() { + Q_Q(QSQLiteResult); finalize(); rInf.clear(); skippedStatus = false; @@ -194,6 +217,7 @@ void QSQLiteResultPrivate::finalize() void QSQLiteResultPrivate::initColumns(bool emptyResultset) { + Q_Q(QSQLiteResult); int nCols = sqlite3_column_count(stmt); if (nCols <= 0) { return; @@ -246,6 +270,8 @@ void QSQLiteResultPrivate::initColumns(bool emptyResultset) bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache& values, int idx, bool initialFetch) { + Q_Q(QSQLiteResult); + int res; int i; @@ -352,21 +378,29 @@ bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache& values, int i } QSQLiteResult::QSQLiteResult(const QSQLiteDriver* db) +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) + : QSqlCachedResult(*new QSQLiteResultPrivate(this, db)) +#else : QSqlCachedResult(db) + , d_ptr(new QSQLiteResultPrivate(this)) +#endif { - d = new QSQLiteResultPrivate(this); + Q_D(QSQLiteResult); d->access = db->d_func()->access; const_cast(db->d_func())->results.append(this); } QSQLiteResult::~QSQLiteResult() { + Q_D(QSQLiteResult); const QSqlDriver* sqlDriver = driver(); if (sqlDriver) { const_cast(qobject_cast(sqlDriver)->d_func())->results.removeOne(this); } d->cleanup(); +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) delete d; +#endif } void QSQLiteResult::virtual_hook(int id, void* data) @@ -384,6 +418,7 @@ bool QSQLiteResult::reset(const QString& query) bool QSQLiteResult::prepare(const QString& query) { + Q_D(QSQLiteResult); if (!driver() || !driver()->isOpen() || driver()->isOpenError()) { return false; } @@ -418,6 +453,7 @@ bool QSQLiteResult::prepare(const QString& query) bool QSQLiteResult::exec() { + Q_D(QSQLiteResult); const QVector values = boundValues(); d->skippedStatus = false; @@ -515,7 +551,7 @@ bool QSQLiteResult::exec() bool QSQLiteResult::gotoNext(QSqlCachedResult::ValueCache& row, int idx) { - return d->fetchNext(row, idx, false); + return d_func()->fetchNext(row, idx, false); } int QSQLiteResult::size() @@ -525,13 +561,13 @@ int QSQLiteResult::size() int QSQLiteResult::numRowsAffected() { - return sqlite3_changes(d->access); + return sqlite3_changes(d_func()->access); } QVariant QSQLiteResult::lastInsertId() const { if (isActive()) { - qint64 id = sqlite3_last_insert_rowid(d->access); + qint64 id = sqlite3_last_insert_rowid(d_func()->access); if (id) { return id; } @@ -544,19 +580,19 @@ QSqlRecord QSQLiteResult::record() const if (!isActive() || !isSelect()) { return QSqlRecord(); } - return d->rInf; + return d_func()->rInf; } void QSQLiteResult::detachFromResultSet() { - if (d->stmt) { - sqlite3_reset(d->stmt); + if (d_func()->stmt) { + sqlite3_reset(d_func()->stmt); } } QVariant QSQLiteResult::handle() const { - return QVariant::fromValue(d->stmt); + return QVariant::fromValue(d_func()->stmt); } ///////////////////////////////////////////////////////// @@ -668,7 +704,7 @@ void QSQLiteDriver::close() Q_D(QSQLiteDriver); if (isOpen()) { foreach (QSQLiteResult* result, d->results) { - result->d->finalize(); + result->d_func()->finalize(); } if (sqlite3_close(d->access) != SQLITE_OK)