uonedb-qt team mailing list archive
-
uonedb-qt team
-
Mailing list archive
-
Message #00117
[Merge] lp:~kalikiana/u1db-qt/query4a into lp:u1db-qt
Christian Dywan has proposed merging lp:~kalikiana/u1db-qt/query4a into lp:u1db-qt.
Commit message:
Initial ground work splitting off query tests
Requested reviews:
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot): continuous-integration
U1DB Qt developers (uonedb-qt)
For more details, see:
https://code.launchpad.net/~kalikiana/u1db-qt/query4a/+merge/160351
Initial ground work splitting off query tests
--
https://code.launchpad.net/~kalikiana/u1db-qt/query4a/+merge/160351
Your team U1DB Qt developers is requested to review the proposed merge of lp:~kalikiana/u1db-qt/query4a into lp:u1db-qt.
=== modified file 'src/query.cpp'
--- src/query.cpp 2013-04-22 13:19:33 +0000
+++ src/query.cpp 2013-04-23 12:32:08 +0000
@@ -56,18 +56,8 @@
QVariant
Query::data(const QModelIndex & index, int role) const
{
- QVariantMap result(m_hash.value(index.row()));
-
if (role == 0) // contents
- {
- Database* db(m_index->getDatabase());
- if (db)
- {
- return result;
- }
- }
- if (role == 1) // docId
- //return docId;
+ return m_results.at(index.row());
return QVariant();
}
@@ -94,7 +84,7 @@
int
Query::rowCount(const QModelIndex & parent) const
{
- return m_hash.count();
+ return m_results.count();
}
/*!
@@ -113,7 +103,7 @@
void
Query::onDataInvalidated()
{
- m_hash.clear();
+ m_results.clear();
if (!m_index)
return;
@@ -159,11 +149,12 @@
}
if(match == true){
- m_hash.insert(m_hash.count(),i_map);
+ m_results.append(i_map);
}
}
+ Q_EMIT resultsChanged(m_results);
}
bool Query::queryField(QString field, QVariant value){
@@ -362,6 +353,12 @@
onDataInvalidated();
}
+QList<QVariant>
+Query::getResults()
+{
+ return m_results;
+}
+
QT_END_NAMESPACE_U1DB
#include "moc_query.cpp"
=== modified file 'src/query.h'
--- src/query.h 2013-04-19 11:19:43 +0000
+++ src/query.h 2013-04-23 12:32:08 +0000
@@ -36,6 +36,7 @@
#endif
Q_PROPERTY(QVariant query READ getQuery WRITE setQuery NOTIFY queryChanged)
Q_PROPERTY(QVariant range READ getRange WRITE setRange NOTIFY rangeChanged)
+ Q_PROPERTY(QList<QVariant> results READ getResults NOTIFY resultsChanged)
public:
Query(QObject* parent = 0);
~Query() { }
@@ -51,6 +52,7 @@
void setQuery(QVariant query);
QVariant getRange();
void setRange(QVariant range);
+ Q_INVOKABLE QList<QVariant> getResults();
void generateQueryResults();
bool iterateQueryList(QVariant query, QString field, QString value);
@@ -62,10 +64,11 @@
void indexChanged(Index* index);
void queryChanged(QVariant query);
void rangeChanged(QVariant range);
+ void resultsChanged(QList<QVariant> results);
private:
Q_DISABLE_COPY(Query)
Index* m_index;
- QHash<int, QVariantMap> m_hash;
+ QList<QVariant> m_results;
QVariant m_query;
QVariant m_range;
=== modified file 'tests/test-database.cpp'
--- tests/test-database.cpp 2013-02-14 11:33:58 +0000
+++ tests/test-database.cpp 2013-04-23 12:32:08 +0000
@@ -21,6 +21,8 @@
#include <QObject>
#include "database.h"
+#include "index.h"
+#include "query.h"
QT_USE_NAMESPACE_U1DB
@@ -40,11 +42,20 @@
Database db;
QCOMPARE(db.getPath(), QString(""));
- QSignalSpy modelReset(&db, SIGNAL(pathChanged()));
+ QSignalSpy modelReset(&db, SIGNAL(pathChanged(const QString&)));
QTemporaryFile file;
db.setPath(file.fileName());
QCOMPARE(db.getPath(), file.fileName());
- }
+
+ Index index;
+ index.setDatabase(&db);
+ index.setName("py-phone-number");
+ index.setExpression(QStringList("managers.phone_number"));
+
+ Query query;
+ query.setIndex(&index);
+ query.setQuery("*");
+ }
void cleanupTestCase()
{
=== modified file 'tests/tst_database.qml'
--- tests/tst_database.qml 2013-04-12 11:50:24 +0000
+++ tests/tst_database.qml 2013-04-23 12:32:08 +0000
@@ -52,37 +52,6 @@
defaults: { "eggs": "spam" }
}
-
- U1db.Index {
- id: myIndex
- database: myDatabase
- name: 'by-title-field'
- expression: ['title', 'bool(field)']
- }
-
- U1db.Query {
- id: firstQuery
- index: myIndex
- query: ['match', false]
- }
-
- U1db.Query {
- id: secondQuery
- index: myIndex
- range: [['a', 'b'], ['*']]
- }
-
- U1db.Query {
- id: allQuery
- index: myIndex
- query: '*'
- }
-
- U1db.Query {
- id: defaultAllQuery
- index: myIndex
- }
-
ListView {
id: myList
model: myDatabase
=== added file 'tests/tst_query.qml'
--- tests/tst_query.qml 1970-01-01 00:00:00 +0000
+++ tests/tst_query.qml 2013-04-23 12:32:08 +0000
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2013 Canonical, Ltd.
+ *
+ * Authors:
+ * Christian Dywan <christian.dywan@xxxxxxxxxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.0
+import QtTest 1.0
+import U1db 1.0 as U1db
+
+Item {
+ width: 200; height: 200
+
+ U1db.Database {
+ id: gents
+ }
+
+ U1db.Document {
+ database: gents
+ docId: '1'
+ contents: { 'gents': [ { 'name': 'Mary', 'phone': 12345 }, { 'name': 'Rob', 'phone': 54321 }, ] }
+ }
+
+ U1db.Document {
+ database: gents
+ docId: 'a'
+ contents: { 'gents': [ { 'name': 'George', 'phone': 'NA' }, { 'name': 'Ivanka', 'phone': 50243 }, ] }
+ }
+
+ U1db.Document {
+ database: gents
+ docId: '_'
+ contents: { 'gents': [ { 'name': 'Ivanka', 'phone': 00321 }, ] }
+ }
+
+ U1db.Index {
+ id: byPhone
+ database: gents
+ name: 'by-phone'
+ expression: ['gents.phone']
+ }
+
+ U1db.Index {
+ id: byNamePhone
+ database: gents
+ name: 'by-name-phone'
+ expression: ['gents.name', 'gents.phone']
+ }
+
+ U1db.Query {
+ id: defaultPhone
+ index: byPhone
+ }
+
+ U1db.Query {
+ id: allPhone
+ index: byPhone
+ query: '*'
+ }
+
+ U1db.Query {
+ id: allPhoneList
+ index: byPhone
+ query: ['*']
+ }
+
+ U1db.Query {
+ id: allPhoneKeywords
+ index: byPhone
+ query: { 'phone': '*' }
+ }
+
+ U1db.Query {
+ id: s12345Phone
+ index: byPhone
+ query: '12345'
+ }
+
+ U1db.Query {
+ id: i12345Phone
+ index: byPhone
+ query: 12345
+ }
+
+ U1db.Query {
+ id: s1wildcardPhone
+ index: byPhone
+ query: '1*'
+ }
+
+ U1db.Query {
+ id: ivankaAllNamePhone
+ index: byNamePhone
+ query: ['Ivanka', '*']
+ }
+
+ U1db.Query {
+ id: ivankaAllNamePhoneKeywords
+ index: byNamePhone
+ query: { 'name': 'Ivanka', 'phone': '*' }
+ }
+
+TestCase {
+ name: "U1dbDatabase"
+ when: windowShown
+
+ function test_1_defaults () {
+ // We should get all documents
+ compare(defaultPhone.results, [])
+ // Results are also equivalent
+ compare(defaultPhone.results, allPhoneKeywords.results)
+ }
+} }
+
Follow ups