close open_in_new

CQL Basics

CQL, the Card Query Language, is a syntax for finding Decko cards.  There's a brief introduction on the CQL card that explains why and where to use it.  This card is for folks who want to know how to write CQL.

A CQL statement defines a list of cards by their properties, their relationships to other cards, or both.

help edit space_dashboard

CQL is employed both by Sharks (in JSON) and by Monkeys (in Ruby).

Monkeys should have no problem translating the examples from JSON to Ruby, because CQL's structure is the same in both. For example, in Ruby, we might express a simple CQL statement as follows:

{ :name => 'Help' }

while the same in JSON would be

{ "name" : "Help" }

The above example is about as different as the two representations get. Both surround hashes with curly brackets and arrays with square brackets, but Ruby CQL uses symbols which start with colons, like :name, while JSON CQL puts both keys and values in double quotes. And those keys and values are separated by => in Ruby and : in JSON. In all other cases, whether you're writing in Ruby or JSON your CQL will use the same basic representation for the same basic concepts.

 

Building Blocks

 

Decko's basic building block is the card.  CQL's basic building block is the card query.

 

Card queries identify a list of one or more cards.  In the same way that one card can include other cards, one card query can include other card queries.

 

To conceptualize this, it may help to think of card queries as a noun phrase in a sentence.  For example:

Image cards.

That phrase can be nested inside another noun phrase:

Cards that link to Image cards.

You can extend this idea ad nauseam:

Cards that include cards for editors of cards that link to Image cards...

Those phrases give a general sense of what CQL is querying for, but unlike SQL, CQL is not a plaintext phrase.  Instead it is expressed as a compound object built from three simple types.  

WQL object types image

Note that these simple object types are common to a great variety of languages and platforms, and so CQL queries can be easily translated into any such language.

 

Card queries are "hashes", or unordered lists of key/value pairs.  These hashes use five kinds of keys :

  • property - name, content...
  • relationship - link to X, included by Y...
  • arrangement - sort by name, limit to 10...
  • operators - (shortcut for property queries), all the results matching "grantmaker"
  • modifier - add "+address" to the end of each result...

 Card query values can be any of the three object types:

  • simple: for simple matches, card names, etc
  • array: for operators
  • hash: for nested card queries

A +cheat sheet lists these more concisely, but without the explanation given below here:

 

 

Properties

 

Each card query can describe the following card properties:

  • name
  • type
  • content
  • key - canonical name permutation
  • id  - unique numerical id that remains the same even when the name is changed

 

Simple values

 

Each of these properties can be used as the key in a card query. For example, here is a search for the card named Lewis Hoffman.

{"name": "Lewis Hoffman"}

help edit space_dashboard
Lewis Hoffman
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced

 

 

This card happens to have the id 3, so it can also be found this way:

{"id": 3}

help edit space_dashboard
Lewis Hoffman
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced


Both the name and id uniquely identify cards in Decko, so they each return only one item. This type query however will return a list of several items.

 

{"type": "Fruit"}

help edit space_dashboard
Banana
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Apple
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
kiwi
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Star Fruit
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
testfruitsearch+discussion
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced

 

Simple values for content can return lists, too.  Note that this query will return only cards where the content is exactly and only "Kiwi".

{"content": "Kiwi"}

help edit space_dashboard
Peter Jackson nationality
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced



To narrow searches, you can combine properties:

{"type":"Fruit", "content": "Kiwi"}

help edit space_dashboard

 

 

 

Operators


The above examples represent simple searches where the property equals the value.  For example, the type equals "Fruit", or the name equals "Lewis Hoffman". CQL allows more flexible ways to constrain properties, via the following operators:

  • match / ~
  • gt / >
  • lt  / <
  • eq / = (an explicit form of the default)
  • ne /  !=
  • in

In the previous CQL examples, all the card query values are simple strings.  With operators, the values are arrays, as follows:

PROPERTY:[OPERATOR, VALUE]

So, the above example of cards with content equalling Kiwi:

{"content": "Kiwi"}

is actually the short form of the following:

{"content": ["eq", "Kiwi"] }

or

{"content": ["=", "Kiwi"] }


