diff options
Diffstat (limited to 'internal/db/bundb/migrations')
| -rw-r--r-- | internal/db/bundb/migrations/20250625173327_filter_migration_fix.go | 6 | ||||
| -rw-r--r-- | internal/db/bundb/migrations/util.go | 14 |
2 files changed, 19 insertions, 1 deletions
diff --git a/internal/db/bundb/migrations/20250625173327_filter_migration_fix.go b/internal/db/bundb/migrations/20250625173327_filter_migration_fix.go index c5fa965a4..31c3713c6 100644 --- a/internal/db/bundb/migrations/20250625173327_filter_migration_fix.go +++ b/internal/db/bundb/migrations/20250625173327_filter_migration_fix.go @@ -110,12 +110,16 @@ func init() { return gtserror.Newf("error selecting %T ids: %w", data.Model, err) } + // Convert related IDs to bun array + // type for serialization in query. + arrIDs := bunArrayType(tx, relatedIDs) + // Now update the relevant filter // row to contain these related IDs. if _, err := tx.NewUpdate(). Model((*newmodel.Filter)(nil)). Where("? = ?", bun.Ident("id"), filterID). - Set("? = ?", bun.Ident(col), relatedIDs). + Set("? = ?", bun.Ident(col), arrIDs). Exec(ctx); err != nil { return gtserror.Newf("error updating filters.%s ids: %w", col, err) } diff --git a/internal/db/bundb/migrations/util.go b/internal/db/bundb/migrations/util.go index f20f23c3f..4a3a62b21 100644 --- a/internal/db/bundb/migrations/util.go +++ b/internal/db/bundb/migrations/util.go @@ -34,10 +34,24 @@ import ( "github.com/uptrace/bun" "github.com/uptrace/bun/dialect" "github.com/uptrace/bun/dialect/feature" + "github.com/uptrace/bun/dialect/pgdialect" "github.com/uptrace/bun/dialect/sqltype" "github.com/uptrace/bun/schema" ) +// bunArrayType wraps the given type in a pgdialect.Array +// if needed, which postgres wants for serializing arrays. +func bunArrayType(db bun.IDB, arr any) any { + switch db.Dialect().Name() { + case dialect.SQLite: + return arr // return as-is + case dialect.PG: + return pgdialect.Array(arr) + default: + panic("unreachable") + } +} + // doWALCheckpoint attempt to force a WAL file merge on SQLite3, // which can be useful given how much can build-up in the WAL. // |
