Graph::Node
only exists because of our pimped jersey header that supports renaming the attributes during a join (and currently only a join, i.e. no support for other binary ops). If axiom would support Relation#join(other, join_definition)
there would be no need for Graph::Node
. The graph's nodes would be Axiom::Relation
instances and the (directed) edges would continue to be composed of a name, a JoinDefinition
instance and pointers to both source
and target
nodes.
ROM::Relation
instances should be composed of an Axiom::Relation
and a Mapper
. Pushing the mapper to the tuple level renders our current AttributeSet
useless, or rather, i suspect that its functionality will be subsumed in Mapper
. If axiom would support an injectable EvaluatorContext
for operations that accept a block (like #join etc), we should be able to come up with a context that is composed of the axiom relation and the mapper, thus allowing us to use "object land" attribute names inside the block, while still constructing axiom relations that are using the "backend" attribute names.
Graph
should be able to work with either Axiom::Relation
OR ROM::Relation
nodes. It's functionality shouldn't depend on the fact that ROM::Relation
uses an injected mapper. That may or may not be a feature to build upon, it's simply a consequence of the design.