The other operators are more interesting. The "in" operator lets you search on multiple values for a given property.  This example finds all the cards whose type is either Releases or Point Releases:

{"type": ["in", "Release", "Point Releases"] }

help edit space_dashboard
Wagn 0.5.3
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.6.0
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.5.4
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.7.0
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.6.1
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.8
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.9
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 1.1
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.6.2
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.10
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.11
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.12
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 1.0
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 0.13
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 1.2
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 1.3
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Decko 1.0
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 1.4
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 1.7
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn 1.05
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • »
1 - 20 of 45

 

This one gets all the cards which have "Matt" anywhere in their content, even as part of a word (e.g., in "formatting"):

{"content": ["match", "Matt"] }

help edit space_dashboard
Sandbox
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
current
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Role
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Bugs+fixed
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Chicago 07 Invitation
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
How to use Wagn
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Design+cardegories
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
structure+junk
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Bugs+needs testing
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
General+discussion
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
structure+description
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Design+cues
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+nerdy nickname
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+bio
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Matt Scilipoti+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
search within name
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
find Matt within content
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
mattcoop
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 14
  • »
1 - 20 of 265
 

 

Operators Shortcut 

 

There is also a shortcut form for operators.

OPERATOR:VALUE

Note that this form does not specify the property, so CQL has to guess, as follows:

  • match - name or content
  • all other properties - just content
 so 
{"ne": "Kiwi"}

is equivalent to 

{"content": ["ne", "Kiwi"] }

 

And the following example does a search on both name and content:

{"match": "Matt" }

help edit space_dashboard
Sandbox
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
current
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Role
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Bugs+fixed
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Chicago 07 Invitation
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
How to use Wagn
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Design+cardegories
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
structure+junk
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Bugs+needs testing
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
General+discussion
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
structure+description
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Design+cues
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+nerdy nickname
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+bio
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Matt Scilipoti
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Matt Scilipoti+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Matt Wolverton
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 15
  • »
1 - 20 of 298

 

Relationships


Here's where it gets interesting. Cards in Decko are related to other cards in two main ways: references (links and nesting), and compound names). Since these relationships are the source of most structure in Decko, this is the the element of CQL that adds the most depth.

All of these relationships are specified in CQL by nesting card queries. With the exception of certain "plus" relationships, they all take this form:

RELATIONSHIP: CARD_QUERY

 

References


Cards linking to or including other cards comprise references. (note -- insert links to feature cards inline here)

CQL supports the following reference keys:

  • link_to - web links
  • linked_to_by
  • include - embedded cards
  • included_by
  • refer_to - web links or embedded cards
  • referred_to_by

The simplest reference relationship is the link_to. Here's how you can use CQL to find all the cards linked to the "John Abbe" card:

{"link_to": "John Abbe"}

help edit space_dashboard
TestOne+shady connections
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Bug Report+back burner
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Praise
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Wagn History
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Markus Pallo+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Sechrest+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Brian Kerr+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Edward "ejt" Trudeau+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Josh Skov+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Scott Keeler+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Gunner+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Scott Trudeau+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
zzlukes+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
MattisManzel+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Matt Scilipoti+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
zhida+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Jon Kennedy+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
DukeNukemIV+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Gail Taylor+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Albert Pendergrass+wiki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 48
  • »
1 - 20 of 942


Notice that in this case our nested card query is just the card name, "John Abbe". This is a short form of the more explicit expression:

{"link_to": {"name":"John Abbe"} }

Written that way, it looks much more like a nested card query: curly brackets inside curly brackets.

 

Plus cards


Frankly, if CQL ever gets a little mind-flexing, it's in using plus cards. But that's partly because plus cards are such a flexible way of doing things. If you haven't gotten the basic ideas behind compound names, continuing to read here will likely be very confusing. If you get the gist of plus cards, this will all make sense. But don't feel bad if you have to peek again later.

CQL supports two main plus cards keys:

  • part - value defines cards that are part of a given plus card
  • plus - value defines plus cards of which a given card is part

For each of those, it also supports two side-specific keys:

  • left, right
  • left_plus, right_plus


