Add support for MySQL REPLACE INTO

This commit is contained in:
elenius 2019-03-25 13:59:30 -07:00
parent cd5824a126
commit 1373867f5c
2 changed files with 17 additions and 0 deletions

View file

@ -216,6 +216,7 @@
:union-all 45 :union-all 45
:select 50 :select 50
:insert-into 60 :insert-into 60
:replace-into 60
:update 70 :update 70
:delete 75 :delete 75
:delete-from 80 :delete-from 80
@ -594,6 +595,15 @@
(to-sql (second table)))) (to-sql (second table))))
(str "INSERT INTO " (to-sql table)))) (str "INSERT INTO " (to-sql table))))
(defmethod format-clause :replace-into [[_ table] _]
(if (and (sequential? table) (sequential? (first table)))
(str "REPLACE INTO "
(to-sql (ffirst table))
" (" (comma-join (map to-sql (second (first table)))) ") "
(binding [*subquery?* false]
(to-sql (second table))))
(str "REPLACE INTO " (to-sql table))))
(defmethod format-clause :columns [[_ fields] _] (defmethod format-clause :columns [[_ fields] _]
(str "(" (comma-join (map to-sql fields)) ")")) (str "(" (comma-join (map to-sql fields)) ")"))

View file

@ -220,6 +220,13 @@
([table] (insert-into nil table)) ([table] (insert-into nil table))
([m table] (build-clause :insert-into m table))) ([m table] (build-clause :insert-into m table)))
(defmethod build-clause :replace-into [_ m table]
(assoc m :replace-into table))
(defn replace-into
([table] (replace-into nil table))
([m table] (build-clause :replace-into m table)))
(macros/usetime (macros/usetime
(defhelper columns [m fields] (defhelper columns [m fields]
(assoc m :columns (collify fields)))) (assoc m :columns (collify fields))))