RW.Create(...) example with one item
id, err := dbw.NewId("u")
user := TestUser{PublicId: id, Name: "Alice"}
var rowsAffected int64
err = rw.Create(ctx, &user, dbw.WithRowsAffected(&rowsAffected))
RW.CreateItems(...) example with multiple items
var rowsAffected int64
err = rw.CreateItems(ctx,[]interface{}{&user1, &user2}, dbw.WithRowsAffected(&rowsAffected))
OnConflict upsert example
Upserts via a variety of conflict targets and actions are supported.
// set columns
onConflict := dbw.OnConflict{
Target: dbw.Columns{"public_id"},
Action: dbw.SetColumns([]string{"name"}),
}
rw.Create(ctx, &user, dbw.WithConflict(&onConflict))
// set columns and column values
onConflict := dbw.OnConflict{
Target: dbw.Columns{"public_id"},
}
cv := dbw.SetColumns([]string{"name"})
cv = append(
cv,
dbw.SetColumnValues(map[string]interface{}{
"email": "alice@gmail.com",
"phone_number": dbw.Expr("NULL"),
})...)
onConflict.Action = cv
rw.Create(ctx, &user, dbw.WithConflict(&onConflict))
// do nothing
onConflict := dbw.OnConflict{
Target: dbw.Columns{"public_id"},
Action: dbw.DoNothing(true),
}
rw.Create(ctx, &user, dbw.WithConflict(&onConflict))
// on constraint
onConflict := dbw.OnConflict{
Target: dbw.Constraint("db_test_user_pkey"),
Action: dbw.SetColumns([]string{"name"}),
}
rw.Create(ctx, &user, dbw.WithConflict(&onConflict))
// set columns combined with WithVersion
onConflict := dbw.OnConflict{
Target: dbw.Columns{"public_id"},
Action: dbw.SetColumns([]string{"name"}),
}
version := uint32(1)
rw.Create(ctx, &user, dbw.WithConflict(&onConflict), dbw.WithVersion(&version))