Skip to content

Instantly share code, notes, and snippets.

@kordano
Last active October 6, 2021 15:30
Show Gist options
  • Save kordano/6ddb664bcabab243ddc1e58beef2c35e to your computer and use it in GitHub Desktop.
Save kordano/6ddb664bcabab243ddc1e58beef2c35e to your computer and use it in GitHub Desktop.
Datahike rule input exception
(require '[datahike.api :as d])
(def schema [{:db/ident :name
:db/cardinality :db.cardinality/one
:db/index true
:db/unique :db.unique/identity
:db/valueType :db.type/string}
{:db/ident :parents
:db/cardinality :db.cardinality/many
:db/valueType :db.type/ref}
{:db/ident :age
:db/cardinality :db.cardinality/one
:db/valueType :db.type/long}])
(def cfg {:store {:backend :mem
:id "sandbox"}
:name "sandbox"
:keep-history? true
:schema-flexibility :write
:attribute-refs? true})
(d/delete-database cfg)
(d/create-database cfg)
(def conn (d/connect cfg))
(d/transact conn {:tx-data schema})
(d/transact conn {:tx-data [{:name "Alice"
:age 25}
{:name "Bob"
:age 30}]})
(d/transact conn {:tx-data [{:name "Charlie"
:age 5
:parents [[:name "Alice"]
[:name "Bob"]]}]})
(def rules
'[[(parent-info ?child ?name ?age)
[?child :parents ?p]
[(ground ["Alice" "Bob"]) [?name ...]]
[?p :name ?name]
[?p :age ?age]]])
(d/q {:query '{:find [?age ?parent-name]
:in [$ ?n %]
:where
[[?child :name ?n]
(parent-info ?child ?parent-name ?age)]}
:args [@conn "Charlie" rules]});; => #{[30 "Bob"] [25 "Alice"]}
(d/q {:query '{:find [?age]
:in [$ ?n %]
:where
[[?child :name ?n]
(parent-info ?child "Alice" ?age)]}
:args [@conn "Charlie" rules]});; => Unhandled clojure.lang.ExceptionInfo
;; Cannot parse binding, expected (bind-scalar | bind-tuple | bind-coll | bind-rel)
;; {:error :parser/binding, :form "Alice"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment