aboutsummaryrefslogtreecommitdiff
path: root/src/dedo.go
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-02-06 18:52:50 -0300
committerEuAndreh <eu@euandre.org>2025-02-06 18:52:50 -0300
commit07d331a35e3e13eced1bfd3cfbc2581323922036 (patch)
tree6128b77781515a8573098963afcfe5a13d135221 /src/dedo.go
parentsrc/dedo.go: Start implementation of in-memory variation (diff)
downloaddedo-07d331a35e3e13eced1bfd3cfbc2581323922036.tar.gz
dedo-07d331a35e3e13eced1bfd3cfbc2581323922036.tar.xz
src/dedo.go: Introduce ITx interface
Diffstat (limited to 'src/dedo.go')
-rw-r--r--src/dedo.go46
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,