minor changes to table.go
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user