users(*)
~> {country, "users":
~> {first_name, last_name}} as users_by_country
WITH
cte_1 AS (
SELECT
users.id AS id,
users.first_name AS first_name,
users.last_name AS last_name,
users.email AS email,
users.age AS age,
users.status AS status,
users.country AS country,
users.created_at AS created_at,
users.last_login AS last_login,
users.balance AS balance
FROM users
),
cte_2 AS (
SELECT
cte_1.country AS country,
COALESCE(
JSON(
'['
|| GROUP_CONCAT(
CASE
WHEN cte_1.first_name IS NOT NULL
OR cte_1.last_name IS NOT NULL THEN JSON_OBJECT(
'first_name',
cte_1.first_name,
'last_name',
cte_1.last_name
)
END,
','
)
|| ']'
),
JSON('[]')
) AS users
FROM cte_1
GROUP BY
cte_1.country
),
cte_3 AS (
SELECT
COALESCE(
JSON(
'['
|| GROUP_CONCAT(
CASE
WHEN cte_2.country IS NOT NULL
OR cte_2.users IS NOT NULL THEN JSON_OBJECT(
'country',
cte_2.country,
'users',
json(cte_2.users)
)
END,
','
)
|| ']'
),
JSON('[]')
) AS users_by_country
FROM cte_2
)
SELECT cte_3.users_by_country AS users_by_country FROM cte_3;
[
{
"country": "Argentina",
"users": [
{
"first_name": "Rachel",
"last_name": "Lopez"
}
]
},
{
"country": "Australia",
"users": [
{
"first_name": "Charlie",
"last_name": "Brown"
},
{
"first_name": "Jack",
"last_name": "Jackson"
},
{
"first_name": "Ben",
"last_name": "Taylor"
}
]
},
{
"country": "Brazil",
"users": [
{
"first_name": "Tina",
"last_name": "Perez"
}
]
},
{
"country": "China",
"users": [
{
"first_name": "Wendy",
"last_name": "Chen"
},
{
"first_name": "Xavier",
"last_name": "Wang"
}
]
},
{
"country": "France",
"users": [
{
"first_name": "Eva",
"last_name": "Miller"
},
{
"first_name": "Leo",
"last_name": "Harris"
},
{
"first_name": "Gina",
"last_name": "Walker"
}
]
},
]
DelightQL is a query language that transpiles to SQL. Its syntax draws on logic and functional programming to be both succinct and reusable. It offers the full power of SQL in the guise of a modern programming language.
Features include:
- All SQL features (see language reference, and cheat sheet.)
- Reusable Functions, Views, Higher-order & Rules
- Common Function Expressions
- Tree-grouping
- Pivots & Melts
- Flexible Union Semantics
- Ergonomic Projection Operators
- project out columns
- select columns by regex
- select columns by
- Function and Predicate Composition
- A Sense of Calm
Target SQL
The goal for delightql is to have transpilation targets for all major SQL dialects. Currently, delightql supports SQLite.
Implementation
Delightql is implemented in Rust and uses tree-sitter as part of its compiler front-end. It comes with a CLI for all major flavors of UNIX.