From 28d7bfeef7fca674999b958adfc9a36394f77377 Mon Sep 17 00:00:00 2001 From: jacks0n9 Date: Wed, 18 Oct 2023 21:16:44 -0700 Subject: [PATCH] Fix type confusion bug --- tables.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/tables.go b/tables.go index 9a4030c..4545b2f 100644 --- a/tables.go +++ b/tables.go @@ -1,6 +1,9 @@ package tinydb -import "reflect" +import ( + "encoding/json" + "reflect" +) // Table the table of the database. type Table[T any] struct { @@ -83,17 +86,26 @@ func (tbl *Table[T]) Delete(condition func(T) bool) ([]T, error) { func (tbl *Table[T]) Update(updater func(T) T, condition func(T) bool) error { tbl.database.Lock() defer tbl.database.Unlock() - var data = make(map[string][]T) + var data = make(map[string][]any) err := tbl.database.storage.Read(&data) if err != nil { return err } - var out []T if _, ok := data[tbl.name]; !ok { return nil } - for i := range data[tbl.name] { - item := data[tbl.name][i] + raw, err := json.Marshal(data[tbl.name]) + if err != nil { + return err + } + actualItems := []T{} + err = json.Unmarshal(raw, &actualItems) + if err != nil { + return err + } + var out []any + + for _, item := range actualItems { if condition(item) { item = updater(item) }