README.adoc

January 10, 2026 · View on GitHub

= clara-eql

Generate Clara rules to collect data from EDN Query Language queries.

== Usage

[source,clojure]

(require '[net.eraserhead.clara-eql :as clara-eql])

(clara-eql/defrule test-query :query [:person/first-name :person/last-name {:person/supervisor [:person/uuid]}] :from ?eid :where [EAV (= e ?eid) (= a :person/uuid)] [:test (even? ?eid)])

(defrule foo [clara-eql/QueryResult (= root 42) (= query 'test-query) (= data ?data)] => (println "Data is now: " (pr-str ?data)))

== Assumptions

=== All data is stored in EAV triples, in https://cljdoc.org/d/clyfe/clara-eav/0.1.6/api/clara-eav.eav#EAV[clara_eav.eav.EAV] records

Nothing else from clara-eav is required, but using the same type makes the libraries compatible.

=== Attribute values in the EAV triples are keywords

Well, they don't have to be keywords, specifically, but this library does not handle Datomic-style indirection where a number represents an attribute and a keyword is assigned with a :db/ident property.

=== Many-valued Attributes

The shape of the pull result differs for many-valued attributes. clara-eql assumes these attributes have a fact (->EAV attr-name :db/cardinality :db.cardinality/many).

=== Identity Attributes

Identity attributes can be used for entity references, such as [:person/uuid #uuid "3fec670d-da20-4171-a96d-e5852be05ded"]. clara-eql assumes identity attributes have a fact (->EAV attr-name :db/unique :db.unique/identity).

== License

Copyright © 2019 Jason Felice

This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.

This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.