Skip to content

Logo

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.

Source

Right here.