#database #clojure
Вопрос:
Учитывая следующую настройку и следуя руководству по EQL: https://edn-query-language.org/eql/1.0.0/specification.html#_recursive_queries
Я получаю ошибку, если пытаюсь использовать ...
неограниченную опцию при использовании API pull query
за пределами API.
(ns sample.xtdb-testing
(:require [xtdb.api :as xt]))
(def sample [{:xt/id 1
:item/name "Salt"}
{:xt/id 2
:item/name "Pepper"}
{:xt/id 3
:item/name "Spicy Sauce"
:composite/contains [100 101 1000]}
{:xt/id 4
:item/name "Master Sauce"
:composite/contains [102]}
{:xt/id 5
:item/name "Chorizo Wrap"
:composite/contains [103]}
{:xt/id 6
:item/name "Chorizo Family Pack"
:composite/contains [104]}
{:xt/id 100
:recipe-line-item/quantity 20
:composite/contains 1}
{:xt/id 101
:recipe-line-item/quantity 21
:composite/contains 2}
{:xt/id 102
:recipe-line-item/quantity 22
:composite/contains 3}
{:xt/id 103
:recipe-line-item/quantity 23
:composite/contains 4}
{:xt/id 104
:recipe-line-item/quantity 24
:composite/contains 5}])
(def node (xt/start-node {}))
(xt/submit-tx node (for [doc sample]
[:xtdb.api/put doc]))
(xt/sync node)
;; This doesn't work
(xt/pull (xt/db node) [* {:composite/contains ...]}] 6)
;; This works
(xt/q (xt/db node)
'{:find [(pull ?eid [* {:composite/contains ...}])]
:where [[?eid :item/name "Chorizo Family Pack"]]})
Ответ №1:
Это просто нужно было процитировать, да. Действует очаровательно.
(xt/pull (xt/db node) '[* {:composite/contains ...]}] 6)
Комментарии:
1. Примечание: вы размещаете вопрос о xtdb и ссылку на EQL. EQL-это спецификация, не каждая реализация EQL поддерживает все спецификации. Например, у pathom есть некоторые ограничения в отношении рекурсивных запросов.