summaryrefslogtreecommitdiffstats
path: root/src/imports/jsondb/jsondbmodelutils.cpp
diff options
context:
space:
mode:
authorDenis Dzyubenko <[email protected]>2012-04-11 15:59:00 +0200
committerDenis Dzyubenko <[email protected]>2012-04-11 16:54:46 +0200
commit6b7df60a752422b1f6ff07bb2682c21e18a43985 (patch)
tree3e56bd3f4ee34a228777d00ff328ef1c53cb1df1 /src/imports/jsondb/jsondbmodelutils.cpp
parent20549eedb5b5e852c0e384cd76bfbff14168dbda (diff)
parent7ef36e3c5a88560eb4e3a81c2c9f14059739108b (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.cpp56
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