fixed localId bug
This commit is contained in:
parent
bf7f5efa1e
commit
4f80808531
|
@ -74,7 +74,7 @@ func (s *Sqlite) SetTasks(tasks []*task.Task) error {
|
||||||
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
newIds := []string{}
|
localIdMap := map[string]int{}
|
||||||
for _, t := range tasks {
|
for _, t := range tasks {
|
||||||
var recurStr string
|
var recurStr string
|
||||||
if t.Recur != nil {
|
if t.Recur != nil {
|
||||||
|
@ -90,11 +90,10 @@ VALUES
|
||||||
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
newIds = append(newIds, t.Id)
|
localIdMap[t.Id] = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// set local_ids
|
// set local_ids
|
||||||
oldIds := map[string]int{}
|
|
||||||
rows, err := s.db.Query(`SELECT id, local_id FROM local_id`)
|
rows, err := s.db.Query(`SELECT id, local_id FROM local_id`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
||||||
|
@ -102,38 +101,39 @@ VALUES
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var id string
|
var id string
|
||||||
var local_id int
|
var localId int
|
||||||
if err := rows.Scan(&id, &local_id); err != nil {
|
if err := rows.Scan(&id, &localId); err != nil {
|
||||||
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
||||||
}
|
}
|
||||||
oldIds[id] = local_id
|
if _, ok := localIdMap[id]; ok {
|
||||||
}
|
localIdMap[id] = localId
|
||||||
|
|
||||||
usedLocalIds := []int{}
|
|
||||||
newLocalIds := map[string]int{}
|
|
||||||
for _, n := range newIds {
|
|
||||||
if localId, ok := oldIds[n]; ok {
|
|
||||||
newLocalIds[n] = localId
|
|
||||||
usedLocalIds = append(usedLocalIds, localId)
|
|
||||||
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
localId := NextLocalId(usedLocalIds)
|
|
||||||
newLocalIds[n] = localId
|
|
||||||
usedLocalIds = append(usedLocalIds, localId)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := s.db.Exec(`DELETE FROM local_id`); err != nil {
|
if _, err := s.db.Exec(`DELETE FROM local_id`); err != nil {
|
||||||
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
||||||
}
|
}
|
||||||
for id, localId := range newLocalIds {
|
|
||||||
_, err := s.db.Exec(`
|
var used []int
|
||||||
|
for _, localId := range localIdMap {
|
||||||
|
if localId != 0 {
|
||||||
|
used = append(used, localId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for id, localId := range localIdMap {
|
||||||
|
if localId == 0 {
|
||||||
|
newLocalId := NextLocalId(used)
|
||||||
|
localIdMap[id] = newLocalId
|
||||||
|
used = append(used, newLocalId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for id, localId := range localIdMap {
|
||||||
|
if _, err := s.db.Exec(`
|
||||||
INSERT INTO local_id
|
INSERT INTO local_id
|
||||||
(id, local_id)
|
(id, local_id)
|
||||||
VALUES
|
VALUES
|
||||||
(?, ?)`, id, localId)
|
(?, ?)`, id, localId); err != nil {
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
return fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue