Ошибка возврата карты вместо вектора с использованием Datomic - PullRequest
2 голосов
/ 03 октября 2019

Я делаю какой-то запрос в Datomic, используя Clojure, я пытаюсь вернуть карту с ключами вместо вектора, если я не пытаюсь вернуть карту с ключевым словом ": keys" в запросе itработает отлично.

Я пытался иметь одинаковые и разные имена между ключами: find и:. Если я уберу строку: keys ниже, она будет работать нормально.

Я использую [org.clojure / clojure "1.10.0"] с [com.datomic / client-pro "0.8.28"].

(def get-links
        '[:find ?e ?url ?description ?createdat ?order ?postedby
          :keys e url description createdat order postedby
          :in $ ?filter ?skip ?skip-plus-first
          :where [?e :link/url  ?url]
                  [?e :link/description ?description]
                  [?e :link/createdat ?createdat]
                  [?e :link/postedby ?e2]
                  [?e :link/order ?order]
                  [?e2 :user/name ?postedby]
                  [(.contains ?url ?filter)]
                  [(> ?order ?skip) ]
                  [(<= ?order ?skip-plus-first)]])

Вот как я это называю:

(d/q get-links db filter skip (+ first skip))

Точная ошибка: Ошибка выполнения (ExceptionInfo) в datomic.client.api.async / ares (async. clj: 56).

"Аргумент: keys in: find не является переменной"

Ниже приведены примеры Datomic в их документах.

[:find ?artist-name ?release-name
 :keys artist release
 :where [?release :release/name ?release-name]
 [?release :release/artists ?artist]
 [?artist :artist/name ?artist-name]]

1 Ответ

2 голосов
/ 03 октября 2019

Я думаю, что вы используете старую версию клиента, которая еще не знает опцию :keys.

...