mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* Add Close() function to all the iterators * Add defer iterator.Close() whenever we open an iterator * Add isClosed to all iterators and panic/return error if used after closing Co-authored-by: Svarog <feanorr@gmail.com>
71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
package database
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/domain/consensus/model"
|
|
"github.com/kaspanet/kaspad/infrastructure/db/database"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type dbCursor struct {
|
|
cursor database.Cursor
|
|
isClosed bool
|
|
}
|
|
|
|
func (d dbCursor) Next() bool {
|
|
if d.isClosed {
|
|
panic("Tried using a closed DBCursor")
|
|
}
|
|
|
|
return d.cursor.Next()
|
|
}
|
|
|
|
func (d dbCursor) First() bool {
|
|
if d.isClosed {
|
|
panic("Tried using a closed DBCursor")
|
|
}
|
|
return d.cursor.First()
|
|
}
|
|
|
|
func (d dbCursor) Seek(key model.DBKey) error {
|
|
if d.isClosed {
|
|
return errors.New("Tried using a closed DBCursor")
|
|
}
|
|
return d.cursor.Seek(dbKeyToDatabaseKey(key))
|
|
}
|
|
|
|
func (d dbCursor) Key() (model.DBKey, error) {
|
|
if d.isClosed {
|
|
return nil, errors.New("Tried using a closed DBCursor")
|
|
}
|
|
key, err := d.cursor.Key()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return newDBKey(key), nil
|
|
}
|
|
|
|
func (d dbCursor) Value() ([]byte, error) {
|
|
if d.isClosed {
|
|
return nil, errors.New("Tried using a closed DBCursor")
|
|
}
|
|
return d.cursor.Value()
|
|
}
|
|
|
|
func (d dbCursor) Close() error {
|
|
if d.isClosed {
|
|
return errors.New("Tried using a closed DBCursor")
|
|
}
|
|
d.isClosed = true
|
|
err := d.cursor.Close()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
d.cursor = nil
|
|
return nil
|
|
}
|
|
|
|
func newDBCursor(cursor database.Cursor) model.DBCursor {
|
|
return &dbCursor{cursor: cursor}
|
|
}
|