Fork me on GitHub
#datomic
<
2022-03-01
>
jdkealy22:03:49

How can I allow a datomic query to return nil ?

(d/q
     '[:find ?sometimes-this ?sometimes-that ;; sometimes both! 
       :in $ ?user
       :where
       [?user :user/likes ?sometimes-this]
       [?user :user/dislikes ?sometimes-that]
     ] db-conn (:db/id user) )
this query would return nil if a user had never likes nor disliked anything

Joe Lane22:03:34

(d/pull (d/db conn) '[:user/likes :user/dislikes] (:db/id user))

Joe Lane22:03:56

^^ Will return an empty map if neither

jdkealy22:03:40

cool that looks interesting

jdkealy22:03:50

what about if the query is more advanced ?

jdkealy22:03:12

I made a trivial example, but my example is actually like ...

(d/q
     '[:find ?presenter ?co-presenter ;; sometimes both! 
       :in $ ?user
       :where
       [?user :user/classes ?class]
       [?class :class/presenter ?presenter]
       [?class :class/co_presenter ?co-presenter]
     ] db-conn (:db/id user) )

jacob.maine15:03:09

That example can also be achieved with pull, either:

(d/pull db '[:user/classes [:class/presenter :class/co_presenter]]
        (:db/id user))
or:
(d/q '[:find (pull ?user [:user/classes [:class/presenter :class/co_presenter]])
       :in $ ?user]
     db (:db/id user))