diff options
author | EuAndreh <eu@euandre.org> | 2025-02-06 18:52:50 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2025-02-06 18:52:50 -0300 |
commit | 07d331a35e3e13eced1bfd3cfbc2581323922036 (patch) | |
tree | 6128b77781515a8573098963afcfe5a13d135221 /src/dedo.go | |
parent | src/dedo.go: Start implementation of in-memory variation (diff) | |
download | dedo-07d331a35e3e13eced1bfd3cfbc2581323922036.tar.gz dedo-07d331a35e3e13eced1bfd3cfbc2581323922036.tar.xz |
src/dedo.go: Introduce ITx interface
Diffstat (limited to 'src/dedo.go')
-rw-r--r-- | src/dedo.go | 46 |
1 files changed, 31 insertions, 15 deletions
diff --git a/src/dedo.go b/src/dedo.go index a6e951a..a439ac6 100644 --- a/src/dedo.go +++ b/src/dedo.go @@ -113,10 +113,26 @@ type InMemory struct{ *pds.Map[[]byte, Value] } +type ITx interface{ + CreateBucket ([]byte) (*Bucket, error) + CreateBucketIfNotExists([]byte) (*Bucket, error) + Bucket([]byte) *Bucket + DeleteBucket([]byte) error + + Cursor() *Cursor + ForEach(func([]byte, *Bucket) error) error + + OnCommit(func()) + + WriteTo(io.Writer) (int64, error) + + Check() <-chan error +} + type IDedo interface{ Close() error - View (func(tx *Tx) error) error - Update(func(tx *Tx) error) error + View (func(tx ITx) error) error + Update(func(tx ITx) error) error Path() string } @@ -176,7 +192,7 @@ type OpenOptionsT struct{ } type call struct { - fn func(*Tx) error + fn func(ITx) error err chan<- error } @@ -1645,11 +1661,11 @@ func (m *InMemory) Path() string { return "" } -func (m *InMemory) Update(func(*Tx) error) error { +func (m *InMemory) Update(func(ITx) error) error { return nil } -func (m *InMemory) View(func(*Tx) error) error { +func (m *InMemory) View(func(ITx) error) error { return nil } @@ -1982,7 +1998,7 @@ func (db *DB) removeTx(tx *Tx) { /// /// Attempting to manually commit or rollback within the function will cause a /// panic. -func (db *DB) Update(fn func(*Tx) error) error { +func (db *DB) Update(fn func(ITx) error) error { t, err := db.begin(true) if err != nil { return err @@ -2011,7 +2027,7 @@ func (db *DB) Update(fn func(*Tx) error) error { /// the DB.View() method. /// /// Attempting to manually rollback within the function will cause a panic. -func (db *DB) View(fn func(*Tx) error) error { +func (db *DB) View(fn func(ITx) error) error { t, err := db.begin(false) if err != nil { return err @@ -2059,7 +2075,7 @@ func needsNewBatch(batch *batch, max int) bool { /// DB.MaxBatchDelay, respectively. /// /// DB.Batch() is only useful when there are multiple goroutines calling it. -func (db *DB) Batch(fn func(*Tx) error) error { +func (db *DB) Batch(fn func(ITx) error) error { errCh := make(chan error, 1) db.batchMu.Lock() @@ -2108,7 +2124,7 @@ func (b *batch) run() { retry: for len(b.calls) > 0 { failIdx := -1 - err := b.db.Update(func(tx *Tx) error { + err := b.db.Update(func(tx ITx) error { for i, c := range b.calls { err := safelyCall(c.fn, tx) if err != nil { @@ -2149,7 +2165,7 @@ func (p panicked) Error() string { return fmt.Sprintf("panic: %v", p.reason) } -func safelyCall(fn func(*Tx) error, tx *Tx) (err error) { +func safelyCall(fn func(ITx) error, tx ITx) (err error) { defer func() { p := recover() if p != nil { @@ -3869,7 +3885,7 @@ func setGetopt(args argsT, w io.Writer) (argsT, bool) { } func checkExec(args argsT, db IDedo, _r io.Reader, _w io.Writer) error { - return db.View(func(tx *Tx) error { + return db.View(func(tx ITx) error { var errs error for err := range tx.Check() { errs = g.WrapErrors(errs, err) @@ -3879,7 +3895,7 @@ func checkExec(args argsT, db IDedo, _r io.Reader, _w io.Writer) error { } func getExec(args argsT, db IDedo, r io.Reader, w io.Writer) error { - return db.View(func(tx *Tx) error { + return db.View(func(tx ITx) error { bucket := tx.Bucket(args.bucket) if bucket == nil { return ErrBucketNotFound @@ -3896,7 +3912,7 @@ func getExec(args argsT, db IDedo, r io.Reader, w io.Writer) error { } func setExec(args argsT, db IDedo, r io.Reader, w io.Writer) error { - return db.Update(func(tx *Tx) error { + return db.Update(func(tx ITx) error { bucket, err := tx.CreateBucketIfNotExists(args.bucket) if err != nil { return err @@ -3907,7 +3923,7 @@ func setExec(args argsT, db IDedo, r io.Reader, w io.Writer) error { } func rmExec(args argsT, db IDedo, r io.Reader, w io.Writer) error { - return db.Update(func(tx *Tx) error { + return db.Update(func(tx ITx) error { bucket := tx.Bucket(args.bucket) if bucket == nil { return ErrBucketNotFound @@ -3918,7 +3934,7 @@ func rmExec(args argsT, db IDedo, r io.Reader, w io.Writer) error { } func listExec(args argsT, db IDedo, r io.Reader, w io.Writer) error { - return db.View(func(tx *Tx) error { + return db.View(func(tx ITx) error { if len(args.bucket) == 0 { return tx.ForEach(func( name []byte, |