mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
fix: data conflict handler
This commit is contained in:
@ -11,24 +11,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (d *DB) UpsertMemoOrganizer(ctx context.Context, upsert *store.MemoOrganizer) (*store.MemoOrganizer, error) {
|
func (d *DB) UpsertMemoOrganizer(ctx context.Context, upsert *store.MemoOrganizer) (*store.MemoOrganizer, error) {
|
||||||
pinnedValue := 0
|
pinned := 0
|
||||||
if upsert.Pinned {
|
if upsert.Pinned {
|
||||||
pinnedValue = 1
|
pinned = 1
|
||||||
}
|
}
|
||||||
qb := squirrel.Insert("memo_organizer").
|
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"
|
||||||
Columns("memo_id", "user_id", "pinned").
|
if _, err := d.db.ExecContext(ctx, stmt, upsert.MemoID, upsert.UserID, pinned, pinned); err != nil {
|
||||||
Values(upsert.MemoID, upsert.UserID, pinnedValue).
|
|
||||||
PlaceholderFormat(squirrel.Dollar)
|
|
||||||
|
|
||||||
stmt, args, err := qb.ToSql()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = d.db.ExecContext(ctx, stmt, args...); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return upsert, nil
|
return upsert, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ func (d *DB) UpsertMemoRelation(ctx context.Context, create *store.MemoRelation)
|
|||||||
qb := squirrel.Insert("memo_relation").
|
qb := squirrel.Insert("memo_relation").
|
||||||
Columns("memo_id", "related_memo_id", "type").
|
Columns("memo_id", "related_memo_id", "type").
|
||||||
Values(create.MemoID, create.RelatedMemoID, create.Type).
|
Values(create.MemoID, create.RelatedMemoID, create.Type).
|
||||||
|
Suffix("ON CONFLICT (version) DO NOTHING").
|
||||||
PlaceholderFormat(squirrel.Dollar)
|
PlaceholderFormat(squirrel.Dollar)
|
||||||
|
|
||||||
stmt, args, err := qb.ToSql()
|
stmt, args, err := qb.ToSql()
|
||||||
|
@ -44,9 +44,10 @@ func (d *DB) UpsertMigrationHistory(ctx context.Context, upsert *store.UpsertMig
|
|||||||
qb := squirrel.Insert("migration_history").
|
qb := squirrel.Insert("migration_history").
|
||||||
Columns("version").
|
Columns("version").
|
||||||
Values(upsert.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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,11 @@ import (
|
|||||||
func (d *DB) UpsertSystemSetting(ctx context.Context, upsert *store.SystemSetting) (*store.SystemSetting, error) {
|
func (d *DB) UpsertSystemSetting(ctx context.Context, upsert *store.SystemSetting) (*store.SystemSetting, error) {
|
||||||
qb := squirrel.Insert("system_setting").
|
qb := squirrel.Insert("system_setting").
|
||||||
Columns("name", "value", "description").
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -11,20 +11,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (d *DB) UpsertTag(ctx context.Context, upsert *store.Tag) (*store.Tag, error) {
|
func (d *DB) UpsertTag(ctx context.Context, upsert *store.Tag) (*store.Tag, error) {
|
||||||
builder := squirrel.Insert("tag").
|
stmt := "INSERT INTO tag (name, creator_id) VALUES ($1, $2) ON CONFLICT (name, creator_id) DO UPDATE SET name = $3"
|
||||||
Columns("name", "creator_id").
|
if _, err := d.db.ExecContext(ctx, stmt, upsert.Name, upsert.CreatorID, upsert.Name); err != nil {
|
||||||
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 {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := d.db.ExecContext(ctx, query, args...); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return upsert, nil
|
return upsert, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user