← Back to team overview

uonedb-qt team mailing list archive

[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