This matrix describes the current SQL path used by spiral sql and
SpiralSession::sql_statement. The parser may accept additional syntax before
the binder rejects it.
| Feature | Status | Notes |
|---|---|---|
SELECT | Supported | One FROM relation or left-deep join chain, one table function, or no FROM. |
DuckDB-style FROM-first query | Supported | FROM t SELECT a WHERE b. |
TABLE name | Supported | Resolves a registered table relation. |
VALUES | Supported | Literal rows only; output columns are column1, column2, and so on. |
| Table references | Supported | Registered relation catalog entries. In the SQL REPL, local .open and schema-created tables live under the memory catalog. |
| Table aliases | Supported | Catalog table aliases do not support column alias lists. CTE definitions, derived tables, and CTE references can rename output columns. |
| Table functions | Supported | Registered source functions and logical relation functions; positional and named arguments are bound, but each function owns its own argument contract. |
| Metadata table functions | Supported | spql.meta.table_functions, source_functions, scalar_functions, aggregate_functions, extension_types, and copy_formats. |
| Local file table functions | Supported | spql.vortex.read, spql.arrow.read_ipc, spql.parquet.read; path arguments must be literal strings. |
| Hugging Face handle function | Supported | hf.dataset returns one provenance/handle row; it does not fetch Hub rows yet. |
WHERE | Supported | Predicate must bind to boolean. |
| Projection expressions | Supported | Column references, scalar expressions, aliases, and unqualified *. |
| Catalog child projection traversal | Supported for registered relationship edges | Multipart projection paths can auto-join child relations when the catalog exposes compatible edges. |
| Qualified wildcard | Not yet bound | Wildcard options such as EXCLUDE, REPLACE, and RENAME are rejected. |
GROUP BY | Supported | Field references and scalar expressions. GROUP BY ALL is rejected. |
| Aggregates | Supported | Direct aggregate calls in projection and aggregate calls in HAVING; count(*) is supported. |
| Aggregate nested projection expressions | Not yet bound | sum(x) + 1 in projection is rejected; use a derived table or CTE. |
HAVING | Supported | Aggregate queries only. |
ORDER BY | Supported | Output columns and scalar expressions. Without LIMIT, only ascending NULLS FIRST ordering is supported. |
ORDER BY plus finite LIMIT | Supported | Lowers to Top-K and supports descending order and null placement. |
LIMIT / OFFSET | Supported | Integer literals only. |
| Scalar function calls | Supported | Catalog-resolved calls with positional or named arguments. |
| Async scalar calls | Supported | Supported in scalar relational contexts; currently executed sequentially per morsel. |
| Function modifiers | Not yet bound | Function parameters, DISTINCT, FILTER, call-level ORDER BY, and OVER are rejected. |
| Casts | Supported | Primitive, decimal, and registered extension dtype factory targets; TRY_CAST is rejected. |
Searched CASE | Partial | One WHEN branch plus required ELSE. |
BETWEEN, IS NULL, IS NOT NULL | Supported | NOT BETWEEN rewrites through NOT; other IS predicates are rejected. |
EXPLAIN | Supported | Text and Graphviz formats. |
EXPLAIN ANALYZE | Supported | Text format. |
CREATE VIEW | Supported | Binds the query immediately and stores the bound logical plan in the session catalog. |
CREATE TABLE name AS query | Supported | Materializes the query result into a session-local in-memory table. |
CREATE TABLE name (...) | REPL-local | In-memory tables only. |
INSERT | REPL-local | Literal VALUES into in-memory tables. |
COPY TO | Supported | Local file targets; Vortex by default, Arrow IPC when the CLI Arrow plugin is registered. |
SET trace | Supported | trace, trace.output, trace.level, and trace.next. |
USE namespace | Supported | USE CATALOG, USE PROJECT, and USE DATASET. |
| Explicit SQL joins | Partial | Left-deep INNER JOIN ... ON chains over field-reference equality predicates. USING, NATURAL, outer/semi/anti joins, residual ON filters, computed join keys, duplicate output field names, and duplicate join aliases are rejected. |
| CTEs | Supported | Non-recursive CTEs are bound inline. Recursive CTEs are rejected. |
| Derived tables | Supported | Non-lateral subqueries in FROM are bound inline. Lateral derived tables are rejected. |
DISTINCT | Not yet bound | Parser conversion exists, binder rejects distinct select. |
| Set operations | Not yet bound | Parser conversion exists, binder rejects set operations. |
QUALIFY | Not yet bound | Rejected. |
| Window functions | Not yet bound | Function OVER is rejected. |
| Subquery expressions | Not yet bound | EXISTS, scalar subqueries, and IN (SELECT ...) are represented but rejected. |
LIKE and ILIKE | Supported | Plain and NOT forms bind to the Vortex LIKE kernel; ANY, ESCAPE, SIMILAR TO, and RLIKE are not supported. |
| Tuples, arrays | Not yet bound | Rejected by scalar expression binding. |
Statement boundaries
The REPL accepts one SQL statement per submission. End SQL with ;:
SELECT 1;Do not submit two statements at once:
SELECT 1; SELECT 2;That returns expected one statement.
Last updated on