SQL and execution
What Kaveon Engine SQL can execute today, with the standard it holds itself to: a feature counts only when parsing, semantics, physical execution, distributed fragments, tests, and documentation all agree.
Queries and projection
Projection is strict: unknown or duplicated columns are an error rather than a silent pass-through. Tables resolve as catalog.schema.table, or unqualified against the session default.
SELECT region, plan, total
FROM warehouse.default.orders
WHERE total > 500 AND region <> 'Asia'
ORDER BY total DESC NULLS LAST
LIMIT 20;ORDER BY supports multiple keys, per-key direction, and explicit null placement. A LIMIT directly above a sort is fused into a TopN operator rather than sorting the whole input.
Aggregation
SELECT region,
count(*) AS orders,
sum(total) AS revenue,
avg(total) AS avg_order,
count(DISTINCT plan) AS plans,
sum(DISTINCT total) AS distinct_total
FROM orders
GROUP BY region
HAVING sum(total) > 1000
ORDER BY revenue DESC;SUM, COUNT, AVG, MIN, MAX and COUNT(DISTINCT …) all execute, locally and distributed. Distributed aggregation is partial/final: workers emit partial states that the coordinator merges, so AVG is carried as a weighted state and DISTINCT as an exact mergeable state rather than being recomputed.
Joins
SELECT c.region, count(*) AS orders
FROM orders o
JOIN customers c ON o.customer_id = c.id
GROUP BY c.region;INNER, LEFT, RIGHT, FULL and CROSS joins execute locally with qualified relation aliases. Distributed INNER equi-joins repartition both sides by hash; a broadcast build side is used when the planner selects it. Broader representative distributed evidence for outer and cross joins now passes; broader skew and failure qualification remains an alpha gate. Join conditions must be equalities — general predicates are not yet supported as join conditions, though they work in WHERE.
Window functions
SELECT region,
plan,
total,
row_number() OVER (PARTITION BY region ORDER BY total DESC) AS rank_in_region,
lag(total) OVER (PARTITION BY region ORDER BY ordered) AS prev_total,
sum(total) OVER (PARTITION BY region) AS region_total
FROM orders;ROW_NUMBER, RANK, DENSE_RANK, LAG and LEAD are available, as is any supported aggregate used with OVER, with PARTITION BY and ORDER BY.
Set operations
SELECT region FROM orders_2025
UNION ALL
SELECT region FROM orders_2026;
SELECT region FROM orders INTERSECT SELECT region FROM targets;
SELECT region FROM orders EXCEPT SELECT region FROM excluded;Expressions and functions
| Group | Available |
|---|---|
| Conditional | CASE WHEN … THEN … ELSE … END, COALESCE |
| Comparison | BETWEEN, IN (…), LIKE, ILIKE, IS [NOT] NULL |
| Numeric | arithmetic with numeric coercion, ROUND, ABS |
| String | UPPER, LOWER, SUBSTRING, concatenation |
| Date and time | EXTRACT, DATE_TRUNC, DATE_PART, TO_CHAR, NOW, CURRENT_DATE, CURRENT_TIMESTAMP |
| Casting | CAST(x AS type) |
SELECT date_trunc('month', ordered) AS month,
extract(year FROM ordered) AS yr,
upper(region) AS region,
CASE WHEN total > 500 THEN 'large' ELSE 'small' END AS bucket
FROM orders
WHERE ordered >= current_date - 90;Not generally executable yet
- Arbitrary scalar and correlated subqueries; supported decorrelated forms are limited to the tested binder paths.
- Non-equality join conditions.
- Data-changing DML such as
INSERT,UPDATE,DELETE, andMERGE. Catalog DDL is supported through the Engine catalog surface. - Comprehensive decimal and date/time edge-case behavior.
How capability is claimed
Kaveon does not publish an ANSI SQL conformance percentage, because it has no conformance corpus to back one. A feature is listed here only once its parser, operator, and distributed-fragment path pass together on dev. Work in progress in a branch is not a capability claim.
To check what your build actually does rather than trusting this page, run the statement — a planning failure is explicit:
kaveon --local --data-dir /data/warehouse -e "SELECT row_number() OVER (ORDER BY total) FROM orders LIMIT 1"