diff --git a/store/db/postgres/memo_organizer.go b/store/db/postgres/memo_organizer.go index 2a85d5a1..4c9b9188 100644 --- a/store/db/postgres/memo_organizer.go +++ b/store/db/postgres/memo_organizer.go @@ -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 } diff --git a/store/db/postgres/memo_relation.go b/store/db/postgres/memo_relation.go index fd62f483..a5c8b11f 100644 --- a/store/db/postgres/memo_relation.go +++ b/store/db/postgres/memo_relation.go @@ -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() diff --git a/store/db/postgres/migration_history.go b/store/db/postgres/migration_history.go index 83279ec8..d7b8a665 100644 --- a/store/db/postgres/migration_history.go +++ b/store/db/postgres/migration_history.go @@ -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 } diff --git a/store/db/postgres/system_setting.go b/store/db/postgres/system_setting.go index 4c42198d..9ad629bf 100644 --- a/store/db/postgres/system_setting.go +++ b/store/db/postgres/system_setting.go @@ -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 } diff --git a/store/db/postgres/tag.go b/store/db/postgres/tag.go index c4218048..9097e8fb 100644 --- a/store/db/postgres/tag.go +++ b/store/db/postgres/tag.go @@ -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 }