Workaround korma/fields variadic arguments
Korma is one of most popular Clojure SQL library.
As i started refactoring repeating parts of my data models into own namespace models.helpers
, i encountered one weaknesses of its DSL - [korma.core/fields](https://github.com/korma/Korma/blob/v0.3.2/src/korma/core.clj#L202)
uses variadic arguments for field's name, which makes it impossible to use it in high-level functions or compose with threading macros (->, ->>).
Therefore I wrote a little macro, which packs a list of fieldnames & aliases into korma.core/fields
variadic arguments.
;; helper macro
(defmacro only-fields
[query fields]
`(let [field-list# (list* ~fields)
fargs# (cons ~query field-list#)]
(apply korma.core/fields fargs#)))
;; helper function
(defn get-rows
;; this function returns all fields
([tbl-entity row-selectors]
(korma/select tbl-entity
(korma/where row-selectors)))
;; this one accepts field selector as 3rd argument
([tbl-entity row-selectors fields]
(korma/select tbl-entity
(only-fields fields)
(korma/where row-selectors))))
;;usage
(defentity users)
(get-rows users [:firstname :lastname :gender [:lang :language]])
(get-rows users ["*"])
PS: i recommend to use Yesql as Clojure SQL library, because Korma seems to be retiring and SQL itself is already DSL, S-EXPR just adds extra noise.
Written by Tim Gluz
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Clojure
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#