sova
sova

Reputation: 5650

getting items by eid from datomic, too few inputs?

So I'm trying to use the entity id to retrieve items recently transacted to the datomic database.

However, when invoking (get-post-by-eid zzzzzzzzz) I get an error

IllegalArgumentExceptionInfo :db.error/too-few-inputs Query expected 2 inputs but received 1  datomic.error/arg (error.clj:57)


(defn get-post-by-eid [eid]
   (d/q '[:find ?title ?content ?tags ?eid
              :in $ ?eid
              :where
              [?eid post/title ?title]
              [?eid post/content ?content]
              [?eid post/tag ?tags]] (d/db conn)))

So I figure my query string must be malformed..

I've been looking at http://www.learndatalogtoday.org/chapter/3 but still not sure where I'm going astray.

Any help is appreciated (=

Upvotes: 0

Views: 225

Answers (1)

levand
levand

Reputation: 8500

Your :in clause specifies that you're expecting two data sources to be passed to the q function. $ ?eid means that you're saying you're going to pass in a database (bound to $), and some other value, which will be bound to ?eid.

Like this:

(defn get-post-by-eid [eid]                  
  (d/q '[:find ?title ?content ?tags ?eid    
         :in $ ?eid                          
         :where                              
         [?eid post/title ?title]            
         [?eid post/content ?content]        
         [?eid post/tag ?tags]]              
       (d/db conn)                           
       eid))  

Otherwise, there's no way for your eid parameter to actually get "into" the query. You have to pass it explicitly, there's no magic there.

Upvotes: 2

Related Questions