From 806b9bafd62893ebc1ff59469921e3ba761326ea Mon Sep 17 00:00:00 2001 From: alice Date: Sat, 7 Sep 2013 01:19:13 +0900 Subject: [PATCH] fix values clause to take multiple sets of values --- src/honeysql/core.clj | 2 +- src/honeysql/format.clj | 10 ++++++---- src/honeysql/helpers.clj | 7 +++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/honeysql/core.clj b/src/honeysql/core.clj index 61bb2bc..c299c50 100644 --- a/src/honeysql/core.clj +++ b/src/honeysql/core.clj @@ -44,7 +44,7 @@ :offset :modifiers, :merge-modifiers :insert-into - :values + :values, :merge-values :update :set :delete-from" diff --git a/src/honeysql/format.clj b/src/honeysql/format.clj index 1977e0e..e6c25f6 100644 --- a/src/honeysql/format.clj +++ b/src/honeysql/format.clj @@ -334,11 +334,13 @@ (str "INSERT INTO " (to-sql table))) (defmethod format-clause :values [[_ values] _] - (if (sequential? values) - (str "VALUES (" (comma-join (map to-sql values)) ")") + (if (sequential? (first values)) + (str "VALUES " (comma-join (for [x values] + (str "(" (comma-join (map to-sql x)) ")")))) (str - "(" (comma-join (map to-sql (keys values))) ") VALUES (" - (comma-join (map to-sql (vals values))) ")"))) + "(" (comma-join (map to-sql (keys (first values)))) ") VALUES " + (comma-join (for [x values] + (str "(" (comma-join (map to-sql (vals x))) ")")))))) (defmethod format-clause :update [[_ table] _] (str "UPDATE " (to-sql table))) diff --git a/src/honeysql/helpers.clj b/src/honeysql/helpers.clj index 96b8995..57967d3 100644 --- a/src/honeysql/helpers.clj +++ b/src/honeysql/helpers.clj @@ -168,6 +168,13 @@ ([vs] (values nil 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] (assoc m :update table))