caql

Calypso Query Language

Usage no npm install needed!

<script type="module">
  import caql from 'https://cdn.skypack.dev/caql';
</script>

README

Calypso Query Language (CaQL)

  • Use a SQL-like query language over any queryable data store.
  • Parser & AST provided.
  • Used by calypso and other projects.

Install

npm install caql

Calypso Query Language Specification

The Calypso Query Language (CaQL) has support for field selection, field aliases, filters, and ordering.

Field Selection

select (optional)

select [fields | *]

Select is optional. If not provided, drivers should treat it as an unbounded field selection ('*').

fields

Fields can contain letters, numbers, underscores, and hyphens.

Deep field selections are allowed.

Example: select client.address.street1

Fields can be escaped using brackets as delimiters.

Example: select [date of birth], age, name

aliases

Fields can also be aliased.

Example: select title as t, author as a

Filter Expressions

where

Starts a filter.

Example: select title where author="Kurt Vonnegut"

comparisons

CaQL supports the following comparison expressions:

Equality: select * where name = "Kevin"

Inequality: select * where name != "Rose"

Greater than: select * where age > 30

Greater than or equal to: select * where age >= 30

Less than: select * where price < 10

Less than or equal to: select * where price <= 10

To negate comparisons, use NOT: select * where not age > 30

missing

Use CaQL to discover whether an object has a property.

Undefined value: select * where price is missing

Defined value: select * where price is not missing

contains

select * where name contains "Kevin"

like

select * where name like "%evi%"

The percent symbol (%) acts as a wildcard character matching zero or more characters.

The like operator can be negated with not like.

select * where name not like "%evi%"

location

The location expression supports a distance along with a latitude, longitude pair.

Example: select * where location within 30 of 90.2342, 30.23432

Note: Not all drivers may support this option.

conjunctions

CaQL has support for conjunctions using the keyword and.

Example: select * where name="Kevin" and age=31

disjunctions

CaQL has support for disjunctions, as well, using or.

Example: select * where name="Kevin" or name="Matt"

Sorting

order by

Results can be sorted. A direction can be added. Ascending (asc) is used by default. Descending (desc) must be explicit.

Example: select name, age order by age desc, name asc

License

MIT