Part queries are generally pretty simple. Remember, if it has a part, it is always a plus card! The following finds all the cards that have "website" as a part.

{"part": "website"}

help edit space_dashboard
Walnut St. Co-op+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Beyond Yes+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Targeted Currencies Network+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Abbe+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Brian Kerr+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Justin Lowell-Bellew+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
website+definition
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
DabbleDB+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Freebase+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Pier+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Samizdat+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
XWiki+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Jottit+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Things+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Fort Collins+Wiki Wednesday+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ning+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Twitter+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Quartz Composer+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
portland+Wiki Wednesday+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
AboutUs+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • »
1 - 20 of 53



"left" and "right" do similar things, but are a bit narrower. This will get all the plus cards of which "email" is the rightmost part:

{"right": "email"}

help edit space_dashboard
John Abbe+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ethan McCutchen+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Beyond Yes+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ted Ernst+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
SteveHabibRose+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Scott Keeler+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Edward "ejt" Trudeau+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Sandbox+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced



Plus queries can get a little more involved. This is because, while a card can only ever have two part cards, it can be plussed to countless other cards. And you often want to refer to them in pairs - the other part and the plus card. For example, you might want to find all of the cards connected to "status" (the other part) where the content of X+status (the plus card) is "closed". So the plus card actually takes two queries. Here's the syntax:

 

"plus":[OTHER_PART, PLUS_CARD]

...and that example we mentioned:

{"plus":["status",{"content":"closed"}]} 

help edit space_dashboard
support wql count for end users
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Double-click doesn't edit templates
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Escaping for links and inclusion
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Search by permissions
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
allow contextual right-side in links and inclusions
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
names for ticket priority
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
always apply soft form
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
tickets need status
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Transform existing card to User card
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Can't use Related tab button to relate cards
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
implement calculations
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Paging busted on search
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
show the image or file when in Edit mode
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Search on *plus cards over-finding
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
No paging interface when only one page
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
User Contributions
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
custom edit text for cardtype-plus-field
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Card metadata field for most recently cached
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Omit type menu when type specified
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Simpler URL for type-specified new cards
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 36
  • »
1 - 20 of 704


In that one, "status" defines the part, and {"content":"closed"} defines the plus card.

If you give the "plus" key just one card query like a normal card query, then it will treat it as the other part.

 

 

"plus":OTHER_PART

For example, this finds all the cards connected to status (regardless of the value of the plus cards):

{"plus":"status"}

help edit space_dashboard
Sandbox
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
implement SisterSites
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ticket
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
support wql count for end users
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Double-click doesn't edit templates
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Escaping for links and inclusion
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Search by permissions
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
allow contextual right-side in links and inclusions
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
names for ticket priority
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
always apply soft form
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
tickets need status
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Transform existing card to User card
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
support simple import and export
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Can't use Related tab button to relate cards
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
implement calculations
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Paging busted on search
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
show the image or file when in Edit mode
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Search on *plus cards over-finding
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
No paging interface when only one page
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
User Contributions
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 98
  • »
1 - 20 of 1960

 

Users and roles

 

CQL lets you query the relationship of User (technically, any card with an account) and Role, using these keys:

  • member_of
  • member

 

For example, this finds all of the cards with accounts who have the GC Staff role:

{"member_of":"GC Staff"}

help edit space_dashboard
Lewis Hoffman
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ethan McCutchen
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Abbe
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Arthur Brock
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Gerry Gleason
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Matrisha Armitage
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Chris Anderson
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Jordan Warman
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced

 

And this finds all of the roles that Lewis Hoffman has:

{"member":"Lewis Hoffman"}

help edit space_dashboard
Administrator
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Moderators
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
GC Staff
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Developer
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Adviser
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced

 

Users and cards

 

You can also query what cards a user (technically, any card with an account) has created or edited, and who has been editing a card, using these keys:

  • edited_by — returns every card this card-with-account (CWA) has ever edited
  • editor_of — returns all CWAs who have ever edited this card (was "edited", which is now deprecated)
  • created_by — returns cards this CWA created
  • creator_of — returns CWA who created this card

 

 

For example, this finds all of the cards edited by John Abbe:

