Obecnie pracuję nad migracją mojej aplikacji clojure (z korma) do Datomic framework i byłem w pętli podczas tłumaczenia zapytań. Rozumiem, że zapytania nie są całkowicie elastyczne (w porównaniu do Korma), na przykład chciałbym ocenić klauzule warunkowe wokół różnych zmiennych.Datomic - praca z klauzulą OR
Zważywszy zapytania korma,
(select users
(where (or (and {:first_name [= "user"]}
{:last_name [= "sample"]})
{:email [= "[email protected]"]})))
ten można przekształcić w Datomic, z czymś takim?
[:find ?e
:where (or (and [?u :user/first-name "user"]
[?u :user/last-name "sample"])
[?u :user/email "[email protected]"])
ale nie jest to zalecane sposób wysyłania zapytań (według Datomic Dokumenty), ponieważ wszystkie klauzule stosowane w sposób albo klauzuli musi wykorzystać ten sam zestaw zmiennych. Jak ustawić klauzulę OR wokół różnych zestawów zmiennych?
'(d/q„[(niesprawdzone!): Znaleźć u :? W $ pierwszej nazwa przeszło nazwa? e-mail : gdzie (lub (i [? u: nazwa użytkownika/imię? pierwsza nazwa] [? u: nazwa użytkownika/nazwisko? nazwisko]) [? u: użytkownik/e-mail? ])] ' nie działałoby w takim przypadku, ponieważ zmienne są różne ent –
Zaktualizowałem odpowiedź dla tego scenariusza. –