fix compile errors

This commit is contained in:
prpeh 2025-06-04 12:42:09 +07:00
parent 8d7cc0e5aa
commit 6f76fec4c5
7 changed files with 32 additions and 11 deletions

View file

@ -223,6 +223,11 @@ func (b *tableBatch) Delete(key []byte) error {
return b.batch.Delete(append([]byte(b.prefix), key...))
}
// DeleteRange removes all keys in the range [start, end) from the batch for later committing.
func (b *tableBatch) DeleteRange(start, end []byte) error {
return b.batch.DeleteRange(append([]byte(b.prefix), start...), append([]byte(b.prefix), end...))
}
// ValueSize retrieves the amount of data queued up for writing.
func (b *tableBatch) ValueSize() int {
return b.batch.ValueSize()

View file

@ -24,10 +24,7 @@ const IdealBatchSize = 100 * 1024
// when Write is called. A batch cannot be used concurrently.
type Batch interface {
KeyValueWriter
// DeleteRange deletes all of the keys (and values) in the range [start,end)
// (inclusive on start, exclusive on end).
DeleteRange(start, end []byte) error
KeyValueRangeDeleter
// ValueSize retrieves the amount of data queued up for writing.
ValueSize() int

View file

@ -38,7 +38,12 @@ type KeyValueWriter interface {
// Delete removes the key from the key-value data store.
Delete(key []byte) error
}
var ErrTooManyKeys = errors.New("too many keys in deleted range")
// KeyValueRangeDeleter wraps the DeleteRange method of a backing data store.
type KeyValueRangeDeleter interface {
// DeleteRange deletes all of the keys (and values) in the range [start,end)
// (inclusive on start, exclusive on end).
// Some implementations of DeleteRange may return ErrTooManyKeys after
@ -46,8 +51,6 @@ type KeyValueWriter interface {
DeleteRange(start, end []byte) error
}
var ErrTooManyKeys = errors.New("too many keys in deleted range")
// KeyValueStater wraps the Stat method of a backing data store.
type KeyValueStater interface {
// Stat returns the statistic data of the database.
@ -80,6 +83,7 @@ type KeyValueStore interface {
KeyValueWriter
KeyValueStater
KeyValueSyncer
KeyValueRangeDeleter
Batcher
Iteratee
Compacter

View file

@ -574,7 +574,12 @@ func (r *replayer) DeleteRange(start, end []byte) {
if r.failure != nil {
return
}
r.failure = r.writer.DeleteRange(start, end)
// Check if the writer also supports range deletion
if rangeDeleter, ok := r.writer.(ethdb.KeyValueRangeDeleter); ok {
r.failure = rangeDeleter.DeleteRange(start, end)
} else {
r.failure = fmt.Errorf("ethdb.KeyValueWriter does not implement DeleteRange")
}
}
// bytesPrefixRange returns key range that satisfy

View file

@ -19,6 +19,7 @@ package memorydb
import (
"errors"
"fmt"
"sort"
"strconv"
"strings"
@ -362,8 +363,12 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error {
}
} else if keyvalue.rangeFrom != "" || keyvalue.rangeTo != "" {
// Range deletion
if err := w.DeleteRange([]byte(keyvalue.rangeFrom), []byte(keyvalue.rangeTo)); err != nil {
return err
if rangeDeleter, ok := w.(ethdb.KeyValueRangeDeleter); ok {
if err := rangeDeleter.DeleteRange([]byte(keyvalue.rangeFrom), []byte(keyvalue.rangeTo)); err != nil {
return err
}
} else {
return fmt.Errorf("ethdb.KeyValueWriter does not implement DeleteRange")
}
}
continue

View file

@ -670,8 +670,12 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error {
}
} else if kind == pebble.InternalKeyKindRangeDelete {
// For range deletion, k is the start key and v is the end key
if err = w.DeleteRange(k, v); err != nil {
return err
if rangeDeleter, ok := w.(ethdb.KeyValueRangeDeleter); ok {
if err = rangeDeleter.DeleteRange(k, v); err != nil {
return err
}
} else {
return fmt.Errorf("ethdb.KeyValueWriter does not implement DeleteRange")
}
} else {
return fmt.Errorf("unhandled operation, keytype: %v", kind)

View file

@ -876,6 +876,7 @@ func (b *spongeBatch) Put(key, value []byte) error {
return nil
}
func (b *spongeBatch) Delete(key []byte) error { panic("implement me") }
func (b *spongeBatch) DeleteRange(start, end []byte) error { panic("implement me") }
func (b *spongeBatch) ValueSize() int { return 100 }
func (b *spongeBatch) Write() error { return nil }
func (b *spongeBatch) Reset() {}