Skip to content

Instantly share code, notes, and snippets.

@snusnu
Created June 5, 2013 12:39
Show Gist options
  • Save snusnu/5713570 to your computer and use it in GitHub Desktop.
Save snusnu/5713570 to your computer and use it in GitHub Desktop.

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.

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