MCPcopy
hub / github.com/pocketbase/pocketbase / create

Method create

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

Source from the content-addressed store, hash-verified

271}
272
273func (app *BaseApp) create(ctx context.Context, model Model, withValidations bool, isForAuxDB bool) error {
274 event := new(ModelEvent)
275 event.App = app
276 event.Context = ctx
277 event.Type = ModelEventTypeCreate
278 event.Model = model
279
280 saveErr := app.OnModelCreate().Trigger(event, func(e *ModelEvent) error {
281 // run validations (if any)
282 if withValidations {
283 validateErr := e.App.ValidateWithContext(e.Context, e.Model)
284 if validateErr != nil {
285 return validateErr
286 }
287 }
288
289 // db write
290 return e.App.OnModelCreateExecute().Trigger(event, func(e *ModelEvent) error {
291 var db dbx.Builder
292 if isForAuxDB {
293 db = e.App.AuxNonconcurrentDB()
294 } else {
295 db = e.App.NonconcurrentDB()
296 }
297
298 dbErr := baseLockRetry(func(attempt int) error {
299 if m, ok := e.Model.(DBExporter); ok {
300 data, err := m.DBExport(e.App)
301 if err != nil {
302 return err
303 }
304
305 // manually add the id to the data if missing
306 if _, ok := data[idColumn]; !ok {
307 data[idColumn] = e.Model.PK()
308 }
309
310 if cast.ToString(data[idColumn]) == "" {
311 return errors.New("empty primary key is not allowed when using the DBExporter interface")
312 }
313
314 _, err = db.Insert(e.Model.TableName(), data).WithContext(e.Context).Execute()
315
316 return err
317 }
318
319 return db.Model(e.Model).WithContext(e.Context).Insert()
320 }, defaultMaxLockRetries)
321 if dbErr != nil {
322 return dbErr
323 }
324
325 e.Model.MarkAsNotNew()
326
327 return nil
328 })
329 })
330 if saveErr != nil {

Callers 1

saveMethod · 0.95

Calls 15

OnModelCreateMethod · 0.95
baseLockRetryFunction · 0.85
TriggerMethod · 0.80
ExecuteMethod · 0.80
InsertMethod · 0.80
ModelMethod · 0.80
OnCompleteMethod · 0.80
ValidateWithContextMethod · 0.65
OnModelCreateExecuteMethod · 0.65
AuxNonconcurrentDBMethod · 0.65

Tested by

no test coverage detected