0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-22 06:46:40 -05:00

Improve options handling on db module

This commit is contained in:
Andrey Antukh 2023-11-30 13:11:36 +01:00 committed by Andrés Moya
parent 6bff6d24b9
commit 0a77bae8a7
5 changed files with 41 additions and 23 deletions

View file

@ -268,7 +268,7 @@
(jdbc/execute! sv default-opts)))
([ds sv opts]
(-> (get-connectable ds)
(jdbc/execute! sv (merge default-opts opts)))))
(jdbc/execute! sv (into default-opts (sql/adapt-opts opts))))))
(defn exec-one!
([ds sv]
@ -276,33 +276,31 @@
(jdbc/execute-one! sv default-opts)))
([ds sv opts]
(-> (get-connectable ds)
(jdbc/execute-one! sv
(-> (merge default-opts opts)
(assoc :return-keys (::return-keys? opts false)))))))
(jdbc/execute-one! sv (into default-opts (sql/adapt-opts opts))))))
(defn insert!
[ds table params & {:as opts}]
[ds table params & {:as opts :keys [::return-keys?] :or {return-keys? true}}]
(-> (get-connectable ds)
(exec-one! (sql/insert table params opts)
(merge {::return-keys? true} opts))))
(assoc opts ::return-keys? return-keys?))))
(defn insert-multi!
[ds table cols rows & {:as opts}]
[ds table cols rows & {:as opts :keys [::return-keys?] :or {return-keys? true}}]
(-> (get-connectable ds)
(exec! (sql/insert-multi table cols rows opts)
(merge {::return-keys? true} opts))))
(assoc opts ::return-keys? return-keys?))))
(defn update!
[ds table params where & {:as opts}]
[ds table params where & {:as opts :keys [::return-keys?] :or {return-keys? true}}]
(-> (get-connectable ds)
(exec-one! (sql/update table params where opts)
(merge {::return-keys? true} opts))))
(assoc opts ::return-keys? return-keys?))))
(defn delete!
[ds table params & {:as opts}]
[ds table params & {:as opts :keys [::return-keys?] :or {return-keys? true}}]
(-> (get-connectable ds)
(exec-one! (sql/delete table params opts)
(merge {::return-keys? true} opts))))
(assoc opts ::return-keys? return-keys?))))
(defn is-row-deleted?
[{:keys [deleted-at]}]
@ -416,10 +414,14 @@
(.releaseSavepoint conn sp))
(defn rollback!
([^Connection conn]
(.rollback conn))
([^Connection conn ^Savepoint sp]
(.rollback conn sp)))
([conn]
(let [^Connection conn (get-connection conn)]
(l/trc :hint "explicit rollback requested")
(.rollback conn)))
([conn ^Savepoint sp]
(let [^Connection conn (get-connection conn)]
(l/trc :hint "explicit rollback requested")
(.rollback conn sp))))
(defn tx-run!
[system f & params]
@ -446,7 +448,6 @@
(let [system (assoc system ::conn conn)
result (apply f system params)]
(when (::rollback system)
(l/dbg :hint "explicit rollback requested")
(rollback! conn))
result))

View file

@ -8,6 +8,7 @@
(:refer-clojure :exclude [update])
(:require
[app.db :as-alias db]
[clojure.set :as set]
[clojure.string :as str]
[next.jdbc.optional :as jdbc-opt]
[next.jdbc.sql.builder :as sql]))
@ -19,6 +20,14 @@
{:table-fn snake-case
:column-fn snake-case})
(def params-mapping
{::db/return-keys? :return-keys
::db/columns :columns})
(defn adapt-opts
[opts]
(set/rename-keys opts params-mapping))
(defn as-kebab-maps
[rs opts]
(jdbc-opt/as-unqualified-modified-maps rs (assoc opts :label-fn kebab-case)))
@ -29,7 +38,7 @@
([table key-map opts]
(let [opts (merge default-opts opts)
opts (cond-> opts
(:on-conflict-do-nothing opts)
(::db/on-conflict-do-nothing? opts)
(assoc :suffix "ON CONFLICT DO NOTHING"))]
(sql/for-insert table key-map opts))))
@ -44,6 +53,7 @@
([table where-params opts]
(let [opts (merge default-opts opts)
opts (cond-> opts
(::db/columns opts) (assoc :columns (::db/columns opts))
(::db/for-update? opts) (assoc :suffix "FOR UPDATE")
(::db/for-share? opts) (assoc :suffix "FOR KEY SHARE")
(:for-update opts) (assoc :suffix "FOR UPDATE")
@ -54,7 +64,13 @@
([table key-map where-params]
(update table key-map where-params nil))
([table key-map where-params opts]
(let [opts (merge default-opts opts)]
(let [opts (into default-opts opts)
opts (if-let [columns (::db/columns opts)]
(let [columns (if (seq columns)
(sql/as-cols columns opts)
"*")]
(assoc opts :suffix (str "RETURNING " columns)))
opts)]
(sql/for-update table key-map where-params opts))))
(defn delete

View file

@ -899,7 +899,7 @@
(assoc :file-id file-id)
(d/update-when :media-id lookup-index)
(d/update-when :thumbnail-id lookup-index))
{:on-conflict-do-nothing overwrite?}))))
{::db/on-conflict-do-nothing? overwrite?}))))
(doseq [item (:thumbnails @*state*)]
(let [item (update item :media-id lookup-index)]
@ -909,7 +909,7 @@
:object-id (:object-id item)
::l/sync? true)
(db/insert! conn :file-tagged-object-thumbnail item
{:on-conflict-do-nothing overwrite?})))))
{::db/on-conflict-do-nothing? overwrite?})))))
(defn- lookup-index
[id]

View file

@ -729,7 +729,8 @@
(role->params role))]
;; Insert the invited member to the team
(db/insert! conn :team-profile-rel params {:on-conflict-do-nothing true})
(db/insert! conn :team-profile-rel params
{::db/on-conflict-do-nothing? true})
;; If profile is not yet verified, mark it as verified because
;; accepting an invitation link serves as verification.

View file

@ -105,7 +105,7 @@
::quotes/team-id team-id})
;; Insert the invited member to the team
(db/insert! conn :team-profile-rel params {:on-conflict-do-nothing true})
(db/insert! conn :team-profile-rel params {::db/on-conflict-do-nothing? true})
;; If profile is not yet verified, mark it as verified because
;; accepting an invitation link serves as verification.