Improve insert into support

This commit is contained in:
Sean Corfield 2020-09-28 12:12:40 -07:00
parent 534401e5d6
commit 0706d0b7ba

View file

@ -15,7 +15,7 @@
(def ^:private default-clause-order (def ^:private default-clause-order
"The (default) order for known clauses. Can have items added and removed." "The (default) order for known clauses. Can have items added and removed."
[:with :with-recursive :intersect :union :union-all :except [:with :with-recursive :intersect :union :union-all :except :except-all
:select :insert-into :update :delete :delete-from :truncate :select :insert-into :update :delete :delete-from :truncate
:columns :set :from :columns :set :from
:join :left-join :right-join :inner-join :outer-join :full-join :join :left-join :right-join :inner-join :outer-join :full-join
@ -211,23 +211,24 @@
(format-selects k [xs])) (format-selects k [xs]))
(defn- format-insert [k table] (defn- format-insert [k table]
;; table can be just a table, a pair of table and statement, or a
;; pair of a pair of table and columns and a statement (yikes!)
(if (sequential? table) (if (sequential? table)
(if (sequential? (first table)) (cond (sequential? (first table))
(let [[[table cols] statement] table (let [[[table cols] statement] table
[sql & params] (format-dsl statement)] [sql & params] (format-dsl statement)]
(into [(str (sql-kw k) " " (format-entity-alias table) (into [(str (sql-kw k) " " (format-entity-alias table)
" (" " ("
(str/join ", " (map #'format-entity-alias cols)) (str/join ", " (map #'format-entity-alias cols))
") " ") "
sql)] sql)]
params)) params))
(let [[table statement] table (map? (second table))
[sql & params] (format-dsl statement)] (let [[table statement] table
(into [(str (sql-kw k) " " (format-entity-alias table) [sql & params] (format-dsl statement)]
" " sql)] (into [(str (sql-kw k) " " (format-entity-alias table)
params))) " " sql)]
params))
:else
[(str (sql-kw k) " " (format-entity-alias table))])
[(str (sql-kw k) " " (format-entity-alias table))])) [(str (sql-kw k) " " (format-entity-alias table))]))
(defn- format-join [k [j e]] (defn- format-join [k [j e]]