This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-06-19
Channels
can i pass a rule name into a query as an argument without a macro?
(d/q '{:find [?player]
:in [$ % ?rule-name ?player-name]
:where [[?player :player/name ?player-name]
(?rule-name ?player)]}
db rules 'is-player "player1")
Execution error (IllegalArgumentException) at datomic.core.datalog/resolve-id (datalog.clj:330).
Cannot resolve key: is-player
Use clojure to construct the query as data
(defn query-players
[db rules player-name wants-is-player-rule?]
(->
(cond->
'{:find [?player]
:in [$ % ?player-name]
:where [[?player :player/name ?player-name]]}
wants-is-player-rule? (update :where conj '(?is-player ?player)))
(d/q db rules player-name)))
(query-players (d/db conn) the-rules "player1" true)
Can you rely upon the Datomic Cloud endpoint address always following the format:
?
Oh interesting. When does it change at the moment? What’s the migration strategy to go from one format to another?
At the moment it doesn't, but you asked if you can rely on the endpoint address "ALWAYS" following that format.
It’s just a different string. What if the endpoint had a uuid in it? I’m not sure what you mean by “safely”.
If it were to change, client applications would need to know about which endpoint to point to. By safely I mean informing the client application which endpoint it should use before and after the switch.
Statically defined string at startup. Seems like a switch of that endpoint would be require application downtime.
Doubtful. That statement is only true because you aren’t using a mechanism to dynamically update that endpoint and the datomic client using it.
Imagine switching the query groups your client applications point to with zero downtime. How would you do it?