0.38.1 — 2026-10-23
TessariDB 0.38.1, released 2026-10-23 (with 0.38.0): set UPDATE, an optional delete bound, outer and n-way joins, HAVING, UNION, INSERT … SELECT, count(DISTINCT), NULLS FIRST/LAST, TRUNCATE and renames, WITH, window functions, SAVEPOINT and REFERENCES.
This page lists what 0.38.1, released on 2026-10-23, changed against 0.37.1 — the language additions of 0.38.0 and one fix. 0.38.0 was tagged but never published as an image, so 0.38.1 is the first build carrying them. Each released version keeps its own copy of the documentation, so choosing an older version in the version picker shows what that version changed. The complete history is the CHANGELOG.
It adds to the language what people coming from SQL reach for first. The wire protocol and the
on-disk format are the same as in 0.37.1, so a node moves between the two by changing the image tag;
a store that declared a REFERENCES field opens under 0.37.1 too, which then does not enforce it.
Added
UPDATEover a set.UPDATE t SET … WHERE candUPDATE t MERGE { … } WHERE cchange every record the condition holds for, in one transaction, and answer how many;LIMIT ncaps it andRETURN BEFORE/RETURN AFTERanswer the records. See Writing safely.- Outer joins and more than two sides.
LEFT,RIGHTandFULL JOINkeep what nothing matched, anda JOIN b ON … JOIN c ON …joins each side to the rows so far. See Joins. HAVING,count(DISTINCT x)andNULLS FIRST/NULLS LAST. See Conditions.- Window functions —
row_number(),rank(),dense_rank(),lag,lead,first_value,last_valueand the folds — overOVER ([PARTITION BY …] [ORDER BY …]). See Conditions. - A read as a value, a name and a half.
x IN (SELECT y FROM …),WITH name AS (…), andUNION [ALL],INTERSECT,EXCEPT. See Reading from a read. INSERT INTO t (a, b) SELECT …in one transaction. See Records.TRUNCATE,ALTER TABLE … RENAME TO,RENAME FIELDandALTER FIELD … USING. See Definitions.REFERENCESon aTYPE recordfield: a write must name a record the table holds, and a delete there is refused, cascades or unsets the field (ON DELETE). See Definitions.SAVEPOINT,ROLLBACK TOandRELEASE SAVEPOINTinside a transaction. See Transactions.
Changed
- The bound on a set delete is optional.
DELETE FROM t WHERE cremoves every match;LIMIT ncaps it andLIMIT ALLstill parses. TheWHEREstays required. - A new field's
DEFAULTreaches the records already there, in the declaration's transaction, soREQUIRED DEFAULTcan be added to a populated table.
Fixed
- Renaming a
REQUIREDfield (ALTER TABLE t RENAME FIELD a TO b) keeps the requirement on the new name instead of refusing every record that holds the field. - The console's Data list names a topic as a topic rather than as a schemaless table. See The console.