fix: data conflict handler

pull/2601/head
Steven 1 year ago
parent d275713aff
commit 0127e08a28

@ -11,24 +11,14 @@ import (
)
func (d *DB) UpsertMemoOrganizer(ctx context.Context, upsert *store.MemoOrganizer) (*store.MemoOrganizer, error) {
pinnedValue := 0
pinned := 0
if upsert.Pinned {
pinnedValue = 1
pinned = 1
}
qb := squirrel.Insert("memo_organizer").
Columns("memo_id", "user_id", "pinned").
Values(upsert.MemoID, upsert.UserID, pinnedValue).
PlaceholderFormat(squirrel.Dollar)
stmt, args, err := qb.ToSql()
if err != nil {
stmt := "INSERT INTO memo_organizer (memo_id, user_id, pinned) VALUES ($1, $2, $3) ON CONFLICT (memo_id, user_id) DO UPDATE SET pinned = $4"
if _, err := d.db.ExecContext(ctx, stmt, upsert.MemoID, upsert.UserID, pinned, pinned); err != nil {
return nil, err
}
if _, err = d.db.ExecContext(ctx, stmt, args...); err != nil {
return nil, err
}
return upsert, nil
}

@ -14,6 +14,7 @@ func (d *DB) UpsertMemoRelation(ctx context.Context, create *store.MemoRelation)
qb := squirrel.Insert("memo_relation").
Columns("memo_id", "related_memo_id", "type").
Values(create.MemoID, create.RelatedMemoID, create.Type).
Suffix("ON CONFLICT (version) DO NOTHING").
PlaceholderFormat(squirrel.Dollar)
stmt, args, err := qb.ToSql()

@ -44,9 +44,10 @@ func (d *DB) UpsertMigrationHistory(ctx context.Context, upsert *store.UpsertMig
qb := squirrel.Insert("migration_history").
Columns("version").
Values(upsert.Version).
Suffix("ON CONFLICT (version) DO UPDATE SET version = ?", upsert.Version)
Suffix("ON CONFLICT (version) DO NOTHING").
PlaceholderFormat(squirrel.Dollar)
query, args, err := qb.PlaceholderFormat(squirrel.Dollar).ToSql()
query, args, err := qb.ToSql()
if err != nil {
return nil, err
}

@ -11,9 +11,11 @@ import (
func (d *DB) UpsertSystemSetting(ctx context.Context, upsert *store.SystemSetting) (*store.SystemSetting, error) {
qb := squirrel.Insert("system_setting").
Columns("name", "value", "description").
Values(upsert.Name, upsert.Value, upsert.Description)
Values(upsert.Name, upsert.Value, upsert.Description).
Suffix("ON CONFLICT (name) DO UPDATE SET value = EXCLUDED.value, description = EXCLUDED.description").
PlaceholderFormat(squirrel.Dollar)
query, args, err := qb.PlaceholderFormat(squirrel.Dollar).ToSql()
query, args, err := qb.ToSql()
if err != nil {
return nil, err
}

@ -11,20 +11,10 @@ import (
)
func (d *DB) UpsertTag(ctx context.Context, upsert *store.Tag) (*store.Tag, error) {
builder := squirrel.Insert("tag").
Columns("name", "creator_id").
Values(upsert.Name, upsert.CreatorID). // on conflict is not necessary, as only the pair of name and creator_id is unique
PlaceholderFormat(squirrel.Dollar)
query, args, err := builder.ToSql()
if err != nil {
stmt := "INSERT INTO tag (name, creator_id) VALUES ($1, $2) ON CONFLICT (name, creator_id) DO UPDATE SET name = $3"
if _, err := d.db.ExecContext(ctx, stmt, upsert.Name, upsert.CreatorID, upsert.Name); err != nil {
return nil, err
}
if _, err := d.db.ExecContext(ctx, query, args...); err != nil {
return nil, err
}
return upsert, nil
}

Loading…
Cancel
Save