minor changes to table.go

This commit is contained in:
Pablu23
2024-04-04 21:36:12 +02:00
parent 56fc884952
commit 620a043286
3 changed files with 48 additions and 9 deletions

View File

@@ -5,7 +5,7 @@ import (
"sync"
)
type DbStatus int
type DbStatus uint8
const (
New DbStatus = iota
@@ -80,27 +80,56 @@ func (d *DbTable[K, T]) Map() map[K]T {
return res
}
func (d *DbTable[K, T]) First(filter func(match T) bool) (key K, value T, ok bool) {
d.mutex.Lock()
defer d.mutex.Unlock()
for k, manga := range d.items {
if filter(manga) {
return k, manga, true
}
}
return *new(K), *new(T), false
}
func (d *DbTable[K, T]) Where(filter func(match T) bool) map[K]T {
d.mutex.Lock()
defer d.mutex.Unlock()
res := make(map[K]T, len(d.items))
for k, manga := range d.items {
if filter(manga) {
res[k] = manga
}
}
return res
}
func (d *DbTable[K, T]) Delete(db *sql.DB, key K) error {
d.mutex.Lock()
defer d.mutex.Unlock()
delete(d.items, key)
return d.deleteFunc(db, key)
err := d.deleteFunc(db, key)
if err == nil {
delete(d.items, key)
}
return err
}
func (d *DbTable[K, T]) Save(db *sql.DB) error {
d.mutex.Lock()
defer d.mutex.Unlock()
for k, status := range d.updated {
if status == Loaded {
switch status {
case Loaded:
continue
} else if status == Updated {
case Updated:
item := d.items[k]
err := d.updateFunc(db, &item)
if err != nil {
return err
}
d.updated[k] = Loaded
} else {
case New:
item := d.items[k]
err := d.insertFunc(db, &item)
if err != nil {