fix values clause to take multiple sets of values

This commit is contained in:
alice 2013-09-07 01:19:13 +09:00
parent 6f2ef8f6c3
commit 806b9bafd6
3 changed files with 14 additions and 5 deletions

View file

@ -44,7 +44,7 @@
:offset :offset
:modifiers, :merge-modifiers :modifiers, :merge-modifiers
:insert-into :insert-into
:values :values, :merge-values
:update :update
:set :set
:delete-from" :delete-from"

View file

@ -334,11 +334,13 @@
(str "INSERT INTO " (to-sql table))) (str "INSERT INTO " (to-sql table)))
(defmethod format-clause :values [[_ values] _] (defmethod format-clause :values [[_ values] _]
(if (sequential? values) (if (sequential? (first values))
(str "VALUES (" (comma-join (map to-sql values)) ")") (str "VALUES " (comma-join (for [x values]
(str "(" (comma-join (map to-sql x)) ")"))))
(str (str
"(" (comma-join (map to-sql (keys values))) ") VALUES (" "(" (comma-join (map to-sql (keys (first values)))) ") VALUES "
(comma-join (map to-sql (vals values))) ")"))) (comma-join (for [x values]
(str "(" (comma-join (map to-sql (vals x))) ")"))))))
(defmethod format-clause :update [[_ table] _] (defmethod format-clause :update [[_ table] _]
(str "UPDATE " (to-sql table))) (str "UPDATE " (to-sql table)))

View file

@ -168,6 +168,13 @@
([vs] (values nil vs)) ([vs] (values nil vs))
([m vs] (build-clause :values m vs))) ([m vs] (build-clause :values m vs)))
(defmethod build-clause :merge-values [_ m values]
(update-in m [:values] concat values))
(defn merge-values
([vs] (merge-values nil vs))
([m vs] (build-clause :merge-values m vs)))
(defmethod build-clause :update [_ m table] (defmethod build-clause :update [_ m table]
(assoc m :update table)) (assoc m :update table))