Skip to content

Instantly share code, notes, and snippets.

@Jannis
Created September 9, 2016 16:37
Show Gist options
  • Select an option

  • Save Jannis/06534f881c08ac823d176fca7fde349b to your computer and use it in GitHub Desktop.

Select an option

Save Jannis/06534f881c08ac823d176fca7fde349b to your computer and use it in GitHub Desktop.
(comment
;;;; Non-recursive queries
;; Regular property
(s/conform ::query '[a])
(s/conform ::query '[a b])
(s/conform ::query '[a b c])
;; Link property
(s/conform ::query '[[a _]])
(s/conform ::query '[[a _] [b 1]])
(s/conform ::query '[[a _] [b 1] [c :x]])
;; Join with property source
(s/conform ::query '[{a [b]}])
(s/conform ::query '[{a [b c]}])
(s/conform ::query '[{a [b c]} d])
(s/conform ::query '[{a [b c]} {d [e f]}])
(s/conform ::query '[{a ...}])
(s/conform ::query '[{a 5}])
(s/conform ::query '[{a User}])
;; Join with link source
(s/conform ::query '[{[a _] [b]}])
(s/conform ::query '[{[a 1] [b c]}])
(s/conform ::query '[{[a :x] [b c d]}])
;; Properties
(s/conform ::query '[a [b]])
(s/conform ::query '[a [b c]])
(s/conform ::query '[a [b c] d])
(s/conform ::query '[a [b c] d [e f]])
;; Aliased property
(s/conform ::query '[a :as b])
(s/conform ::query '[a :as b c :as d])
;; Aliased link
(s/conform ::query '[[a _] :as b])
(s/conform ::query '[[a 1] :as b])
(s/conform ::query '[[a :x] :as b])
(s/conform ::query '[[a _] :as b [c _] :as d])
;; Aliased join
(s/conform ::query '[{a [b]} :as c])
(s/conform ::query '[{a [b c]} :as d {e [f g]} :as h])
;; Aliased properties
(s/conform ::query '[a [b :as c]])
(s/conform ::query '[a [b :as c d :as e]])
;; Parameterization
(s/conform ::query '[(a {b c})])
(s/conform ::query '[(a {b c d e})])
;;;; Recursive queries
;; Join with sub-joins
(s/conform ::query '[{users [db [id]
user [name]
{friends [db [id]
user [name]]}]}])
(s/conform ::query '[{users [{friends [{friends [db [id]]}]}]}])
;; Join with sub-links
(s/conform ::query '[{users [db [id] [current-user _]]}])
(s/conform ::query '[{users [user [name]
{[current-user _] [user [name]]}]}])
;; Join with sub-aliases
(s/conform ::query '[{[user 1] [db [id :as db-id]
name :as nm]}]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment