Liking cljdoc? Tell your friends :D

Mutation

All the mutation operations are available under the honeyeql.mutation namespace

(require '[honeyeql.mutation :as hm])

For the given employee schema,

we can perform the following database operations using the HoneyEQL's mutation support as described.

Insert

;; inserting first employee
(hm/insert! db-adapter
            #:employee{:first-name "Brown"
                       :last-name "Tara"})
;; the above expression returns (for postgres)
#:employee{:id 1, :first-name "Brown", :last-name "Tara", :employee-reports-to-id nil}

;; inserting second employee
(hm/insert! db-adapter
            #:employee{:first-name "Lauryn"
                       :last-name "Mario"
                       :employee-reports-to-id 1})
;; it returns (for postgres)
#:employee{:id 2, :first-name "Lauryn", :last-name "Mario", :employee-reports-to-id 1}

Insert Multiple

(hm/insert-multi! db-adapter
            [#:employee{:first-name "Harmon"
                        :last-name "Bernie"
                        :employee-reports-to-id 1}
              #:employee{:first-name "Harold"
                        :last-name "Ambrose"
                        :employee-reports-to-id 2}
              #:employee{:first-name "Bryce"
                        :last-name "Hoeger"
                        :employee-reports-to-id 2}])

;; it returns (for postgres)
(#:employee{:id 3, :first-name "Harmon", :last-name "Bernie", :employee-reports-to-id 1}
 #:employee{:id 4, :first-name "Harold", :last-name "Ambrose", :employee-reports-to-id 2}
 #:employee{:id 5, :first-name "Bryce", :last-name "Hoeger", :employee-reports-to-id 2})

Update

;; (update! db-adapter <data-to-update> <where-condition>)
(hm/update! db-adapter
            #:employee{:first-name "Margaret"}
            #:employee{:id 1})
;; returns
#:next.jdbc{:update-count 1}

;; where-condition can have multiple attributes and it supports only the AND condition
; UPDATE employee SET last_name = 'Adam' WHERE id = 1 AND first_name 
(hm/update! db-adapter
            #:employee{:last-name "Adam"}
            #:employee{:last-name "Tara" :first-name "Margaret"})
;; returns
#:next.jdbc{:update-count 1}

Delete

;; (delete! db-adapter <where-condition>)
(hm/delete! db-adapter
            #:employee {:id 9})
;; like the where-condition in the update! function, it can have multiple attributes and it also supports only the AND condition

Transaction Support

To perform Database transactipn we can make use of the next.jdbc's with-transaction macro along with two functions, db-spec and use-tx from the honeyeql.core namespace.

(jdbc/with-transaction [tx (heql/db-spec db-adapter)]
  (let [tx-aware-db-adapter (heql/use-tx db-adapter tx)]
    (hm/delete! tx-aware-db-adapter {:employee/id 10})
    (hm/delete! tx-aware-db-adapter {:employee/id 11})
    (hm/delete! tx-aware-db-adapter {:employee/id 12})))

Can you improve this documentation?Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close