Skip to content

Latest commit

 

History

History
77 lines (65 loc) · 1.99 KB

README_CREATE.md

File metadata and controls

77 lines (65 loc) · 1.99 KB

Create

Go Reference

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))