v0.8.0 Composites & Tx meta data
Composites and Transaction meta data are two new major functionalities added to Molecule.
Merge up to 22 sub-molecules as a Composite. Composite inserts create entities with data of attributes type-checking against each sub-molecule. Sub-molecules don't need to be related. The created entity is what ties it all together which is a core feature of Datomic that sets it apart from table/join-thinking.
An obvious candidate for composites is cross-cutting data that could be applied to any entity of our domain - like Tags. No need anymore to litter all parts of your domain with refs to Tags. Keep your domain namespaces intrinsic and compose instead!
Even transaction meta data can now be applied:
// Insert comma-separated molecules that become one composite molecule
insert(
Article.name.author, Tag.name.weight
)(
// 2 entities/"rows" created
(("Battle of Waterloo", "Ben Bridge"), ("serious", 5)),
(("Best jokes ever", "John Cleese"), ("fun", 3))
)(
// Transaction meta data is saved with the tx entity created
MetaData.submitter_("Brenda Johnson").usecase_("AddReviews")
)
And we can then query the composed molecule:
// Important articles submitted by Brenda Johnson
// In queries we tie composite molecule parts together with `~`
m(Article.name.author ~ Tag.weight.>=(4).tx_(MetaData.submitter_("Brenda Johnson"))).get === List(
(("Battle of Waterloo", "Ben Bridge"), 5)
)