Repository navigation
v3.4.0 #171
milliondreams
announced in
Announcements
v3.4.0
#171
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
uni-db 3.4.0
Release focus: the bindings a pattern promises, and the name an edge answers to. This is a
small release — three commits on top of 3.3.0 — but both headline items are the same shape as that
release's theme: a surface that returned a plausible-looking answer with nothing between the claim
and the truth.
[r:E]written insideshortestPath(...)or a quantified path pattern parsed fine and was thensilently discarded, so the variable surfaced as
UndefinedVariableat theRETURN— an errorpointing at the wrong line. openCypher and GQL both specify what those bindings mean, so 3.4.0
implements them as group variables rather than refusing them. And a relationship that had been
flushed to Lance reported its type as the literal string
"UNKNOWN"— the type-name path read theL0 write buffers and stopped, while its documented sibling
get_edge_endpointshad always fallenback to storage.
This release covers everything since 3.3.0: 3 commits, 41 files changed,
+6,067 / −384.
One, with a
BREAKING CHANGEfooter on its commit.A quantified pattern's endpoints are the adjacent outer nodes, never its inner variables. Inner
variables are now group variables — lists holding one element per iteration — so reading one as a
node is a type error:
last(a).idreproduces the previous value exactly. The diagnostic names both replacements, so thefailure is a compile-time error with a migration in the message rather than a changed result.
Group variables (openCypher / GQL)
shortestPath/allShortestPathsbind their relationship as a list, matching an ordinaryvariable-length pattern.
offset + i * hops_per_iterin the matched path.qpp_group_bindingsindf_graph/nfa.rsisthe single place those offsets are assigned, beside the
PathNfa::from_qppcycling it mirrors —that adjacency is what keeps the executor's columns and the NFA's per-hop filter slots from
drifting apart.
VariableType::NodeList/EdgeList) rather than an entitytype plus a side-channel flag, so every existing
== VariableType::Nodecomparison excludes alist by construction. This incidentally fixes
WITH r AS rs RETURN size(rs), which previouslylost its list-ness through the alias.
DERIVEhead referencing a group variable now derives one fact per iteration — animplicit
UNWIND. It previously produced a single derived edge pointing at nothing.position you never read still uses the endpoint-only BFS.
EXPLAINreports the chosen mode andany live group bindings.
an empty result.
Silent-wrong-answer fixes
_type_namecame back as"UNKNOWN"from the variable-length paths and""fromshortestPath. The answerwas already being computed and discarded: tier 2 of
resolve_stored_edge_endpointsprobescandidate edge types to recover a flushed edge's orientation, and the type whose adjacency
contains the eid is the edge's type. The same change fixes schemaless traversal, which labelled
every edge of an
[:A|B]pattern with the literal string"A|B"— wrong before a flush as wellas after. The unresolvable-type sentinel is unified on
"", since a real edge type may legally benamed
UNKNOWN.all six path-materializing executors — both VLP paths,
shortestPath,BindFixedPath,BindZeroLengthPathand pattern comprehension — so every property vanished oncethe entity was flushed. They now come from a batched storage-backed pre-fetch,
EntityPropertyCache.[e IN r | e.tag]) no longer failsoutright. A name that is not a literal struct field compiled to an untyped
ScalarValue::Null,which the list encoder cannot encode; it now resolves through the properties blob via the
indexUDF, with a typed null for a genuine miss.
warning instead of silently returning an incomplete result.
Internal
The "resolve the type name, resolve the stored direction, append" idiom had been copy-pasted at six
sites and the group-variable work had just added a seventh; they now share
common::append_traversed_edgetaking a bundledEdgeAppendCtx. Two sites deliberately keep theirown code with a comment saying why.
CI
Two
ci.ymlgates were repaired. Both were broken by the group-variable change and neither runs inpr.yml— they exist only in the post-merge suite, so that PR merged green:PropertyManagerthat could not resolve because thetype lives in
uni-storeand is not imported into the referring module;release-guards, on a stale generated Python symbol reference — auri()stub was addedwithout regenerating the page.
check_doc_symbols.pystayed green throughout, because it onlyverifies that documented methods exist in the
.pyi, never the reverse direction.Upgrading
cargo update -p uni-db/pip install -U uni-db. The only migration is the quantified-patternendpoint change above, and it fails at compile time with the replacement in the message.
This discussion was created from the release v3.4.0.
All reactions