diff -Nru akonadi-16.04.2/CMakeLists.txt akonadi-16.04.2.patched/CMakeLists.txt --- akonadi-16.04.2/CMakeLists.txt 2016-05-31 11:33:56.000000000 +0200 +++ akonadi-16.04.2.patched/CMakeLists.txt 2016-06-30 22:38:55.661518771 +0200 @@ -31,14 +31,13 @@ SOVERSION 5) # Find packages -find_package(Qt5Core ${QT_REQUIRED_VERSION} CONFIG REQUIRED) -find_package(Qt5Gui ${QT_REQUIRED_VERSION} CONFIG REQUIRED) -find_package(Qt5Widgets ${QT_REQUIRED_VERSION} CONFIG REQUIRED) -find_package(Qt5Sql ${QT_REQUIRED_VERSION} CONFIG REQUIRED) -find_package(Qt5Network ${QT_REQUIRED_VERSION} CONFIG REQUIRED) -find_package(Qt5Xml ${QT_REQUIRED_VERSION} CONFIG REQUIRED) -find_package(Qt5DBus ${QT_REQUIRED_VERSION} CONFIG REQUIRED) -find_package(Qt5Test ${QT_REQUIRED_VERSION} CONFIG REQUIRED) +find_package(Qt5Core ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Private) +find_package(Qt5Sql ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Private) +find_package(Qt5DBus ${QT_REQUIRED_VERSION} REQUIRED) +find_package(Qt5Network ${QT_REQUIRED_VERSION} REQUIRED) +find_package(Qt5Test ${QT_REQUIRED_VERSION} REQUIRED) +find_package(Qt5Widgets ${QT_REQUIRED_VERSION} REQUIRED) +find_package(Qt5Xml ${QT_REQUIRED_VERSION} REQUIRED) find_package(KF5ItemViews ${KF5_VERSION} CONFIG REQUIRED) find_package(KF5KIO ${KF5_VERSION} CONFIG REQUIRED) @@ -129,7 +128,7 @@ set(SQLITE_TYPE "OPTIONAL") endif() -if(AKONADI_BUILD_QSQLITE AND Qt5Core_VERSION VERSION_LESS 5.7.0) # API change in 5.7 breaks our sqlite driver +if(AKONADI_BUILD_QSQLITE) set(SQLITE_MIN_VERSION 3.6.23) find_package(Sqlite ${SQLITE_MIN_VERSION}) set_package_properties(Sqlite PROPERTIES diff -Nru akonadi-16.04.2/src/qsqlite/CMakeLists.txt akonadi-16.04.2.patched/src/qsqlite/CMakeLists.txt --- akonadi-16.04.2/src/qsqlite/CMakeLists.txt 2016-05-31 11:33:56.000000000 +0200 +++ akonadi-16.04.2.patched/src/qsqlite/CMakeLists.txt 2016-06-30 22:27:54.489104785 +0200 @@ -9,6 +9,8 @@ set(QSQLITE_INSTALL_PREFIX "${PLUGIN_INSTALL_DIR}/sqldrivers") include_directories( + ${Qt5Core_PRIVATE_INCLUDE_DIRS} + ${Qt5Sql_PRIVATE_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src ${SQLITE_INCLUDE_DIR} ) diff -Nru akonadi-16.04.2/src/qsqlite/src/QtSql/private/qobject_p.h akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qobject_p.h --- akonadi-16.04.2/src/qsqlite/src/QtSql/private/qobject_p.h 2016-05-31 11:33:56.000000000 +0200 +++ akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qobject_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,434 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Copyright (C) 2013 Olivier Goffart -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QOBJECT_P_H -#define QOBJECT_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header -// file may change from version to version without notice, or even be removed. -// -// We mean it. -// - -#include "QtCore/qobject.h" -#include "QtCore/qpointer.h" -#include "QtCore/qsharedpointer.h" -#include "QtCore/qcoreevent.h" -#include "QtCore/qlist.h" -#include "QtCore/qvector.h" -#include "QtCore/qvariant.h" -#include "QtCore/qreadwritelock.h" - -QT_BEGIN_NAMESPACE - -class QVariant; -class QThreadData; -class QObjectConnectionListVector; -namespace QtSharedPointer { struct ExternalRefCountData; } - -/* for Qt Test */ -struct QSignalSpyCallbackSet -{ - typedef void (*BeginCallback)(QObject *caller, int signal_or_method_index, void **argv); - typedef void (*EndCallback)(QObject *caller, int signal_or_method_index); - BeginCallback signal_begin_callback, - slot_begin_callback; - EndCallback signal_end_callback, - slot_end_callback; -}; -void Q_CORE_EXPORT qt_register_signal_spy_callbacks(const QSignalSpyCallbackSet &callback_set); - -extern QSignalSpyCallbackSet Q_CORE_EXPORT qt_signal_spy_callback_set; - -enum { QObjectPrivateVersion = QT_VERSION }; - -class Q_CORE_EXPORT QAbstractDeclarativeData -{ -public: - static void (*destroyed)(QAbstractDeclarativeData *, QObject *); - static void (*destroyed_qml1)(QAbstractDeclarativeData *, QObject *); - static void (*parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *); - static void (*signalEmitted)(QAbstractDeclarativeData *, QObject *, int, void **); - static int (*receivers)(QAbstractDeclarativeData *, const QObject *, int); - static bool (*isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int); -}; - -// This is an implementation of QAbstractDeclarativeData that is identical with -// the implementation in QtDeclarative and QtQml for the first bit -struct QAbstractDeclarativeDataImpl : public QAbstractDeclarativeData -{ - quint32 ownedByQml1:1; - quint32 unused: 31; -}; - -class Q_CORE_EXPORT QObjectPrivate : public QObjectData -{ - Q_DECLARE_PUBLIC(QObject) - -public: - struct ExtraData - { - ExtraData() {} - #ifndef QT_NO_USERDATA - QVector userData; - #endif - QList propertyNames; - QList propertyValues; - QVector runningTimers; - QList > eventFilters; - QString objectName; - }; - - typedef void (*StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **); - struct Connection - { - QObject *sender; - QObject *receiver; - union { - StaticMetaCallFunction callFunction; - QtPrivate::QSlotObjectBase *slotObj; - }; - // The next pointer for the singly-linked ConnectionList - Connection *nextConnectionList; - //senders linked list - Connection *next; - Connection **prev; - QAtomicPointer argumentTypes; - QAtomicInt ref_; - ushort method_offset; - ushort method_relative; - uint signal_index : 27; // In signal range (see QObjectPrivate::signalIndex()) - ushort connectionType : 3; // 0 == auto, 1 == direct, 2 == queued, 4 == blocking - ushort isSlotObject : 1; - ushort ownArgumentTypes : 1; - Connection() : nextConnectionList(0), ref_(2), ownArgumentTypes(true) { - //ref_ is 2 for the use in the internal lists, and for the use in QMetaObject::Connection - } - ~Connection(); - int method() const { return method_offset + method_relative; } - void ref() { ref_.ref(); } - void deref() { - if (!ref_.deref()) { - Q_ASSERT(!receiver); - delete this; - } - } - }; - // ConnectionList is a singly-linked list - struct ConnectionList { - ConnectionList() : first(0), last(0) {} - Connection *first; - Connection *last; - }; - - struct Sender - { - QObject *sender; - int signal; - int ref; - }; - - - QObjectPrivate(int version = QObjectPrivateVersion); - virtual ~QObjectPrivate(); - void deleteChildren(); - - void setParent_helper(QObject *); - void moveToThread_helper(); - void setThreadData_helper(QThreadData *currentData, QThreadData *targetData); - void _q_reregisterTimers(void *pointer); - - bool isSender(const QObject *receiver, const char *signal) const; - QObjectList receiverList(const char *signal) const; - QObjectList senderList() const; - - void addConnection(int signal, Connection *c); - void cleanConnectionLists(); - - static inline Sender *setCurrentSender(QObject *receiver, - Sender *sender); - static inline void resetCurrentSender(QObject *receiver, - Sender *currentSender, - Sender *previousSender); - - static QObjectPrivate *get(QObject *o) { - return o->d_func(); - } - - int signalIndex(const char *signalName, const QMetaObject **meta = 0) const; - inline bool isSignalConnected(uint signalIdx) const; - - // To allow abitrary objects to call connectNotify()/disconnectNotify() without making - // the API public in QObject. This is used by QQmlNotifierEndpoint. - inline void connectNotify(const QMetaMethod &signal); - inline void disconnectNotify(const QMetaMethod &signal); - - template - static inline QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer::Object *sender, Func1 signal, - const typename QtPrivate::FunctionPointer::Object *receiverPrivate, Func2 slot, - Qt::ConnectionType type = Qt::AutoConnection); - - template - static inline bool disconnect(const typename QtPrivate::FunctionPointer::Object *sender, Func1 signal, - const typename QtPrivate::FunctionPointer::Object *receiverPrivate, Func2 slot); - - static QMetaObject::Connection connectImpl(const QObject *sender, int signal_index, - const QObject *receiver, void **slot, - QtPrivate::QSlotObjectBase *slotObj, Qt::ConnectionType type, - const int *types, const QMetaObject *senderMetaObject); - static QMetaObject::Connection connect(const QObject *sender, int signal_index, QtPrivate::QSlotObjectBase *slotObj, Qt::ConnectionType type); - static bool disconnect(const QObject *sender, int signal_index, void **slot); -public: - ExtraData *extraData; // extra data set by the user - QThreadData *threadData; // id of the thread that owns the object - - QObjectConnectionListVector *connectionLists; - - Connection *senders; // linked list of connections connected to this object - Sender *currentSender; // object currently activating the object - mutable quint32 connectedSignals[2]; - - union { - QObject *currentChildBeingDeleted; - QAbstractDeclarativeData *declarativeData; //extra data used by the declarative module - }; - - // these objects are all used to indicate that a QObject was deleted - // plus QPointer, which keeps a separate list - QAtomicPointer sharedRefcount; -}; - - -/*! \internal - - Returns \c true if the signal with index \a signal_index from object \a sender is connected. - Signals with indices above a certain range are always considered connected (see connectedSignals - in QObjectPrivate). - - \a signal_index must be the index returned by QObjectPrivate::signalIndex; -*/ -inline bool QObjectPrivate::isSignalConnected(uint signal_index) const -{ - return signal_index >= sizeof(connectedSignals) * 8 - || (connectedSignals[signal_index >> 5] & (1 << (signal_index & 0x1f)) - || (declarativeData && QAbstractDeclarativeData::isSignalConnected - && QAbstractDeclarativeData::isSignalConnected(declarativeData, q_func(), signal_index))); -} - -inline QObjectPrivate::Sender *QObjectPrivate::setCurrentSender(QObject *receiver, - Sender *sender) -{ - Sender *previousSender = receiver->d_func()->currentSender; - receiver->d_func()->currentSender = sender; - return previousSender; -} - -inline void QObjectPrivate::resetCurrentSender(QObject *receiver, - Sender *currentSender, - Sender *previousSender) -{ - // ref is set to zero when this object is deleted during the metacall - if (currentSender->ref == 1) - receiver->d_func()->currentSender = previousSender; - // if we've recursed, we need to tell the caller about the objects deletion - if (previousSender) - previousSender->ref = currentSender->ref; -} - -inline void QObjectPrivate::connectNotify(const QMetaMethod &signal) -{ - q_ptr->connectNotify(signal); -} - -inline void QObjectPrivate::disconnectNotify(const QMetaMethod &signal) -{ - q_ptr->disconnectNotify(signal); -} - -namespace QtPrivate { -template class QPrivateSlotObject : public QSlotObjectBase -{ - typedef QtPrivate::FunctionPointer FuncType; - Func function; - static void impl(int which, QSlotObjectBase *this_, QObject *r, void **a, bool *ret) - { - switch (which) { - case Destroy: - delete static_cast(this_); - break; - case Call: - FuncType::template call(static_cast(this_)->function, - static_cast(QObjectPrivate::get(r)), a); - break; - case Compare: - *ret = *reinterpret_cast(a) == static_cast(this_)->function; - break; - case NumOperations: ; - } - } -public: - explicit QPrivateSlotObject(Func f) : QSlotObjectBase(&impl), function(f) {} -}; -} //namespace QtPrivate - -template -inline QMetaObject::Connection QObjectPrivate::connect(const typename QtPrivate::FunctionPointer::Object *sender, Func1 signal, - const typename QtPrivate::FunctionPointer::Object *receiverPrivate, Func2 slot, - Qt::ConnectionType type) -{ - typedef QtPrivate::FunctionPointer SignalType; - typedef QtPrivate::FunctionPointer SlotType; - Q_STATIC_ASSERT_X(QtPrivate::HasQ_OBJECT_Macro::Value, - "No Q_OBJECT in the class with the signal"); - - //compilation error if the arguments does not match. - Q_STATIC_ASSERT_X(int(SignalType::ArgumentCount) >= int(SlotType::ArgumentCount), - "The slot requires more arguments than the signal provides."); - Q_STATIC_ASSERT_X((QtPrivate::CheckCompatibleArguments::value), - "Signal and slot arguments are not compatible."); - Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible::value), - "Return type of the slot is not compatible with the return type of the signal."); - - const int *types = 0; - if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection) - types = QtPrivate::ConnectionTypes::types(); - - return QObject::connectImpl(sender, reinterpret_cast(&signal), - receiverPrivate->q_ptr, reinterpret_cast(&slot), - new QtPrivate::QPrivateSlotObject::Value, - typename SignalType::ReturnType>(slot), - type, types, &SignalType::Object::staticMetaObject); -} - -template -bool QObjectPrivate::disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object* sender, Func1 signal, - const typename QtPrivate::FunctionPointer< Func2 >::Object* receiverPrivate, Func2 slot) -{ - typedef QtPrivate::FunctionPointer SignalType; - typedef QtPrivate::FunctionPointer SlotType; - Q_STATIC_ASSERT_X(QtPrivate::HasQ_OBJECT_Macro::Value, - "No Q_OBJECT in the class with the signal"); - //compilation error if the arguments does not match. - Q_STATIC_ASSERT_X((QtPrivate::CheckCompatibleArguments::value), - "Signal and slot arguments are not compatible."); - return QObject::disconnectImpl(sender, reinterpret_cast(&signal), - receiverPrivate->q_ptr, reinterpret_cast(&slot), - &SignalType::Object::staticMetaObject); -} - -Q_DECLARE_TYPEINFO(QObjectPrivate::Connection, Q_MOVABLE_TYPE); -Q_DECLARE_TYPEINFO(QObjectPrivate::Sender, Q_MOVABLE_TYPE); - -class QSemaphore; -class Q_CORE_EXPORT QMetaCallEvent : public QEvent -{ -public: - QMetaCallEvent(ushort method_offset, ushort method_relative, QObjectPrivate::StaticMetaCallFunction callFunction , const QObject *sender, int signalId, - int nargs = 0, int *types = 0, void **args = 0, QSemaphore *semaphore = 0); - /*! \internal - \a signalId is in the signal index range (see QObjectPrivate::signalIndex()). - */ - QMetaCallEvent(QtPrivate::QSlotObjectBase *slotObj, const QObject *sender, int signalId, - int nargs = 0, int *types = 0, void **args = 0, QSemaphore *semaphore = 0); - - ~QMetaCallEvent(); - - inline int id() const { return method_offset_ + method_relative_; } - inline const QObject *sender() const { return sender_; } - inline int signalId() const { return signalId_; } - inline void **args() const { return args_; } - - virtual void placeMetaCall(QObject *object); - -private: - QtPrivate::QSlotObjectBase *slotObj_; - const QObject *sender_; - int signalId_; - int nargs_; - int *types_; - void **args_; - QSemaphore *semaphore_; - QObjectPrivate::StaticMetaCallFunction callFunction_; - ushort method_offset_; - ushort method_relative_; -}; - -class QBoolBlocker -{ - Q_DISABLE_COPY(QBoolBlocker) -public: - explicit inline QBoolBlocker(bool &b, bool value=true):block(b), reset(b){block = value;} - inline ~QBoolBlocker(){block = reset; } -private: - bool █ - bool reset; -}; - -void Q_CORE_EXPORT qDeleteInEventHandler(QObject *o); - -struct QAbstractDynamicMetaObject; -struct Q_CORE_EXPORT QDynamicMetaObjectData -{ - virtual ~QDynamicMetaObjectData() {} - virtual void objectDestroyed(QObject *) { delete this; } - - virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) = 0; - virtual int metaCall(QObject *, QMetaObject::Call, int _id, void **) = 0; -}; - -struct Q_CORE_EXPORT QAbstractDynamicMetaObject : public QDynamicMetaObjectData, public QMetaObject -{ - virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) { return this; } - virtual int createProperty(const char *, const char *) { return -1; } - virtual int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) - { return metaCall(c, _id, a); } - virtual int metaCall(QMetaObject::Call, int _id, void **) { return _id; } // Compat overload -}; - -QT_END_NAMESPACE - -#endif // QOBJECT_P_H diff -Nru akonadi-16.04.2/src/qsqlite/src/QtSql/private/qsqlcachedresult_p.h akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qsqlcachedresult_p.h --- akonadi-16.04.2/src/qsqlite/src/QtSql/private/qsqlcachedresult_p.h 2016-05-31 11:33:56.000000000 +0200 +++ akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qsqlcachedresult_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,100 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtSql module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSQLCACHEDRESULT_P_H -#define QSQLCACHEDRESULT_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of other Qt classes. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "QtSql/qsqlresult.h" - -QT_BEGIN_NAMESPACE - -class QVariant; -template class QVector; - -class QSqlCachedResultPrivate; - -class Q_SQL_EXPORT QSqlCachedResult: public QSqlResult -{ -public: - virtual ~QSqlCachedResult(); - - typedef QVector ValueCache; - -protected: - QSqlCachedResult(const QSqlDriver * db); - - void init(int colCount); - void cleanup(); - void clearValues(); - - virtual bool gotoNext(ValueCache &values, int index) = 0; - - QVariant data(int i); - bool isNull(int i); - bool fetch(int i); - bool fetchNext(); - bool fetchPrevious(); - bool fetchFirst(); - bool fetchLast(); - - int colCount() const; - ValueCache &cache(); - - void virtual_hook(int id, void *data); -private: - bool cacheNext(); - QSqlCachedResultPrivate *d; -}; - -QT_END_NAMESPACE - -#endif // QSQLCACHEDRESULT_P_H diff -Nru akonadi-16.04.2/src/qsqlite/src/QtSql/private/qsqldriver_p.h akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qsqldriver_p.h --- akonadi-16.04.2/src/qsqlite/src/QtSql/private/qsqldriver_p.h 2016-05-31 11:33:56.000000000 +0200 +++ akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qsqldriver_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtSql module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSQLDRIVER_P_H -#define QSQLDRIVER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the QtSQL module. This header file may change from version to version -// without notice, or even be removed. -// -// We mean it. -// - -#include "qobject_p.h" -#include "qsqldriver.h" -#include "qsqlerror.h" - -QT_BEGIN_NAMESPACE - -class QSqlDriverPrivate : public QObjectPrivate -{ - Q_DECLARE_PUBLIC(QSqlDriver) - -public: - enum DBMSType {UnknownDB, MSSqlServer, MySqlServer, PostgreSQL, Oracle, Sybase, SQLite, Interbase, DB2}; - - QSqlDriverPrivate() - : QObjectPrivate(), - isOpen(false), - isOpenError(false), - precisionPolicy(QSql::LowPrecisionDouble), - dbmsType(UnknownDB) - { } - - uint isOpen; - uint isOpenError; - QSqlError error; - QSql::NumericalPrecisionPolicy precisionPolicy; - DBMSType dbmsType; -}; - -QT_END_NAMESPACE - -#endif // QSQLDRIVER_P_H diff -Nru akonadi-16.04.2/src/qsqlite/src/qsql_sqlite.cpp akonadi-16.04.2.patched/src/qsqlite/src/qsql_sqlite.cpp --- akonadi-16.04.2/src/qsqlite/src/qsql_sqlite.cpp 2016-05-31 11:33:56.000000000 +0200 +++ akonadi-16.04.2.patched/src/qsqlite/src/qsql_sqlite.cpp 2016-06-30 22:27:54.490104785 +0200 @@ -51,8 +51,8 @@ #include #include -#include "QtSql/private/qsqldriver_p.h" -#include "QtSql/private/qsqlcachedresult_p.h" +#include +#include #if defined Q_OS_WIN # include @@ -136,7 +136,10 @@ void virtual_hook(int id, void *data); private: - QSQLiteResultPrivate* d; +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) + QSQLiteResultPrivate* d_ptr; +#endif + Q_DECLARE_PRIVATE(QSQLiteResult) }; @@ -144,24 +147,33 @@ { public: inline QSQLiteDriverPrivate() : access(0) { - dbmsType = SQLite; + dbmsType = QSqlDriver::SQLite; } sqlite3 *access; QList results; }; +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) +class QSQLiteResultPrivate : public QSqlCachedResultPrivate +#else class QSQLiteResultPrivate +#endif { public: +#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; @@ -170,15 +182,27 @@ 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; @@ -199,6 +223,7 @@ void QSQLiteResultPrivate::initColumns(bool emptyResultset) { + Q_Q(QSQLiteResult); int nCols = sqlite3_column_count(stmt); if (nCols <= 0) return; @@ -251,6 +276,8 @@ bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int idx, bool initialFetch) { + Q_Q(QSQLiteResult); + int res; int i; @@ -351,20 +378,28 @@ } 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) @@ -381,6 +416,8 @@ bool QSQLiteResult::prepare(const QString &query) { + Q_D(QSQLiteResult); + if (!driver() || !driver()->isOpen() || driver()->isOpenError()) return false; @@ -416,6 +453,7 @@ bool QSQLiteResult::exec() { + Q_D(QSQLiteResult); const QVector values = boundValues(); d->skippedStatus = false; @@ -510,7 +548,7 @@ bool QSQLiteResult::gotoNext(QSqlCachedResult::ValueCache& row, int idx) { - return d->fetchNext(row, idx, false); + return d_func()->fetchNext(row, idx, false); } int QSQLiteResult::size() @@ -520,13 +558,13 @@ 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; } @@ -537,18 +575,18 @@ { 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 qVariantFromValue(d->stmt); + return qVariantFromValue(d_func()->stmt); } ///////////////////////////////////////////////////////// @@ -660,7 +698,7 @@ if (isOpen()) { Q_FOREACH (QSQLiteResult *result, d->results) { - result->d->finalize(); + result->d_func()->finalize(); } if (sqlite3_close(d->access) != SQLITE_OK)