MCPcopy
hub / github.com/pocketbase/pocketbase / delete

Method delete

core/db.go:110–173  ·  view source on GitHub ↗
(ctx context.Context, model Model, isForAuxDB bool)

Source from the content-addressed store, hash-verified

108}
109
110func (app *BaseApp) delete(ctx context.Context, model Model, isForAuxDB bool) error {
111 event := new(ModelEvent)
112 event.App = app
113 event.Type = ModelEventTypeDelete
114 event.Context = ctx
115 event.Model = model
116
117 deleteErr := app.OnModelDelete().Trigger(event, func(e *ModelEvent) error {
118 pk := cast.ToString(e.Model.LastSavedPK())
119 if pk == "" {
120 return errors.New("the model can be deleted only if it is existing and has a non-empty primary key")
121 }
122
123 // db write
124 return e.App.OnModelDeleteExecute().Trigger(event, func(e *ModelEvent) error {
125 var db dbx.Builder
126 if isForAuxDB {
127 db = e.App.AuxNonconcurrentDB()
128 } else {
129 db = e.App.NonconcurrentDB()
130 }
131
132 return baseLockRetry(func(attempt int) error {
133 _, err := db.Delete(e.Model.TableName(), dbx.HashExp{
134 idColumn: pk,
135 }).WithContext(e.Context).Execute()
136
137 return err
138 }, defaultMaxLockRetries)
139 })
140 })
141 if deleteErr != nil {
142 errEvent := &ModelErrorEvent{ModelEvent: *event, Error: deleteErr}
143 errEvent.App = app // replace with the initial app in case it was changed by the hook
144 hookErr := app.OnModelAfterDeleteError().Trigger(errEvent)
145 if hookErr != nil {
146 return errors.Join(deleteErr, hookErr)
147 }
148
149 return deleteErr
150 }
151
152 if app.txInfo != nil {
153 // execute later after the transaction has completed
154 app.txInfo.OnComplete(func(txErr error) error {
155 if app.txInfo != nil && app.txInfo.parent != nil {
156 event.App = app.txInfo.parent
157 }
158
159 if txErr != nil {
160 return app.OnModelAfterDeleteError().Trigger(&ModelErrorEvent{
161 ModelEvent: *event,
162 Error: txErr,
163 })
164 }
165
166 return app.OnModelAfterDeleteSuccess().Trigger(event)
167 })

Callers 2

DeleteWithContextMethod · 0.95
AuxDeleteWithContextMethod · 0.95

Calls 14

OnModelDeleteMethod · 0.95
baseLockRetryFunction · 0.85
TriggerMethod · 0.80
ExecuteMethod · 0.80
OnCompleteMethod · 0.80
LastSavedPKMethod · 0.65
OnModelDeleteExecuteMethod · 0.65
AuxNonconcurrentDBMethod · 0.65
NonconcurrentDBMethod · 0.65
DeleteMethod · 0.65

Tested by

no test coverage detected