Skip to content

v1.54.0

Choose a tag to compare

@akashc777 akashc777 released this 09 Oct 03:30
· 4 commits to without-ai since this release

Link tables, and add up what's linked

  • A Relation column can link to the rows of another table, or of its own: each deal to its company, each budget line to its vendor, each task to the tasks it waits on. A link shows the linked row's name, its first column, always current. Press it to open that table.
  • Also show these links in … adds a column to the other table showing the links from its side. Link or unlink there, and both sides change. A relation made without it can turn it on later. A private table showing its links in a shared one warns that the column will be seen there.
  • Rollup columns add up the rows a relation links to: sum, average, smallest, largest, earliest, latest, count the rows, count the ticked or unique values, or list them. Formulas can read rollups. Totals and charts group and filter by a linked row's name, and say when a cell shows only some of its links.
  • People who can't open a linked table see its rows as "Private row", and rollups over it don't show its values. A shared link to a table shows other tables' rows the same way.
  • Limits:
    • a cell links to up to 1,000 rows, and shows 100 with a count of the rest;
    • a rollup adds up to 10,000 linked rows a row, and counts up to 100,000;
    • opening a page of a table reads up to 200,000 links and 50,000 linked rows, the first rows first. Cells past that show how many links they have, and rollups and totals over them say they fall short rather than give a wrong number;
    • a table has up to 50 relations to tables and 100 rollups.
  • Links are kept apart from a row's cells, so saving one cell never changes another's links. They change through POST /tables/{id}/rows/{rowId}/links.
  • API:
    • relation config {"relation_target": "table", "table_id": "…", "two_way": true};
    • a new row's link cell links it to the rows it lists, as ids or [{"id": "<row id>"}]; anything that isn't a row of that table is refused. Updating a row leaves its links as they are, so a row written back as it was read changes none of them. Links change through POST /tables/{id}/rows/{rowId}/links. A cell reads back with label, type: "row" and table_id, then a type: "more" count of links past those shown;
    • rollup config {"relation", "field", "aggregate"};
    • GET /tables/{id}/fields;
    • GET /tables/{id}/rows/pick?q=;
    • migration 197.

Fixes

  • A table's live updates carry the changed row's id, not the row. Each open grid fetches it again, as its reader may see it. Tables linking to a row that's renamed or deleted show it within seconds.
  • The server vacuums the links between tables as they grow, which Postgres 12 doesn't do for a table that's only added to, so tables with many links stay quick to open.
  • The formula editor's list of functions reads as one you can open (Show functions). It looked like an empty heading.