Results from U1db.Query contain only indexed fields, not the whole document

Bug #1271973 reported by Stuart Langridge
18
This bug affects 4 people
Affects Status Importance Assigned to Milestone
U1DB Qt/ QML
Confirmed
High
Unassigned
u1db-qt (Ubuntu)
Confirmed
Undecided
Unassigned

Bug Description

Whe using U1db.Index and U1db.Query to query information from a U1db, the results returned from a Query should be the entire document, and instead they are a subset of the document containing only the indexed fields.

Example code below. Observe that the left-hand ListView is showing results, but those results are not the whole content of each document; instead, they contain only the fields in the index. Index queries should return the whole document. Otherwise queries are almost useless; they are designed so that you can get a list of the documents which match the query fields, not just the query fields which match the query fields. Returning the value of the fields which match the query is pointless: you must already know those values in order to construct the query in the first place.

import QtQuick 2.0
import U1db 1.0 as U1db

Rectangle {
    width: 600
    height: 300

    U1db.Database { id: db; path: "u1db-broken-query"; }
    U1db.Document {
        database: db; docId: "doc1"; create: true
        defaults: { "topfield": { "subfield": "subvalue1" }, "toplevelfield": "topvalue1" }
    }
    U1db.Document {
        database: db; docId: "doc2"; create: true
        defaults: { "topfield": { "subfield": "subvalue2" }, "toplevelfield": "topvalue2" }
    }
    U1db.Index {
        database: db
        id: by_topfield_subfield
        expression: ["topfield.subfield"]
    }
    U1db.Index {
        database: db
        id: by_toplevelfield
        expression: ["toplevelfield.subfield"]
    }
    U1db.Query { id: qtopsub; index: by_topfield_subfield; query: [{subfield: "*"}] }
    U1db.Query { id: qtoplevel; index: by_toplevelfield; query: [{toplevelfield: "*"}] }

    Text {
        id: h1
        width: parent.width / 2
        height: 50
        anchors.left: parent.left
        anchors.top: parent.top
        horizontalAlignment: Text.AlignHCenter
        text: "ListModel on topfield.subfield"
    }

    ListView {
        anchors.top: h1.bottom
        anchors.left: parent.left
        width: h1.width
        anchors.bottom: parent.bottom
        model: qtopsub
        delegate: Text {
            text: JSON.stringify(model.contents)
        }
    }

    Text {
        id: h2
        width: parent.width / 2
        height: 50
        anchors.right: parent.right
        anchors.top: parent.top
        horizontalAlignment: Text.AlignHCenter
        text: "ListModel on toplevelfield"
    }

    ListView {
        anchors.top: h2.bottom
        anchors.right: parent.right
        width: h2.width
        anchors.bottom: parent.bottom
        model: qtoplevel
        delegate: Text {
            text: JSON.stringify(model.contents)
        }
    }
}

Tags: devexp

Related branches

Cris Dywan (kalikiana)
Changed in u1db-qt:
importance: Undecided → Medium
status: New → Confirmed
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:u1db-qt at revision 113, scheduled for release in u1db-qt, milestone 1.0

Changed in u1db-qt:
status: Confirmed → Fix Committed
Cris Dywan (kalikiana)
Changed in u1db-qt:
status: Fix Committed → Confirmed
milestone: none → 1.0
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package u1db-qt - 0.1.5+14.04.20140313-0ubuntu1

---------------
u1db-qt (0.1.5+14.04.20140313-0ubuntu1) trusty; urgency=low

  [ CI bot ]
  * No change rebuild against Qt 5.2.1.

  [ Christian Dywan ]
  * Adopt xvfb.sh script from ui toolkit to run tests
  * Sort out build warnings and make them always fatal.
  * Implement Database.removeDoc method and use it in unit test
    Functionally this is equivalent to replacing the doc with an empty
    one. (LP: #1243395)
  * Use new-style qmlrunner log option to enable stdout.
  * Query improvements and more advanced example. (LP: #1271977,
    #1271972, #1266478)
  * Store whole document contents in the results and unit test that.
    (LP: #1271973)
  * Reverse query logic to check non-matching and internally convert
    between query syntaxes. (LP: #1284194, #1214538, #1215898)
  * Revert r113 and update unit test to verify previous behavior
 -- Ubuntu daily release <email address hidden> Thu, 13 Mar 2014 23:12:40 +0000

Changed in u1db-qt (Ubuntu):
status: New → Fix Released
Revision history for this message
Cris Dywan (kalikiana) wrote :

The above is a lie, and for whatever reason I have no way of fixing the false Release status now.

Revision history for this message
David Planella (dpm) wrote :

To clarify the last comment, Christian tells me that the fix was backed out of the landing due to a regression.

Changed in u1db-qt (Ubuntu):
status: Fix Released → Confirmed
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package u1db-qt - 0.1.5+14.10.20140716-0ubuntu1

---------------
u1db-qt (0.1.5+14.10.20140716-0ubuntu1) utopic; urgency=low

  [ Pete Woods ]
  * Improve database init performance by adding transactions

  [ Christian Dywan ]
  * Adopt xvfb.sh script from ui toolkit to run tests
  * Sort out build warnings and make them always fatal.
  * Implement Database.removeDoc method and use it in unit test
    Functionally this is equivalent to replacing the doc with an empty
    one. (LP: #1243395)
  * Use new-style qmlrunner log option to enable stdout.
  * Query improvements and more advanced example. (LP: #1271977,
    #1271972, #1266478)
  * Store whole document contents in the results and unit test that.
    (LP: #1271973)
  * Reverse query logic to check non-matching and internally convert
    between query syntaxes. (LP: #1284194, #1214538, #1215898)
  * Revert r113 and update unit test to verify previous behavior
 -- Ubuntu daily release <email address hidden> Wed, 16 Jul 2014 07:52:34 +0000

Changed in u1db-qt (Ubuntu):
status: Confirmed → Fix Released
Revision history for this message
Timo Jyrinki (timo-jyrinki) wrote :

This time the changelog of new u1db-qt got bloated by a missing tag, it actually contained only the "Improve database init performance by adding transactions".

And true, the bzr113 commit was indeed reverted earlier, so this bug is still open.

Changed in u1db-qt (Ubuntu):
status: Fix Released → Confirmed
Revision history for this message
Timo Jyrinki (timo-jyrinki) wrote :

(it seems the other bugs were not incorrectly updated by the new release, since they were already fixed earlier)

tags: added: devexp
Cris Dywan (kalikiana)
Changed in u1db-qt (Ubuntu):
status: Confirmed → Fix Committed
Changed in u1db-qt:
status: Confirmed → Fix Committed
status: Fix Committed → Confirmed
Changed in u1db-qt (Ubuntu):
status: Fix Committed → Confirmed
Cris Dywan (kalikiana)
Changed in u1db-qt:
importance: Medium → High
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.