Feature Proposal: Query custom collections


A couple of proposals (this one used to be known as QueryLinksAndBacklinks) seem to be somewhat mergeable:

An IRC discussion, established that it should be possible to 'scope' queries using the QuerySearch syntax itself, to a particular 'collection' (better term wanted)

Description and Documentation

This requires two parts spec'd out:
  1. Syntax to query custom collections (and the standard 'topics' collection, which we can assume is what QuerySearch already defaults to)
  2. Store/Meta/??? API changes to allow registration of new collections; different collections might want to have their own store mechanisms too, unless they represent topics?


Just brainstorming
  • Query topics that have backlinks to a given topic
  • Authors of topics that have backlinks to a given topic
  • Query a topic for its links to other topics


  • List all revs on a topic authored by JoeBloggs
    %QUERY{"revisions[name='Web.SomeTopic' AND author='JoeBloggs']"}%
  • List all revs on a topic where 'State' was Working
    %QUERY{"revisions[name='Web.SomeTopic' AND State='Working']"}%
  • List all revs on a topic between Jan 1 and Sep 1
    %QUERY{"revisions[name='Web.SomeTopic' AND date >= d2n(2010-01-01) AND date <= d2n(2010-09-01)]"}%
  • List all topics that have any rev whose 'State' was ever Waiting

'log' DB

  • Query for save actions between 12/12/2005 and 12/12/2008
    %QUERY{"log[action='save' AND '12/12/2005'<date<'12/12/2008']"}%

Standard 'topics' collection as we already know it

  • Essentially, all existing QuerySearch queries operate on our existing 'topics' DB, Eg.
    becomes something like:
    %QUERY{"topics[name='%BASEWEB%.%BASETOPIC%' AND FieldName='SomeValue']"}%


  • On a vanilla foswiki, probably this will expand to %ALLOW[WEB,TOPIC]CHANGE% -
    %QUERY{"acls[topic='%WEB%.%TOPIC%' AND allowtopicchange]
    or, to flatten out groups as far as the user mapper is capable (TopicUserMapping should show only users, no groups):
    %QUERY{"acls[topic='%WEB%.%TOPIC%' AND allowtopicchange].flattened
    or to list only groups:
    %QUERY{"acls[topic='%WEB%.%TOPIC%' AND allowtopicchange AND isgroup]
    or to list flattened groups:
    %QUERY{"acls[topic='%WEB%.%TOPIC%' AND allowtopicchange AND isgroup].flattened




-- Contributors: PaulHarvey - 04 Oct 2010


it is possible that what you call a collection, is what I've been calling a ResultSet. (I say possible, because clearly, further thought is needed to define both of these terms.

  • List all topics from a previous QUERY's named resultset that whose 'State' was ever Waiting

-- SvenDowideit - 26 Oct 2010

Added the QueryAccessControls example

-- PaulHarvey - 07 Nov 2010
Topic revision: r4 - 07 Nov 2010, PaulHarvey - This page was cached on 22 Feb 2021 - 23:43.

The copyright of the content on this website is held by the contributing authors, except where stated elsewhere. See Copyright Statement. Creative Commons License    Legal Imprint    Privacy Policy