05: progressive construction
At the beginning of this tutorial, I told you that add-ents
takes an ent db as an argument:
You may have wondered why the empty ent db {:schema schema}
is used, rather than just directly passing in schema
; why don't we just write this?
The reason the first argument to add-ents
is an ent db is so you can take the return value of add-ents
and pass it in as the first argument to further calls to add-ents
:
Additional calls to add-ents
are additive; they will never alter existing ents, and will only add new ents. The first call, (sm/add-ents {:schema schema} {:topic [[1]]})
, produces a :topic
named :t0
referencing a :user
named :u0
:
That ent db is passed to the next call:
This creates two more topics:
The default naming system picks up where it left off, giving the topic the names :t1
and :t2
. :t1
references the existing user, :u0
, and :t2
references a new user from the :refs
, :hamburglar
. When progressively generating an ent-db, you can expect Specmonstah to behave as if all queries were passed as a single query to a single call of add-ents
.
Everything you've learned up to this point has focused on generating an ent db: you've learned a bit about how to use schemas and queries together to concisely specify what ents to create. You've also learned how to customize the relationships with the :refs
query option.
In the next couple sections, you'll learn about how Specmonstah uses visitation to generate and insert business data.
Last updated