Docs
  • 0.38.1latest
  • 0.37.1
  • 0.37.0
  • 0.36.2
  • 0.36.1
  • 0.36.0
  • 0.35.3
  • 0.35.2
  • 0.35.1
  • 0.35.0
  • 0.34.4
  • 0.34.3-beta
  • 0.34.2-beta
  • 0.34.1-beta
  • 0.34.0-beta
  • 0.33.4-beta
  • 0.33.3-beta
  • 0.33.2-beta
  • 0.33.1-beta
  • 0.33.0-beta
  • 0.32.0-beta

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

  • UPDATE over a set. UPDATE t SET … WHERE c and UPDATE t MERGE { … } WHERE c change every record the condition holds for, in one transaction, and answer how many; LIMIT n caps it and RETURN BEFORE / RETURN AFTER answer the records. See Writing safely.
  • Outer joins and more than two sides. LEFT, RIGHT and FULL JOIN keep what nothing matched, and a JOIN b ON … JOIN c ON … joins each side to the rows so far. See Joins.
  • HAVING, count(DISTINCT x) and NULLS FIRST / NULLS LAST. See Conditions.
  • Window functions — row_number(), rank(), dense_rank(), lag, lead, first_value, last_value and the folds — over OVER ([PARTITION BY …] [ORDER BY …]). See Conditions.
  • A read as a value, a name and a half. x IN (SELECT y FROM …), WITH name AS (…), and UNION [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 FIELD and ALTER FIELD … USING. See Definitions.
  • REFERENCES on a TYPE record field: 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 TO and RELEASE SAVEPOINT inside a transaction. See Transactions.

Changed

  • The bound on a set delete is optional. DELETE FROM t WHERE c removes every match; LIMIT n caps it and LIMIT ALL still parses. The WHERE stays required.
  • A new field's DEFAULT reaches the records already there, in the declaration's transaction, so REQUIRED DEFAULT can be added to a populated table.

Fixed

  • Renaming a REQUIRED field (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.