Repository navigation
Release Notes
Patch release on the v2.x line under the support policy: two query data-integrity fixes, for expressions that compared a keyword and a ref to its entity differently from joins (#744), and float-literal rule calls whose -0.0 rows varied between runs (#750), plus checkpoint() deadlocking inside a WriteTransaction (#734). File format is unchanged (v7). No API changes. Upgrading is recommended for every v2.x user who compares entity refs in expressions, passes float constants to rules, or uses WriteTransaction.
Fixed
- A rule call with the float
0.0returns the row of-0.0in every run (#750), backported from v3.0.0 (#545).0.0 == -0.0, as patterns and predicates compare floats, butValue's hash gave the two different hashes, so a join through a hash table paired them only when the process's random hash seed happened to:[:find ?e :where (xval ?e 0.0)]for a rule(xval ?e ?v)returned the entity whose value is-0.0in about one run in twelve and left it out otherwise, with no error.-0.0and0.0now hash alike, so the rule call returns both rows, as[?e :m/x 0.0]does. Every other float hashes as before. Nothing stored was wrong. - An expression's
=and!=equate a keyword with a ref to the entity it names (#744), backported from v3.0.0. Patterns and joins treat the keyword:bobas equal to a ref to the entity:bobnames, but[(= ?g :bob)]compared the two values as they are, so with?gbound to that ref it kept no row and[(!= ?g :bob)]kept the row: the same question answered differently by how the query was written, with no error.=and!=now compare as joins do, in queries, rule bodies,notclauses and binding expressions, against a keyword constant, a keyword value or a boundVal(Ref). A keyword still equals only the same keyword, and<,>,<=and>=on a keyword or a ref are still a type mismatch (no row). checkpointinside aWriteTransactionreturnsINT-001instead of deadlocking (#734), backported from v3.0.0. Called on a thread that holds aWriteTransaction,checkpointwaited on the write lock that the transaction already held, so the thread hung. It now returnsINT-001, asexecuteandbegin_writealready did, and the transaction stays usable.prepareandPreparedQuery::executemake the same check: they could not deadlock, but they ran inside the transaction whileexecuterefused. Present sinceWriteTransactionwas added.
Known issues
- Same-transaction multi-valued facts can read back as one value (#371, #287), a fact retracted and re-asserted in one
WriteTransactionis lost at commit (#477), a later assertion does not replace an earlier valid-time window (#435),save()is not crash-atomic (#374), and a.walfrom a later checkpoint is replayed onto an older.graph(#535); all are fixed in v3.0.0. All v2.x known issues, with affected versions and workarounds, are listed in the pinned issue #421.
Download minigraf 2.0.11
| File | Platform | Checksum |
|---|---|---|
| minigraf-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| minigraf-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| minigraf-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| minigraf-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| minigraf-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |