mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-02-01 22:47:40 +00:00
fix: add migration for non-unique task buckets
This commit is contained in:
@@ -27,6 +27,63 @@ func init() {
|
||||
ID: "20250624092830",
|
||||
Description: "add unique index for task buckets",
|
||||
Migrate: func(tx *xorm.Engine) error {
|
||||
|
||||
s := tx.NewSession()
|
||||
defer s.Close()
|
||||
|
||||
err := s.Begin()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// First remove all duplicate entries
|
||||
duplicateTaskBuckets := []taskBucket20240406125227{}
|
||||
err = s.
|
||||
Select("task_id, project_view_id").
|
||||
GroupBy("task_id, project_view_id").
|
||||
Having("count(*) > 1").
|
||||
Find(&duplicateTaskBuckets)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
newTaskBuckets := []taskBucket20240406125227{}
|
||||
for _, bucket := range duplicateTaskBuckets {
|
||||
newBucket := taskBucket20240406125227{}
|
||||
_, err = s.Where("task_id = ? AND project_view_id = ?", bucket.TaskID, bucket.ProjectViewID).
|
||||
Get(&newBucket)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
newTaskBuckets = append(newTaskBuckets, newBucket)
|
||||
}
|
||||
|
||||
for _, bucket := range duplicateTaskBuckets {
|
||||
_, err = s.Where("task_id = ? AND project_view_id = ?", bucket.TaskID, bucket.ProjectViewID).
|
||||
Delete(&taskBucket20240406125227{})
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for _, bucket := range newTaskBuckets {
|
||||
_, err = s.Insert(&bucket)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
err = s.Commit()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Then create the unique index
|
||||
var query string
|
||||
switch tx.Dialect().URI().DBType {
|
||||
case schemas.MYSQL:
|
||||
@@ -34,7 +91,7 @@ func init() {
|
||||
default:
|
||||
query = "CREATE UNIQUE INDEX IF NOT EXISTS UQE_task_buckets_task_project_view ON task_buckets (task_id, project_view_id)"
|
||||
}
|
||||
_, err := tx.Exec(query)
|
||||
_, err = tx.Exec(query)
|
||||
return err
|
||||
},
|
||||
Rollback: func(tx *xorm.Engine) error {
|
||||
|
||||
Reference in New Issue
Block a user