summaryrefslogtreecommitdiff
path: root/internal/db/bundb/migrations
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/bundb/migrations')
-rw-r--r--internal/db/bundb/migrations/20250625173327_filter_migration_fix.go6
-rw-r--r--internal/db/bundb/migrations/util.go14
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.
//