{"edited_by": "John Abbe"}

help edit space_dashboard
Design
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Sandbox
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
TestOne+shady connections
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Installing manually
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Abbe
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ruby on Rails
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Welcome
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
current
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
believability
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Abbe+email
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
phone
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Abbe+phone
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Walnut St. Co-op
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Walnut St. Co-op+phone
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
mofo
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Walnut St. Co-op+mofo
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
four hands
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Walnut St. Co-op+website
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • »
1 - 20 of 9236

 

And this finds all of the users who have edited Wiki on Wheels:

{"edited": "Wiki on Wheels"}

help edit space_dashboard
hunabku
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Lewis Hoffman
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Decko Bot 1
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ethan McCutchen
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Abbe
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Giacomo DiGrigoli
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Mamading Ceesay
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Scott Keeler
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Chuck Langenberg
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Kalin Harvey
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Archie Chen
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced

 

Contextual Relationships


Decko uses virtual cards to create patterns that can be re-used in multiple contexts. The following keys are available. See contextual names for more.

_self, _left, _right, _user, _main, _1, _2, etc.

 

 

"Not"


You can use "not" to exclude cards specified by the card query. For example, here are all the User cards with no nerdy nickname card attached yet:

{"type": "User", "not": {"plus": "nerdy nickname"}}

help edit space_dashboard
John Abbe
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
BrandonCsSanders
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Decko Bot 1
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
gideonro
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Raymond King
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
hunabku
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Sara Winge
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Imaginify
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
David Duncan
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Aaron Nelson
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Franklin Pierce
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Mark "Junctionbox" Hadfield
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
CuongTran
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Nick Dynice
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
wilkart
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Marcus Derencius
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ted Ernst
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Gary Hurley
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Michael Maranda
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Arthur Brock
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 58
  • »
1 - 20 of 1146

 

 

If the card query has multiple keys (properties or relationships), then the negation operates on the entire query. So this:

{"not": {A, B}}

 

....means "not (A and B)", which is equivalent to "not A OR not B" . For the equivalent of "neither A nor B", you can do the following:

{"not": {"or": {A, B}}}

 

"Or" and "and"

 

"Or" expects a series of simple key/value pairs, so if one of the conditions has multiple elements, you need to use the explicit "and", e.g. this:

{"or":
  {"type": "Image",
    "and": {"type": "User", "plus": "Image"} }
}

 

help edit space_dashboard
Lewis Hoffman
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ethan McCutchen
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Abbe
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Decko Bot 1
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ted Ernst
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Michael Maranda
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Arthur Brock
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Michael "Networking" Maranda
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
John Sechrest
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Brandon WilliamsCraig
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Vinh Nguyen
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Fernanda Ibarra
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
YuShen
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Liz Henry
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Markus Strauss
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
zzlukes
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Gévard Clavien
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
zhida
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
bruder
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
drew bernard
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 23
  • »
1 - 20 of 458

In the example "type": "Image" and "and": {...} are two 'pairs' that are the parameters for "or". 

 

Nesting searches

 

Often you want to specify a search once, then narrow it or arrange it in different ways. This could lead to a multiplication of search cards to maintain, but you can avoid this by using found_by, a key which takes a single Search card as a value, and returns all of the cards that Search returns. Note that the order and view of those cards is lost, and you can only nest once this way. A typical use is *right forms, e.g.:

{"found_by": "_self", "sort": "update"}

help edit space_dashboard
{"found_by": "_left", "sort": "update"}

 

help edit space_dashboard
Vasiliki Gkatziaki
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Arthur Brock
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Jordan Warman
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Shelley Thomas
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Matthew Platte
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Navjeet Chabbewal
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
jansegers
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
fredhampton
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Mir S.
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
amir christ
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Yaroslav Pidgaichuk
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Srivigneshwar R Prasad
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Drew
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
pi3g
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Rod Knowlton
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
C.W. Gabel Trefz
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Ghost Kusanagi
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Hellekin O. Wolf
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Jean-François Noubel
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
adomcruze
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 59
  • »
1 - 20 of 1178

 

Arranging Results

 

Limits

 

Limit takes a number, which determines how many cards will be shown at once. This gets passed directly into the SQL.

 

Ordering

 

Sort orders the cards, and can take one of four values:

  • update — in descending order from most recently edited/updated (this is the default, but we may change, e.g. to respect order of Pointer items found with referred_to_by, so it's best to be explicit)
  • create — in ascending order from the card earliest created to the latest
  • name — in ascending order, alphabetically (this used to be alpha, which still works)
  • content — in ascending order, alphabetically. This works, but only in very simple cases because Basic cards always have HTML and can have Decko markup, both of which do unexpected things to the order. Even Phrase and Plaintext cards can have HTML or Decko markup, but this should be usable on those cardtypes if no one is pasting in HTML. (Numbers are treated as text, and Dates are not stored in a consistent form, so neither is generally usable with sort by content.)

Dir can be used to override the default direction:

  • asc — ascending order
  • desc — as in descending

 

Putting these all together, you can tell CQL:

{"type": "User", "sort": "name", "dir": "desc", "limit": "8"}

help edit space_dashboard
zzlukes
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
zorf
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
zhida
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
zhangpeihao
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Zachary Sweet
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
YunfengWang
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
YuShen
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
yorzi
open_in_new
open_in_new page
fullscreen modal
edit edit
space_dashboard advanced
Error rendering: Users by eights (paging view)

 

Modifying Results

 

Append and prepend let you convert search result cards into new cards. For example, here's a simple way to find all the cards in a deck grouped by their type.

{"type":"Cardtype", "append":"*type", "sort":"name"}

help edit space_dashboard
Alias+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Animal+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Asset file+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Attribute+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Blog entry+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Blueprint+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Bootswatch skin+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
BrowserSession+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Cardtype+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
CoffeeScript+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Company+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
CSS+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Currency+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Date+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Design+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Diet+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Documentation Ticket+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Email template+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Event+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Feature+*type cards
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • 4
  • »
1 - 20 of 79

Notice that each card returned is a virtual cards, which means that it's not actually stored in the database.  There is a RichText card, and a *type, but there is no actual RichText+*type -- it's formed via a search pattern established in *type+*right+*structure.  Since most CQL can only return cards in the database, something like this would not work:

{"left":{"type":"Cardtype"}, "right":"*type", "sort":"name"}

Append works because the appending is done after the results are returned.

 

In addition to virtual cards, you can use append/prepend to return "missing" cards — cards that haven't been created yet. For example, if you're using Decko for an event and you want to invite people to fill in missing contact information, you might do something like this:

{"type": "User", "sort": "name", "append": "how to reach me"}

help edit space_dashboard
a300600+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Aaron Frerichs+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Aaron Garrett+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Aaron Nelson+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Aaron Segal+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Aaron Wood+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Abd Shomad+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
abdullah+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Abraham Isaac+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
acuth+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Adam Boyd+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Adam Glickman+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Adam Law+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Adam Lowry+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
adapar+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
adomcruze+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
AdrianoFerrari+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
afly+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
ak+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
Alaa Abouzeid+how to reach me
open_in_new
open_in_new page
fullscreen modal
edit create
space_dashboard advanced
  • «
  • 1
  • 2
  • 3
  • ...
  • 59
  • »
1 - 20 of 1178

In general, whenever all the results you want are actual cards, you should not use append/prepend, but rather use left / right.

 

 

Returning card count

 

You can have CQL return the number of cards found instead of the cards themselves. For example, if you wanted to include the number of current users, you'd do this:

{"type": "User", "return": "count"}

 By default, Decko provides a card *count you can append to any Search card to instead return a count, like so:

help edit space_dashboard
1178

 

Tips

  • "in" doesn't work with "plus", but if you want to search on two plus cards, you can use "plus" for one and "right_plus" for the other.
  • When searching on the content of Toggles, search for 0 to find the nos and 1 to find the yeses.
  • You can put comments in CQL with:
    /* commented text */

 

Needs

  • To date, all operators and sorts are treat numeric card values as text, which means, for example, that 11 comes before 2 (as it would alphabetically).  We plan to support better number handling soon.

Also see Related Tickets