(before-delete model₁ instance)Underlying method implemented when using define-before-delete. You probably shouldn't be adding implementations
to this method directly, unless you know what you are doing!
before-delete is defined in toucan2.tools.before-delete (toucan2/tools/before_delete.clj:16).
It caches methods using a methodical.impl.cache.watching.WatchingCache.
It uses the method combination methodical.impl.combo.threaded.ThreadingMethodCombination
with the threading strategy :thread-last.
It uses the dispatcher methodical.impl.dispatcher.multi_default.MultiDefaultDispatcher
with hierarchy #'clojure.core/global-hierarchy
and prefs {}.
The default value is :default.
It uses the method table methodical.impl.method_table.standard.StandardMethodTable.
These aux methods are known:
:around methods:
:default, defined in toucan2.tools.before-delete (toucan2/tools/before_delete.clj:24)Underlying method implemented when using [[define-before-delete]]. You *probably* shouldn't be adding implementations
to this method directly, unless you know what you are doing!
before-delete is defined in [[toucan2.tools.before-delete]] (toucan2/tools/before_delete.clj:16).
It caches methods using a `methodical.impl.cache.watching.WatchingCache`.
It uses the method combination `methodical.impl.combo.threaded.ThreadingMethodCombination`
with the threading strategy `:thread-last`.
It uses the dispatcher `methodical.impl.dispatcher.multi_default.MultiDefaultDispatcher`
with hierarchy `#'clojure.core/global-hierarchy`
and prefs `{}`.
The default value is `:default`.
It uses the method table `methodical.impl.method_table.standard.StandardMethodTable`.
These aux methods are known:
`:around` methods:
* `:default`, defined in [[toucan2.tools.before-delete]] (toucan2/tools/before_delete.clj:24) (define-before-delete model [instance-binding] & body)Define a method that will be called for every instance that is about to be deleted. The results of this before-delete method are ultimately ignored, but the entire operation (both the original delete and the recursive select) are done in a transaction, so you can use before-delete to enforce preconditions and abort deletes when they fail, or do something for side effects.
Before-delete is implemented by first selecting all the rows matching the toucan2.delete/delete! conditions and
then transducing those rows and calling the before-delete method this macro defines on each row. Because
before-delete has to fetch every instance matching the condition, defining a before-delete method can be quite
expensive! For example, a delete! operation that deletes a million rows would normally be a single database call;
with before-delete in place, it would have to fetch and transduce all million rows and apply before-delete to each
of them before even getting to the DELETE operation! So be sure you really need before-delete behavior before
opting in to it.
To skip before-delete behavior, you can always use the model's raw table name directly, e.g.
(t2/delete! (t2/table-name :models/user) ...)
This might be wise when deleting a large number of rows.
Define a method that will be called for every instance that is about to be deleted. The results of this before-delete method are ultimately ignored, but the entire operation (both the original delete and the recursive select) are done in a transaction, so you can use before-delete to enforce preconditions and abort deletes when they fail, or do something for side effects. Before-delete is implemented by first selecting all the rows matching the [[toucan2.delete/delete!]] conditions and then transducing those rows and calling the [[before-delete]] method this macro defines on each row. Because before-delete has to fetch every instance matching the condition, defining a before-delete method can be quite expensive! For example, a `delete!` operation that deletes a million rows would normally be a single database call; with before-delete in place, it would have to fetch and transduce all million rows and apply [[before-delete]] to each of them *before* even getting to the `DELETE` operation! So be sure you *really* need before-delete behavior before opting in to it. To skip before-delete behavior, you can always use the model's raw table name directly, e.g. ```clj (t2/delete! (t2/table-name :models/user) ...) ``` This might be wise when deleting a large number of rows.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |