add support for insert, update and delete queries
This commit is contained in:
parent
730706fca8
commit
6f2ef8f6c3
3 changed files with 63 additions and 3 deletions
|
|
@ -42,7 +42,12 @@
|
||||||
:having, :merge-having
|
:having, :merge-having
|
||||||
:limit
|
:limit
|
||||||
:offset
|
:offset
|
||||||
:modifiers, :merge-modifiers"
|
:modifiers, :merge-modifiers
|
||||||
|
:insert-into
|
||||||
|
:values
|
||||||
|
:update
|
||||||
|
:set
|
||||||
|
:delete-from"
|
||||||
[& clauses]
|
[& clauses]
|
||||||
(let [[base clauses] (if (map? (first clauses))
|
(let [[base clauses] (if (map? (first clauses))
|
||||||
[(first clauses) (rest clauses)]
|
[(first clauses) (rest clauses)]
|
||||||
|
|
|
||||||
|
|
@ -147,8 +147,8 @@
|
||||||
|
|
||||||
(def clause-order
|
(def clause-order
|
||||||
"Determines the order that clauses will be placed within generated SQL"
|
"Determines the order that clauses will be placed within generated SQL"
|
||||||
[:select :from :join :left-join :right-join :where :group-by :having
|
[:select :insert-into :update :delete-from :set :from :join :left-join :right-join :where :group-by :having
|
||||||
:order-by :limit :offset])
|
:order-by :limit :offset :values])
|
||||||
|
|
||||||
(def known-clauses (set clause-order))
|
(def known-clauses (set clause-order))
|
||||||
|
|
||||||
|
|
@ -329,3 +329,23 @@
|
||||||
|
|
||||||
(defmethod format-clause :offset [[_ offset] _]
|
(defmethod format-clause :offset [[_ offset] _]
|
||||||
(str "OFFSET " (to-sql offset)))
|
(str "OFFSET " (to-sql offset)))
|
||||||
|
|
||||||
|
(defmethod format-clause :insert-into [[_ table] _]
|
||||||
|
(str "INSERT INTO " (to-sql table)))
|
||||||
|
|
||||||
|
(defmethod format-clause :values [[_ values] _]
|
||||||
|
(if (sequential? values)
|
||||||
|
(str "VALUES (" (comma-join (map to-sql values)) ")")
|
||||||
|
(str
|
||||||
|
"(" (comma-join (map to-sql (keys values))) ") VALUES ("
|
||||||
|
(comma-join (map to-sql (vals values))) ")")))
|
||||||
|
|
||||||
|
(defmethod format-clause :update [[_ table] _]
|
||||||
|
(str "UPDATE " (to-sql table)))
|
||||||
|
|
||||||
|
(defmethod format-clause :set [[_ values] _]
|
||||||
|
(str "SET " (comma-join (for [[k v] values]
|
||||||
|
(str (to-sql k) " = " (to-sql v))))))
|
||||||
|
|
||||||
|
(defmethod format-clause :delete-from [[_ table] _]
|
||||||
|
(str "DELETE FROM " (to-sql table)))
|
||||||
|
|
|
||||||
|
|
@ -154,3 +154,38 @@
|
||||||
m
|
m
|
||||||
(update-in m [:modifiers] concat (collify ms))))
|
(update-in m [:modifiers] concat (collify ms))))
|
||||||
|
|
||||||
|
(defmethod build-clause :insert-into [_ m table]
|
||||||
|
(assoc m :insert-into table))
|
||||||
|
|
||||||
|
(defn insert-into
|
||||||
|
([table] (insert-into nil table))
|
||||||
|
([m table] (build-clause :insert-into m table)))
|
||||||
|
|
||||||
|
(defmethod build-clause :values [_ m values]
|
||||||
|
(assoc m :values values))
|
||||||
|
|
||||||
|
(defn values
|
||||||
|
([vs] (values nil vs))
|
||||||
|
([m vs] (build-clause :values m vs)))
|
||||||
|
|
||||||
|
(defmethod build-clause :update [_ m table]
|
||||||
|
(assoc m :update table))
|
||||||
|
|
||||||
|
(defn update
|
||||||
|
([table] (update nil table))
|
||||||
|
([m table] (build-clause :update m table)))
|
||||||
|
|
||||||
|
(defmethod build-clause :set [_ m values]
|
||||||
|
(assoc m :set values))
|
||||||
|
|
||||||
|
;; short for sql set, to avoid name collision with clojure.core/set
|
||||||
|
(defn sset
|
||||||
|
([vs] (values nil vs))
|
||||||
|
([m vs] (build-clause :set m vs)))
|
||||||
|
|
||||||
|
(defmethod build-clause :delete-from [_ m table]
|
||||||
|
(assoc m :delete-from table))
|
||||||
|
|
||||||
|
(defn delete-from
|
||||||
|
([table] (delete-from nil table))
|
||||||
|
([m table] (build-clause :delete-from m table)))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue