← Back to team overview

uonedb-qt team mailing list archive

[Merge] lp:~kalikiana/u1db-qt/keys into lp:u1db-qt

 

Christian Dywan has proposed merging lp:~kalikiana/u1db-qt/keys into lp:u1db-qt.

Commit message:
Expose index keys declaratively and unit test it

Requested reviews:
  U1DB Qt developers (uonedb-qt)

For more details, see:
https://code.launchpad.net/~kalikiana/u1db-qt/keys/+merge/158649

Expose index keys declaratively and unit test it
-- 
https://code.launchpad.net/~kalikiana/u1db-qt/keys/+merge/158649
Your team U1DB Qt developers is requested to review the proposed merge of lp:~kalikiana/u1db-qt/keys into lp:u1db-qt.
=== modified file 'src/index.cpp'
--- src/index.cpp	2013-04-12 12:26:52 +0000
+++ src/index.cpp	2013-04-12 15:31:37 +0000
@@ -150,6 +150,17 @@
 }
 
 /*!
+    Returns the keys, as Database::getIndexKeys() would.
+ */
+QStringList
+Index::getKeys()
+{
+    if (m_database)
+        return m_database->getIndexKeys(m_name);
+    return QStringList();
+}
+
+/*!
  * \brief Index::generateIndexResults
  *
  * Iterates through the documents stored in the database and creates the list of results based on the Index expressions.

=== modified file 'src/index.h'
--- src/index.h	2013-04-12 12:26:52 +0000
+++ src/index.h	2013-04-12 15:31:37 +0000
@@ -37,6 +37,7 @@
 #endif
     Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged)
     Q_PROPERTY(QStringList expression READ getExpression WRITE setExpression NOTIFY expressionChanged)
+    Q_PROPERTY(QStringList keys READ getKeys NOTIFY keysChanged)
 public:
     Index(QObject* parent = 0);
     ~Index() { }
@@ -47,6 +48,8 @@
     void setName(const QString& name);
     QStringList getExpression();
     void setExpression(QStringList expression);
+    QStringList getKeys();
+
     void generateIndexResults();
     QStringList appendResultsFromMap(QStringList fieldsList, QVariantMap current_section, QString current_field);
     QStringList getFieldsFromList(QStringList fieldsList, QVariantList current_section, QString current_field);
@@ -58,6 +61,7 @@
     void databaseChanged(Database* database);
     void nameChanged(const QString& name);
     void expressionChanged(QVariant expression);
+    void keysChanged(QVariant expression);
     // Either of the above has changed:
     void dataInvalidated();
     void dataIndexed();

=== modified file 'tests/test-database.cpp'
--- tests/test-database.cpp	2013-02-14 11:33:58 +0000
+++ tests/test-database.cpp	2013-04-12 15:31:37 +0000
@@ -21,6 +21,8 @@
 #include <QObject>
 
 #include "database.h"
+#include "index.h"
+#include "query.h"
 
 QT_USE_NAMESPACE_U1DB
 
@@ -44,6 +46,15 @@
         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-12 15:31:37 +0000
@@ -52,12 +52,11 @@
         defaults: { "eggs": "spam" }
     }
 
-
     U1db.Index {
         id: myIndex
         database: myDatabase
-        name: 'by-title-field'
-        expression: ['title', 'bool(field)']
+        name: 'by-phone-number'
+        expression: ['managers.phone_number']
     }
 
     U1db.Query {
@@ -149,7 +148,9 @@
         spyContentsChanged.wait()
     }
 
-    function test_4_putIndex () {
+    function test_4_indexKeys () {
+        var path = myDatabase.path
+        myDatabase.path = ':memory:'
         myDatabase.putIndex("by-phone-number", ["managers.phone_number"])
         compare(myDatabase.getIndexExpressions('by-phone-number'), ["managers.phone_number"])
         myDatabase.putDoc({ 'managers': [
@@ -157,6 +158,21 @@
             { 'name': 'Rob', 'phone_number': '54321' },
             ] })
         // FIXME compare(myDatabase.getIndexKeys('by-phone-number'), ['12345', '54321'])
+        myDatabase.path = path
+
+        myDatabase.path = ':memory:'
+        myDatabase.putDoc({ 'managers': [
+            { 'name': 'Mary', 'phone_number': '12345' },
+            { 'name': 'Rob', 'phone_number': '54321' },
+            ] })
+        // FIXME compare(myIndex.keys, ['12345', '54321'])
+        compare(myIndex.keys, myDatabase.getIndexKeys(myIndex.name))
+        myDatabase.path = path
+    }
+
+    function test_5_queryResults () {
+        // FIXME compare(allQuery.rowCount, 2)
+        // FIXME compare(defaultAllQuery.rowCount, defaultQuery.rowCount)
     }
 
     function test_6_fillDocument () {


Follow ups