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/imports/jsondb/jsondbmodelutils.cpp | |
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/imports/jsondb/jsondbmodelutils.cpp')
-rw-r--r-- | src/imports/jsondb/jsondbmodelutils.cpp | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/src/imports/jsondb/jsondbmodelutils.cpp b/src/imports/jsondb/jsondbmodelutils.cpp index 2f48c4d..5cadd27 100644 --- a/src/imports/jsondb/jsondbmodelutils.cpp +++ b/src/imports/jsondb/jsondbmodelutils.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "jsondbmodelutils.h" +#include <qdebug.h> QT_BEGIN_NAMESPACE_JSONDB @@ -59,6 +60,11 @@ SortingKey::SortingKey(int partitionIndex, const QVariantList &object, const QLi d = new SortingKeyPrivate(partitionIndex, uuid, directions, values, spec); } +SortingKey::SortingKey(int partitionIndex, const QByteArray &uuid, const QVariantList &object, const QList<bool> &directions, const SortIndexSpec &spec) +{ + d = new SortingKeyPrivate(partitionIndex, uuid, directions, object, spec); +} + SortingKey::SortingKey(const SortingKey &other) :d(other.d) { @@ -106,14 +112,17 @@ bool SortingKey::operator <(const SortingKey &rhs) const // The index spec is only applied to the first item if (!i && (dLhs->indexSpec.type == SortIndexSpec::String || dLhs->indexSpec.type == SortIndexSpec::UUID)) { if ((cmp = equalWithSpec(lhsValue, rhsValue, dLhs->indexSpec))) { - return (dLhs->directions[i] ? (cmp < 0) : !(cmp < 0)); + return (dLhs->directions[i] ? (cmp < 0) : (cmp > 0)); } } else if (lhsValue != rhsValue) { - bool result = lhsValue < rhsValue; - return (dLhs->directions[i] ? result :!result); + return (dLhs->directions[i] ? lhsValue < rhsValue : rhsValue < lhsValue); } } - return (memcmp(dLhs->uuid.constData(), dRhs->uuid.constData(), qMin(dLhs->uuid.size(), dRhs->uuid.size())) < 0); + int cmp = memcmp(dLhs->uuid.constData(), dRhs->uuid.constData(), qMin(dLhs->uuid.size(), dRhs->uuid.size())); + // In case of even score jsondb sorts according to _uuid in the same direction as the last sort item + if (nKeys) + return (dLhs->directions[0] ? (cmp < 0) : (cmp > 0)); + return (cmp < 0); } bool SortingKey::operator ==(const SortingKey &rhs) const @@ -200,4 +209,43 @@ QString removeArrayOperator(QString propertyName) return propertyName; } + +ModelRequest::ModelRequest(QObject *parent) + :QObject(parent) +{ +} + +ModelRequest::~ModelRequest() +{ + resetRequest(); +} + +QJsonDbReadRequest* ModelRequest::newRequest(int newIndex) +{ + resetRequest(); + index = newIndex; + request = new QJsonDbReadRequest(); + connect(request, SIGNAL(finished()), this, SLOT(onQueryFinished())); + connect(request, SIGNAL(finished()), request, SLOT(deleteLater())); + connect(request, SIGNAL(error(QtJsonDb::QJsonDbRequest::ErrorCode,QString)), + this, SIGNAL(error(QtJsonDb::QJsonDbRequest::ErrorCode,QString))); + connect(request, SIGNAL(error(QtJsonDb::QJsonDbRequest::ErrorCode,QString)), + request, SLOT(deleteLater())); + return request; +} + +void ModelRequest::resetRequest() +{ + if (request) { + delete request; + request = 0; + } +} + +void ModelRequest::onQueryFinished() +{ + emit finished(index, request->takeResults(), request->sortKey()); +} + +#include "moc_jsondbmodelutils.cpp" QT_END_NAMESPACE_JSONDB |