From ebfabaffc2cf774d725e543a136a6575c8e38922 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Thu, 18 Mar 2021 16:03:09 +0100 Subject: [PATCH] Introduce DB#Upsert() --- pkg/icingadb/db.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/icingadb/db.go b/pkg/icingadb/db.go index a1d49779..84a6e6d7 100644 --- a/pkg/icingadb/db.go +++ b/pkg/icingadb/db.go @@ -352,6 +352,17 @@ func (db DB) Create(ctx context.Context, entities <-chan contracts.Entity) error return db.NamedBulkExec(ctx, db.BuildInsertStmt(first), 1<<15/len(db.BuildColumns(first)), 1<<3, forward, nil) } +func (db DB) Upsert(ctx context.Context, entities <-chan contracts.Entity, succeeded chan<- contracts.Entity) error { + first, forward, err := com.CopyFirst(ctx, entities) + if first == nil { + return err + } + + return db.NamedBulkExec( + ctx, db.BuildUpsertStmt(first), 1<<15/len(db.BuildColumns(first))/2, 1<<3, forward, succeeded, + ) +} + func (db DB) Update(ctx context.Context, entities <-chan contracts.Entity) error { first, forward, err := com.CopyFirst(ctx, entities) if first == nil {