Overview
Cinchy Query Language (CQL)
Cinchy Query Language (CQL) is a specialized query language designed for managing and retrieving data and metadata across multiple tables in your network, consolidating it into single, actionable outputs. With CQL, you can:
- Use the query editor for tasks like data retrieval or modification.
- Work with table views.
- Manage table indexes.
For a comprehensive list, see the CQL functions Reference List.
All CQL queries are secured by default through universal data access controls. This ensures you only access data you're authorized to see.
Basic rules
CQL, unique to Cinchy, shares similarities with SQL and PGSQL but has key differences. The list below defines the foundational elements of CQL.
- Query Builder UI: Cinchy's Query Builder UI pre-fills basic syntax to speed up your query process. You can add terms manually or drag onto the Query Builder. More details can be found on the Saved Queries page.
- Built-in exclusion of deleted data: Queries generated by the Query Builder automatically exclude deleted data with a "WHERE [Deleted] IS NULL" clause. Remove the clause to include deleted records.
Query essentials
- Running any SELECT query where data is returned in the Query Window will run, and return, three times (once for the headers, once for the count, once for the data). INSERT statement will therefore insert 3 times. To mitigate this, access the query via the API or select Single Value Response in th Query Builder.
- Always use the "[Domain].[Table]" format when querying tables. For instance, querying the Product Content Backlog table would follow the [Product].[Product Content Backlog] syntax.
- For text or string data, encapsulate the text with single quotes, as in [Domain] = 'Sandbox'.
- Use != to specify Not equal to. For example, [Domain] != 'Sandbox'.
- A * after SELECT returns system columns for each entry.
- Use RESOLVELINK for linked column values. Syntax: ResolveLink('value(s)','column in target table').
INSERT INTO [Human Resources].[Employee RY] ([First Name], [Last Name], [Employee ID], [Manager])
VALUES (@FirstName, @LastName, @EmployeeID, (RESOLVELINK(@Manager, ‘Full Name’))
Linked data
Syntax for linked columns
For linked columns, employ the "[Column Name].[Linked Column Name]" format.
- Example: To extract [Full Name] from the Users table through a linked column Requester, use [Requester].[Full Name].
SELECT [Requester].[Full Name]
FROM [Product].[Product Content Backlog]
WHERE [Deleted] IS NULL
Multi-level links
You can access nested linked columns using extended syntax, like [Column Name].[Linked Column Name].[Linked Column Name]. For example, if you wanted to see the Manager ID of a specific employee, use [Employee].[Reports To].[Employee ID] to find the employee, who they report to, and their ID number.
SELECT [Employee].[Reports To].[Employee ID]
FROM [Employee Success].[Employees]
WHERE [Deleted] IS NULL
DELETES and UPDATES on links
When doing a DELETE or UPDATE on linked data (data where there is a JOIN), you must add an ALIAS to the query. This is to ensure that the query builder knows which tables to use in the function.
Failure to do so may result in the below error:
Ambiguous column name 'XXX'.
Here is an example of an improperly formed DELETE:
DELETE FROM [HR].[People]
WHERE [Deleted] IS NULL
AND [Employee Name] = 'Keith'
Here is an example of the correct syntax, using 'name' as the alias
DELETE name FROM [HR].[People] name
WHERE name.[Deleted] IS NULL
AND name.[Employee Name] = 'Keith'
The general syntax is below:
DELETE alias FROM [Domain].[Table] alias
WHERE alias.[Deleted] IS NULL
AND alias.[Linked Column] = 'string'
Function specific rules
- For INSERT INTO, ensure column and value order matches.
Draft and version handling
- Query draft rows using Draft([Column Name]). Also include [Column Name] for non-draft rows.
- Default sorting is ascending unless specified.
- In Boolean queries, 1 means true, 0 means false.
- In Cinchy, version history labeling diverges from standard SQL systems. While typical systems use a single label like "version 1.2.4," Cinchy breaks this into two components: Version and Draft Data. These serve as ORDER BY options. For example, if Version is
2
and Draft Data is5
, the complete version is denoted as2.5
.
Query return results
You can specify what your results return as in the Query Builder
Query result options
The table below lists what your results can return:
Query return result | Description |
---|---|
Query Result (Approved Data Only) | Default return type. Returns table data that's approved. Ideal for use with external APIs. |
Query Result (Including Draft Data) | Displays records, including those that are pending approval. |
Query Result (Including Version History) | Returns a table from a SELECT query (including draft data) with historical data for all tables, as seen in the Collaboration Log, including all changes within the scope of the query. |
Number of Rows Affected | Returns a single string response of the number of rows affected if the last statement is an INSERT, UPDATE, or DELETE. |
Execute DDL Script | For queries with DDL (Data Definition Language) commands like CREATE, ALTER, DROP. |
Single Value | Returns a result of 1 row x 1 column, irrespective of the underlying result set. |