more db refactors
This commit is contained in:
@@ -2,6 +2,7 @@ package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
@@ -47,17 +48,18 @@ func InsertMultiple[T any](tx bun.Tx, models []*T) *inserter[T] {
|
||||
}
|
||||
}
|
||||
|
||||
// On adds .On handling for upserts
|
||||
// Example: .On("(discord_id) DO UPDATE")
|
||||
func (i *inserter[T]) On(query string) *inserter[T] {
|
||||
i.q = i.q.On(query)
|
||||
func (i *inserter[T]) ConflictNothing(conflicts ...string) *inserter[T] {
|
||||
fieldstr := strings.Join(conflicts, ", ")
|
||||
i.q = i.q.On(fmt.Sprintf("CONFLICT (%s) DO NOTHING", fieldstr))
|
||||
return i
|
||||
}
|
||||
|
||||
// Set adds a SET clause for upserts (use with OnConflict)
|
||||
// Example: .Set("access_token = EXCLUDED.access_token")
|
||||
func (i *inserter[T]) Set(query string, args ...any) *inserter[T] {
|
||||
i.q = i.q.Set(query, args...)
|
||||
func (i *inserter[T]) ConflictUpdate(conflicts []string, columns ...string) *inserter[T] {
|
||||
fieldstr := strings.Join(conflicts, ", ")
|
||||
i.q = i.q.On(fmt.Sprintf("CONFLICT (%s) DO UPDATE", fieldstr))
|
||||
for _, column := range columns {
|
||||
i.q = i.q.Set(fmt.Sprintf("%s = EXCLUDED.%s", column, column))
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user