Attributes as table #82
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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
descendantsandancestors.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
symbolfilters, 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
descendantsandancestors, deprecating thetypeargument for both. This doesn't concerntraverse, as the type can be anything because it is returned by a user-defined function.Add a lot more benchmark cases.