A CDQuery is a 'program' consisting of a number of expressions of the format:

[operand:expr:argument[:argument[:argument...]]]

valid operands are:
----
and
or
sortby
sortorder
limit
offset

valid expressions are:
---
simple expressions
---
name/company_name  [name:OPERATOR:value] (string)
status [status:OPERATOR:value] (string)
url [url:OPERATOR:value] (string)
address [url:OPERATOR:value] (string)
owner/owner_id [owner:OPERATOR:value] (int)
id [id:OPERATOR:value] (int)
modified_since  [modified_since:OPERATOR:value] (int)
create_date = create_date:OPERATOR:value (int)
telephone
fax
contact_email
website
picture
logo

Valid operators are:
EQ, NE, GT, GE, LT, LE, SW/STARTSWITH, EW/ENDSWITH, LIKE, REGEX, CONTAINS
type specific...

---
complex expressions
---
hier = hier:#[:with_children]
category = hier:#[:with_children]
field = field:fieldname:OPERATOR:value[:type]
phrase = phrase:text
radius_miles = radius_miles:distance:lat:long
radius_km = radius_km:distance:lat:long
owner_list = owner_list:#,#,#,#
idlist = idlist:#,#,#,#


- AND statements are placed in the query before OR operations
- at least two OR statements must be specified for an OR arrangement.  If only one OR statement is provided it is treated like an AND

additional expressions can be registered by external software

EXAMPLE:
QUERY The most recently modified 20 PUBLISHED ARTICLES in 'Toronto' in Category 5 and children OR Hierarchy 6 without children

[and:status:EQ:published]
[and:address:CONTAINS:Toronto]
[or:category:5:1]
[or:hier:6]
[limit:20]
[sortby:modified_date]
[sortorder:desc]
