feature (db): Add WithOnConflict support to CreateItems(...) (#1699)
This commit is contained in:
2 files changed
+32
-1
No files matched your search
@@ -433,7 +433,7 @@ func (rw *Db) CreateItems(ctx context.Context, createItems []interface{}, opt ..
|
||||
}
|
||||
}
|
||||
for _, item := range createItems {
|
||||
if err := rw.Create(ctx, item); err != nil {
|
||||
if err := rw.Create(ctx, item, WithOnConflict(opts.withOnConflict), WithReturnRowsAffected(opts.withRowsAffected)); err != nil {
|
||||
return errors.Wrap(ctx, err, op, errors.WithoutEvent())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,4 +150,35 @@ func TestDb_Create_OnConflict(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
t.Run("CreateItems", func(t *testing.T) {
|
||||
assert, require := assert.New(t), require.New(t)
|
||||
conflictUser, err := db_test.NewTestUser()
|
||||
require.NoError(err)
|
||||
userNameId, err := db.NewPublicId("test-user-name")
|
||||
require.NoError(err)
|
||||
conflictUser.PublicId = initialUser.PublicId
|
||||
conflictUser.Name = userNameId
|
||||
md := oplog.Metadata{
|
||||
"resource-public-id": []string{conflictUser.PublicId},
|
||||
"op-type": []string{oplog.OpType_OP_TYPE_CREATE.String()},
|
||||
}
|
||||
onConflict := db.OnConflict{
|
||||
Target: db.Constraint("db_test_user_public_id_key"),
|
||||
Action: db.SetColumns([]string{"name"}),
|
||||
}
|
||||
users := []interface{}{}
|
||||
users = append(users, conflictUser)
|
||||
var rowsAffected int64
|
||||
err = rw.CreateItems(ctx, users, db.WithOnConflict(&onConflict), db.WithOplog(wrapper, md), db.WithReturnRowsAffected(&rowsAffected))
|
||||
require.NoError(err)
|
||||
foundUser, err := db_test.NewTestUser()
|
||||
require.NoError(err)
|
||||
foundUser.PublicId = conflictUser.PublicId
|
||||
err = rw.LookupByPublicId(context.Background(), foundUser)
|
||||
require.NoError(err)
|
||||
|
||||
assert.Equal(int64(1), rowsAffected)
|
||||
assert.Equal(conflictUser.Id, foundUser.Id)
|
||||
assert.Equal(conflictUser.Name, foundUser.Name)
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user