Work on database revamp [WIP]

This commit is contained in:
Daniel 2018-09-04 17:09:32 +02:00
parent 307ddd70fd
commit efabb291d7
19 changed files with 1032 additions and 664 deletions

View file

@ -1,30 +1,34 @@
package storage
import (
"github.com/Safing/portbase/database/iterator"
"github.com/Safing/portbase/database/model"
"github.com/Safing/portbase/database/iterator"
"github.com/Safing/portbase/database/model"
"github.com/Safing/portbase/database/query"
)
// Interface defines the database storage API.
type Interface interface {
// Full
Exists(key string) (bool, error)
Get(key string) (model.Model, error)
Create(key string, model model.Model) error
Update(key string, model model.Model) error // create when not exists
UpdateOrCreate(key string, model model.Model) error // update, create if not exists.
Delete(key string) error
// Retrieve
Exists(key string) (bool, error)
Get(key string) (model.Model, error)
// Partial
// What happens if I mutate a value that does not yet exist? How would I know its type?
InsertPartial(key string, partialObject interface{})
InsertValue(key string, attribute string, value interface{})
// Modify
Create(model model.Model) error
Update(model model.Model) error // create when not exists
UpdateOrCreate(model model.Model) error // update, create if not exists.
Delete(key string) error
// Query
Query(*query.Query) (*iterator.Iterator, error)
// Partial
// What happens if I mutate a value that does not yet exist? How would I know its type?
InsertPartial(key string, partialObject interface{})
InsertValue(key string, attribute string, value interface{})
// Meta
LetExpire(key string, timestamp int64) error
MakeSecret(key string) error // only visible internal
MakeCrownJewel(key string) error // do not sync between devices
// Query
Query(q *query.Query, local, internal bool) (*iterator.Iterator, error)
// Meta
SetAbsoluteExpiry(key string, time int64)
SetRelativateExpiry(key string, duration int64)
MakeCrownJewel(key string)
MakeSecret(key string)
}