diff --git a/src/honeysql/format.clj b/src/honeysql/format.clj index b42b020..3533230 100644 --- a/src/honeysql/format.clj +++ b/src/honeysql/format.clj @@ -189,6 +189,7 @@ :limit 200 :offset 210 :values 220 + :returning 225 :query-values 230}) (def clause-store (atom default-clause-priorities)) @@ -366,14 +367,20 @@ (defmethod format-clause :default [& _] "") -(defmethod format-clause :select [[_ fields] sql-map] - (str "SELECT " +(defn- select-fields [keyword fields sql-map] + (str keyword " " (when (:modifiers sql-map) (str (space-join (map (comp string/upper-case name) (:modifiers sql-map))) " ")) (comma-join (map to-sql fields)))) +(defmethod format-clause :select [[_ fields] sql-map] + (select-fields "SELECT" fields sql-map)) + +(defmethod format-clause :returning [[_ fields] sql-map] + (select-fields "RETURNING" fields sql-map)) + (defmethod format-clause :from [[_ tables] _] (str "FROM " (comma-join (map to-sql tables)))) diff --git a/test/honeysql/format_test.clj b/test/honeysql/format_test.clj index 1a7ee40..de2a53f 100644 --- a/test/honeysql/format_test.clj +++ b/test/honeysql/format_test.clj @@ -33,3 +33,7 @@ "INSERT INTO foo SELECT bar FROM baz")) (is (= (format-clause (first {:insert-into [[:foo [:a :b :c]] {:select [:d :e :f] :from [:baz]}]}) nil) "INSERT INTO foo (a, b, c) SELECT d, e, f FROM baz"))) + +(deftest returning + (is (= (format-clause (first {:returning [:*]}) nil) + "RETURNING *")))