Fork me on GitHub
#xtdb
<
2022-03-05
>
Ivan Fedorov11:03:33

Can I do queries with a variable attribute name? like

(defn pull-by [node query-map]
  (let [[key0 val0, :as entry0] (first query-map)]
    (prn ::kv key0 val0)
    (ffirst
      (xt/q
        (xt/db node)
        '{:find  [(pull ?e [*])]
          :in    [attr-name attr-val]
          :where [[?e attr-name attr-val]]}
        key0 val0))))

refset12:03:47

Nope, XT requires all attributes to be known ahead of time for query compilation. You can however just generate various queries dynamically as needed (compilation overheads are often negligible):

(defn pull-by [node query-map]
  (let [[key0 val0, :as entry0] (first query-map)]
    (prn ::kv key0 val0)
    (ffirst
      (xt/q
        (xt/db node)
        {:find  '[(pull ?e [*])]
         :in    '[attr-val]
         :where [['?e key0 'attr-val]]}
        val0))))

❤️ 1