diff --git a/src/honeysql/format.clj b/src/honeysql/format.clj index d43303b..004a640 100644 --- a/src/honeysql/format.clj +++ b/src/honeysql/format.clj @@ -366,15 +366,13 @@ (str "(" (comma-join (map to-sql fields)) ")")) (defmethod format-clause :values [[_ values] _] - (if (map? 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 " - (str "(" (comma-join (map to-sql (vals values))) ")")) - (->> values - (reduce #(conj %1 (str "(" (comma-join (map to-sql %2)) ")")) []) - comma-join - (str "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 :query-values [[_ query-values] _] (to-sql query-values)) diff --git a/test/honeysql/core_test.clj b/test/honeysql/core_test.clj index d79e1e4..f2da41e 100644 --- a/test/honeysql/core_test.clj +++ b/test/honeysql/core_test.clj @@ -60,5 +60,8 @@ (is (= ["VALUES (?, ?), (?, ?)" "foo1" "bar1" "foo2" "bar2"] (sql/format (values [["foo1" "bar1"] ["foo2" "bar2"]])))) + (is (= ["(foo, bar) VALUES (1, ?)" "bar"] + (sql/format (values [{:foo 1 :bar "bar"}])))) + (is (= ["(foo, bar) VALUES (?, ?)" "foo" "bar"] - (sql/format (values {:foo "foo" :bar "bar"}))))) + (sql/format (values [{:foo "foo" :bar "bar"}])))))