9
9
"github.com/rotationalio/honu/pkg/store/iterator"
10
10
"github.com/rotationalio/honu/pkg/store/key"
11
11
"github.com/rotationalio/honu/pkg/store/object"
12
- "github.com/rotationalio/honu/pkg/store/opts"
12
+
13
13
"github.com/syndtr/goleveldb/leveldb"
14
+ "github.com/syndtr/goleveldb/leveldb/util"
14
15
)
15
16
16
17
func Open (conf config.StoreConfig ) (engine * Engine , err error ) {
@@ -44,7 +45,7 @@ func (e *Engine) DB() *leveldb.DB {
44
45
45
46
// Returns the name of the engine type
46
47
func (e * Engine ) Engine () string {
47
- return "honu.LevelDBEngine "
48
+ return "leveldb "
48
49
}
49
50
50
51
// Close the database and flush all remaining writes to disk. LevelDB requires a close
@@ -57,60 +58,30 @@ func (e *Engine) Close() error {
57
58
// Implement engine.Store Interface
58
59
//===========================================================================
59
60
60
- func (e * Engine ) Has (key key.Key , ro * opts.ReadOptions ) (exists bool , err error ) {
61
- // TODO: tombstone handling
62
- if exists , err = e .ldb .Has (key [:], nil ); err != nil {
61
+ func (e * Engine ) Has (key key.Key ) (exists bool , err error ) {
62
+ if exists , err = e .ldb .Has (key , nil ); err != nil {
63
63
return exists , Wrap (err )
64
64
}
65
65
return exists , nil
66
66
}
67
67
68
- func (e * Engine ) Get (key key.Key , ro * opts.ReadOptions ) (_ object.Object , err error ) {
69
- // TODO: tombstone handling
68
+ func (e * Engine ) Get (key key.Key ) (_ object.Object , err error ) {
70
69
var val []byte
71
- if val , err = e .ldb .Get (key [:] , nil ); err != nil {
70
+ if val , err = e .ldb .Get (key , nil ); err != nil {
72
71
return nil , Wrap (err )
73
72
}
74
73
return object .Object (val ), nil
75
74
}
76
75
77
- func (e * Engine ) Put (key key.Key , obj object.Object , wo * opts.WriteOptions ) (err error ) {
78
- // TODO: do we need a transaction here?
79
- if wo .GetNoOverwrite () || wo .GetCheckUpdate () {
80
- var exists bool
81
- if exists , err = e .ldb .Has (key , nil ); err != nil {
82
- return Wrap (err )
83
- }
84
-
85
- if exists && wo .GetNoOverwrite () {
86
- return engine .ErrAlreadyExists
87
- }
88
-
89
- if ! exists && wo .GetCheckUpdate () {
90
- return engine .ErrNotFound
91
- }
92
- }
93
-
94
- if err = e .ldb .Put (key [:], obj [:], nil ); err != nil {
76
+ func (e * Engine ) Put (key key.Key , obj object.Object ) (err error ) {
77
+ if err = e .ldb .Put (key , obj , nil ); err != nil {
95
78
return Wrap (err )
96
79
}
97
80
return nil
98
81
}
99
82
100
- func (e * Engine ) Delete (key key.Key , wo * opts.WriteOptions ) (err error ) {
101
- // TODO: do we need a transaction here?
102
- if wo .CheckDelete {
103
- var exists bool
104
- if exists , err = e .ldb .Has (key , nil ); err != nil {
105
- return Wrap (err )
106
- }
107
-
108
- if ! exists {
109
- return engine .ErrNotFound
110
- }
111
- }
112
-
113
- if err = e .ldb .Delete (key [:], nil ); err != nil {
83
+ func (e * Engine ) Delete (key key.Key ) (err error ) {
84
+ if err = e .ldb .Delete (key , nil ); err != nil {
114
85
return Wrap (err )
115
86
}
116
87
return nil
@@ -120,8 +91,12 @@ func (e *Engine) Delete(key key.Key, wo *opts.WriteOptions) (err error) {
120
91
// Implement engine.Iterator Interface
121
92
//===========================================================================
122
93
123
- func (e * Engine ) Iter (prefix []byte , ro * opts.ReadOptions ) (_ iterator.Iterator , err error ) {
124
- return nil , nil
94
+ func (e * Engine ) Iter (prefix []byte ) (_ iterator.Iterator , err error ) {
95
+ return NewIterator (e .ldb .NewIterator (util .BytesPrefix (prefix ), nil )), nil
96
+ }
97
+
98
+ func (e * Engine ) Range (start , limit []byte ) (_ iterator.Iterator , err error ) {
99
+ return NewIterator (e .ldb .NewIterator (& util.Range {Start : start , Limit : limit }, nil )), nil
125
100
}
126
101
127
102
//===========================================================================
@@ -130,6 +105,8 @@ func (e *Engine) Iter(prefix []byte, ro *opts.ReadOptions) (_ iterator.Iterator,
130
105
131
106
func Wrap (err error ) error {
132
107
switch {
108
+ case err == nil :
109
+ return nil
133
110
case errors .Is (err , leveldb .ErrNotFound ):
134
111
return engine .ErrNotFound
135
112
case errors .Is (err , leveldb .ErrReadOnly ):
0 commit comments