Skip to content

Conversation

@VEZY
Copy link
Owner

@VEZY VEZY commented Feb 11, 2026

This PR experiments with locating all node attributes in tables instead of directly into the nodes. This has the benefit of ensuring type stability during traversal with descendants and ancestors.

Each symbol has its own table. Implementation details can be found looking at: Column, SymbolBucket, MTGAttributeStore, NodeAttrRef, ColumnarAttrs, and ColumnarStore.

This PR also implements a faster retrieval of node attributes using a DFS. In essence, it means we can cheaply cache the traversal of nodes when using symbol filters, and re-use that cache to fastly index into the corresponding tables of the symbols. Indexed path is used only for compatible descendants queries (no custom filter_fun, no scale/link, all=true, unbounded recursion), otherwise it falls back to the existing pointer path.

Added inference of data type based on the column for descendants and ancestors, deprecating the type argument for both. This doesn't concern traverse, as the type can be anything because it is returned by a user-defined function.

Add a lot more benchmark cases.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant