diff options
author | Denis Dzyubenko <[email protected]> | 2012-04-11 15:59:00 +0200 |
---|---|---|
committer | Denis Dzyubenko <[email protected]> | 2012-04-11 16:54:46 +0200 |
commit | 6b7df60a752422b1f6ff07bb2682c21e18a43985 (patch) | |
tree | 3e56bd3f4ee34a228777d00ff328ef1c53cb1df1 /src/partition/jsondbobject.h | |
parent | 20549eedb5b5e852c0e384cd76bfbff14168dbda (diff) | |
parent | 7ef36e3c5a88560eb4e3a81c2c9f14059739108b (diff) |
Merge remote-tracking branch 'gerrit/master' into hbtreehbtree
Conflicts:
src/daemon/daemon.pri
src/daemon/jsondbview.cpp
src/partition/jsondbindex.cpp
src/partition/jsondbindex.h
src/partition/jsondbindexquery.h
src/partition/jsondbmanagedbtree.cpp
src/partition/jsondbmanagedbtree.h
src/partition/jsondbmanagedbtreetxn.cpp
src/partition/jsondbmanagedbtreetxn.h
src/partition/jsondbobjecttable.cpp
src/partition/jsondbobjecttable.h
src/partition/jsondbpartition.cpp
src/partition/jsondbpartition.h
tests/auto/auto.pro
tests/auto/partition/testpartition.cpp
tests/benchmarks/benchmarks.pro
Change-Id: I963adefd6d32fca9b3537981306b67538c759034
Diffstat (limited to 'src/partition/jsondbobject.h')
-rw-r--r-- | src/partition/jsondbobject.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/partition/jsondbobject.h b/src/partition/jsondbobject.h new file mode 100644 index 0000000..f5860a4 --- /dev/null +++ b/src/partition/jsondbobject.h @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtAddOn.JsonDb module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef JSONDB_OBJECT_H +#define JSONDB_OBJECT_H + +#include <QJSEngine> +#include <QUuid> +#include <QDebug> +#include <QVariant> + +#include <qjsonarray.h> +#include <qjsonobject.h> +#include <qjsonvalue.h> + +#include "jsondbpartitionglobal.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE_JSONDB_PARTITION + +class Q_JSONDB_PARTITION_EXPORT JsonDbObject : public QJsonObject +{ +public: + JsonDbObject(); + JsonDbObject(const QJsonObject &object); + ~JsonDbObject(); + + QByteArray toBinaryData() const; + + QUuid uuid() const; + QString version() const; + QString type() const; + bool isDeleted() const; + void markDeleted(); + + void generateUuid(); + static QUuid createUuidFromString(const QString &id); + QString computeVersion(); + + bool updateVersionOptimistic(const JsonDbObject &other, QString *versionWritten); + bool updateVersionReplicating(const JsonDbObject & other); + + bool operator <(const JsonDbObject &other) const; + bool isAncestorOf(const JsonDbObject &other) const; + + QJsonValue propertyLookup(const QString &path) const; + QJsonValue propertyLookup(const QStringList &path) const; + +private: + bool populateMerge(QMap<JsonDbObject, bool> *documents, const QUuid &id, const JsonDbObject &source, bool validateSource = false, bool recurse = true) const; + void populateHistory(QJsonArray *history, const JsonDbObject &doc, bool includeCurrent) const; + QString tokenizeVersion(const QString &version, int *updateCount) const; + QString versionAsString(const int updateCount, const QString &hash) const; + + bool computeVersion(const int oldUpdateCount, const QString& oldHash, int *newUpdateCount, QString *newHash) const; + + bool isAncestorOf(const QJsonArray &history, const int updateCount, const QString &hash) const; + void addAncestor(QJsonArray *history, const int updateCount, const QString &hash) const; +}; + + +typedef QList<JsonDbObject> JsonDbObjectList; + +struct GetObjectsResult +{ + JsonDbObjectList data; + QJsonValue error; + +}; + +QT_END_NAMESPACE_JSONDB_PARTITION + +QT_END_HEADER + +#endif // JSONDB_OBJECT_H |