VelesQL Parser-Executor Conformance Matrix
August 22, 2026 ยท View on GitHub
This document lists every VelesQL feature with its parser and executor status. A feature can be Parsed (the grammar + AST accept it) without being Executed (the query engine acts on it at runtime).
Last updated: 2026-08-22 (VelesDB v5.2.0)
Fully Supported (Parsed AND Executed)
| Feature | Parser source | Executor source | Notes |
|---|---|---|---|
SELECT * / named columns | grammar.pest:select_list | query_engine.rs | Full support |
SELECT DISTINCT | grammar.pest:distinct_modifier | query_engine.rs | EPIC-052 US-001 |
FROM <collection> | grammar.pest:from_clause | query_engine.rs | Single collection |
FROM <collection> AS <alias> | grammar.pest:from_clause | query_engine.rs | BUG-8 fix |
WHERE <condition> | grammar.pest:where_clause | search/query/ | Equality, comparison, logical |
WHERE vector NEAR $v | grammar.pest:vector_search | search/query/planner.rs | kNN via HNSW |
WHERE vector SPARSE_NEAR $sv | grammar.pest:sparse_vector_search | search/query/hybrid_sparse.rs | SPLADE/BM42 |
WHERE content MATCH 'term' | grammar.pest:match_expr | search/query/planner.rs | BM25 full-text |
ORDER BY field [ASC|DESC] | ast/select.rs:SelectOrderBy | query_engine.rs | Field + similarity() |
ORDER BY similarity() | ast/select.rs:SimilarityOrderBy | query_engine.rs | EPIC-051 |
LIMIT n | grammar.pest:limit_clause | query_engine.rs | |
OFFSET n | grammar.pest:offset_clause | query_engine.rs | |
INNER JOIN | ast/join.rs:JoinType::Inner | search/query/join.rs | EPIC-031 US-004 |
LEFT JOIN | ast/join.rs:JoinType::Left | search/query/join.rs:192-226 | EPIC-031 US-004 |
RIGHT JOIN | ast/join.rs:JoinType::Right | search/query/join.rs | EPIC-031 US-004 |
FULL JOIN | ast/join.rs:JoinType::Full | search/query/join.rs | EPIC-031 US-004 |
GROUP BY | ast/aggregation.rs:GroupByClause | velesql/aggregator.rs | |
HAVING | ast/aggregation.rs:HavingClause | velesql/aggregator.rs | |
| Aggregate functions | ast/aggregation.rs | velesql/aggregator.rs | COUNT, SUM, AVG, MIN, MAX |
USING FUSION(strategy=...) | ast/fusion.rs:FusionClause | search/query/sparse_dispatch.rs:resolve_fusion_strategy + hybrid_sparse.rs | Honored: RRF, RSF, average, maximum, weighted (RSF/weighted use dense_weight/sparse_weight) |
WHERE vector NEAR_FUSED [...] | grammar.pest:vector_fused_search | search/query/fused_dispatch.rs | Executable multi-vector fusion via multi_query_search; honors rrf/average/maximum (others fall back to RRF). Must be the only vector predicate, AND-able with a metadata filter only |
ALTER COLLECTION ... SET (auto_reindex=...) | ast/ddl.rs | database/ddl_executor.rs:execute_alter_collection | Applies and persists the auto-reindex policy (restored on next open) |
WITH (key=value) hints | ast/with_clause.rs:WithClause | query_engine.rs | ef_search, mode, quantization |
TRAIN QUANTIZER ON <coll> | ast/train.rs | database/training.rs | PQ training |
MATCH (a)-[r]->(b) | ast/mod.rs:MatchClause | search/query/match_exec.rs | Graph traversal |
similarity() function | grammar.pest:similarity_expr | search/query/ | In WHERE + ORDER BY |
IN (list) | grammar.pest:in_expr | search/query/where_eval.rs | Value list matching |
BETWEEN x AND y | grammar.pest:between_expr | search/query/where_eval.rs | Range filtering |
LIKE / ILIKE | grammar.pest:like_expr | search/query/where_eval.rs | Pattern matching |
IS NULL / IS NOT NULL | grammar.pest:is_null_expr | search/query/where_eval.rs | Null checks |
NOW() | grammar.pest:temporal_expr | search/query/where_eval.rs | EPIC-038; current Unix timestamp |
INTERVAL arithmetic | ast/values.rs:IntervalValue | search/query/where_eval.rs | EPIC-038; seconds, minutes, hours, days, weeks, months |
INSERT INTO | ast/dml.rs:InsertStatement | database/query_engine.rs | DML |
UPDATE ... SET | ast/dml.rs:UpdateStatement | database/query_engine.rs | DML |
DELETE FROM | ast/dml.rs:DeleteStatement | database/query_engine.rs | DML |
UNION / UNION ALL | grammar.pest:set_operator, ast/mod.rs:CompoundQuery | search/query/set_operations.rs, database/query_engine.rs | EPIC-040 US-006; dedup by point ID (UNION) or keep all (UNION ALL) |
INTERSECT | grammar.pest:set_operator, ast/mod.rs:SetOperator::Intersect | search/query/set_operations.rs, database/query_engine.rs | EPIC-040 US-006; keep only common point IDs |
EXCEPT | grammar.pest:set_operator, ast/mod.rs:SetOperator::Except | search/query/set_operations.rs, database/query_engine.rs | EPIC-040 US-006; remove right-side IDs from left |
CREATE COLLECTION | grammar.pest:create_collection_stmt, ast/ddl.rs:CreateCollectionStatement | database/query_engine.rs | DDL v3.3; vector, graph, metadata collections |
DROP COLLECTION | grammar.pest:drop_collection_stmt, ast/ddl.rs:DropCollectionStatement | database/query_engine.rs | DDL v3.3; with IF EXISTS support |
INSERT EDGE | grammar.pest:insert_edge_stmt, ast/dml.rs:InsertEdgeStatement | database/query_engine.rs | Graph mutation v3.3 |
DELETE EDGE | grammar.pest:delete_edge_stmt, ast/dml.rs:DeleteEdgeStatement | database/query_engine.rs | Graph mutation v3.3 |
Window functions (ROW_NUMBER(), RANK(), DENSE_RANK()) with OVER ([PARTITION BY ...] [ORDER BY ...]) | grammar.pest:window_item, grammar.pest:over_clause | velesql/window_evaluator.rs | VelesDB v1.13.0 (PR #629); evaluated after DISTINCT, before ORDER BY/LIMIT |
Parsed but NOT Executed
These features have grammar rules and AST representations but no runtime execution path. Queries using them will parse successfully but produce incorrect or empty results at execution time.
| Feature | Parser source | Status | Notes |
|---|---|---|---|
| Correlated subqueries | grammar.pest:subquery_expr, ast/values.rs:Subquery | Parsed, then rejected at validation with V010 (SubqueryNotExecutable). Non-correlated scalar subqueries (e.g. WHERE price > (SELECT AVG(price) FROM products)) are executed: they are evaluated and substituted as literals before validation runs (velesql/validation.rs:reject_subqueries) | EPIC-039 |
MATCH ORDER BY aggregate (no GROUP BY) or bare alias | match_exec/order_by.rs | Parsed, then rejected at execution with VELES-018 (GraphNotSupported). Supported MATCH ORDER BY: similarity(), similarity(field, $v), depth, alias.property, arithmetic over a bare property identifier (e.g. year - 2000) | EPIC-045 |
MATCH ORDER BY in the WASM/browser executor | velesdb-wasm/src/velesql_match_orderby.rs | Reduced subset of the row above: only depth and alias.property are honored. similarity(), similarity(field, $v), arithmetic, and aggregate forms are rejected with an error because the browser MATCH path materializes no vector scores | Core supports the full set; this is a documented WASM-only divergence |
Not Parsed (Not in Grammar)
These SQL features are not in the VelesQL grammar and will produce parse errors.
| Feature | Notes |
|---|---|
MATCH ORDER BY arithmetic over a dotted path (e.g. d.year - 2000) | Parse error; only arithmetic over a bare property identifier (e.g. year - 2000) is accepted |
CTEs (WITH name AS (SELECT ...)) | VelesQL WITH is for query hints, not CTEs |
Subqueries in FROM clause | Only collection names allowed in FROM |
CASE WHEN ... THEN ... END | Not in grammar |
EXISTS / IN (subquery) | Not in grammar |
CREATE TABLE / DDL (SQL-standard) | VelesQL uses CREATE COLLECTION instead (v3.3); SQL CREATE TABLE is not supported |
| Stored procedures / functions | Not applicable |
Conformance Test Coverage
- Parser conformance cases: 134 cases in
conformance/velesql_parser_cases.json - Cross-crate tests:
velesql_parser_conformanceintegration test runs in each crate - Join tests:
search/query/join_tests.rs(374-435) - Set operation parse tests:
velesql/set_operations_tests.rs - Set operation execution tests:
collection/set_operations_execution_tests.rs,search/query/set_operations.rs(unit tests) - Aggregation tests:
velesql/aggregation_tests.rs - DML tests:
velesql/dml_tests.rs - MATCH tests:
search/query/match_exec_tests.rs - DDL parse tests:
velesql/ast_tests.rs(CREATE/DROP COLLECTION) - DDL validation tests:
velesql/validation_tests.rs,velesql/validation_parity_tests.rs - Graph mutation tests:
velesql/dml_tests.rs(INSERT EDGE, DELETE EDGE)