项目作者: lab-79

项目描述 :
Union and intersection for Datomic Pull syntax
高级语言: Clojure
项目地址: git://github.com/lab-79/datomic-pullups.git
创建时间: 2017-02-21T15:22:26Z
项目社区:https://github.com/lab-79/datomic-pullups

开源协议:MIT License

下载


datomic-pullups

Merge Datomic Pull syntax via union and intersection.

Clojars Project
Build Status
codecov
CHANGELOG

Usage

  1. (require '[lab79.datomic-pullups :as dp])

Given two pull patterns, e.g.:

  1. (def pull1 [:foo :bar])
  2. (def pull2 [:foo :qux :cow])

We can get the union of them:

  1. (dp/compose-pull-patterns [pull1 pull2])
  2. ;;=>
  3. (:foo :bar :qux :cow)

We can also get the intersection:

  1. (dp/intersect-pull-patterns pull1 pull2)
  2. ;;=>
  3. [:foo]

It works on deeply nested patterns too:

  1. ;; union
  2. (dp/compose-pull-patterns
  3. [[{:user/access-groups
  4. [{:access-group/members
  5. [:person.id/ssn
  6. {:person/name [:person.name/family]}]}]}]
  7. [{:user/access-groups
  8. [{:access-group/members
  9. [{:person/name [:person.name/given]}]}]}]])
  10. ;; =>
  11. (#:user{:access-groups
  12. (#:access-group{:members
  13. (:person.id/ssn #:person{:name (:person.name/family :person.name/given)})})})
  14. ;; intersection
  15. (dp/intersect-pull-patterns
  16. [{:user/access-groups
  17. [{:access-group/members
  18. [:person.id/ssn
  19. {:person/name [:person.name/given :person.name/family]}]}]}]
  20. [{:user/access-groups
  21. [{:access-group/members
  22. [{:person/name [:person.name/given]}]}]}])
  23. ;; =>
  24. [#:user{:access-groups
  25. [#:access-group{:members
  26. [#:person{:name [:person.name/given]}]}]}]

See the tests for more examples.

Limitations

It does not currently support the full range of Datomic syntax:

  • does not explicitly support *

Limitations are captured in commented-out tests.

License

Copyright © 2017 Lab79, Inc.

Distributed under the MIT License.