Я пытаюсь удалить строку на основе простого условия, если условия выполняются, удалите строку, либо обновите строку. Обычно я помечаю свои данные is_deleted
, поэтому выполните удаление, если is_deleted
равно true, если нет, установите значение is_deleted
в true.
Сейчас я делаю простой запрос, проверим is_deleted
по запрашиваемым данным и сделаем что-нибудь на его основе.
Очень простой псевдокод, написанный на clojure ($ n - просто заполнитель для позиционных аргументов):
(defn find-by-username
[db username]
"SELECT * FROM users WHERE username = $1") ;; to illustrate the query
(defn delete-by-username-impl
[db username]
"DELETE FROM users WHERE username = $1")
(defn set-is-deleted
[db username]
"UPDATE users SET is_deleted = true WHERE username = $1")
(defn delete-by-username
[db username]
(let [user (find-by-username db username)]
(if (:is-deleted user)
(delete-by-username-impl db username)
(set-is-deleted db username))))
Мне нужно только один раз попасть в БД.