fix(db): check both name and target_format in default transcodings migration (#5175)
The ensure_default_transcodings migration only checked target_format before inserting, but the transcoding table has UNIQUE constraints on both name and target_format. Older installations may have entries where the name matches a default (e.g., 'opus audio') but the target_format differs (e.g., 'oga' instead of 'opus'), causing a UNIQUE constraint violation on name during the INSERT. Fixes #5174
This commit is contained in:
@@ -17,9 +17,12 @@ func upEnsureDefaultTranscodings(_ context.Context, tx *sql.Tx) error {
|
|||||||
// Older installations may be missing default transcodings that were added
|
// Older installations may be missing default transcodings that were added
|
||||||
// after the initial seeding (e.g., aac was added later than mp3/opus).
|
// after the initial seeding (e.g., aac was added later than mp3/opus).
|
||||||
// Insert any missing defaults without touching user-customized entries.
|
// Insert any missing defaults without touching user-customized entries.
|
||||||
|
// Check both target_format and name since both have UNIQUE constraints,
|
||||||
|
// and older entries may have a different target_format (e.g., 'oga' vs 'opus')
|
||||||
|
// but the same name.
|
||||||
for _, t := range consts.DefaultTranscodings {
|
for _, t := range consts.DefaultTranscodings {
|
||||||
var count int
|
var count int
|
||||||
err := tx.QueryRow("SELECT COUNT(*) FROM transcoding WHERE target_format = ?", t.TargetFormat).Scan(&count)
|
err := tx.QueryRow("SELECT COUNT(*) FROM transcoding WHERE target_format = ? OR name = ?", t.TargetFormat, t.Name).Scan(&count)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user