Update delta atoms—deltas of form
*foo[x]=y—add complexity to LogiQL with little corresponding benefit. Such delta atoms are poorly understood by users, require extra code in the compiler, and are given ambiguous semantics in the Core Reference Manual. We plan to deprecate then remove support for update deltas. This will break some existing code, but we believe user impact will be minimal as updates are infrequently used and can be expressed in terms of upserts.
Deprecation warnings will start with release 3.10.3, and update will be removed in 4.0.
What are update deltas?
Intuitively update atom
*foo[x]=y means insert
(x,y) into functional relation
foo, only if there already exists an entry
foo[x]. That is,
*f[x]=y <- …
may be translated to
^f[x]=y <- f@start[x]=_, ….
Note that, perhaps unintuitively, this means that stage final updates examine predicate state at the beginning of a transaction, not after stage initial.*
We believe that that the deprecation and removal of updates represents a simplification for users. Delta update behavior can be encoded as illustrated above, so all current LogiQL programs can be patched to work after removal. And we believe that few programs will have to change; in a poll of firstname.lastname@example.org, not a single subscriber expressed concern about the proposed deprecation.
*An earlier version of this post had a bug in the description of update semantics. Thanks to Shan Shan for discovering this!