You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.3 KiB
62 lines
1.3 KiB
//go:build !(js && wasm) |
|
|
|
package bbolt |
|
|
|
import ( |
|
bolt "go.etcd.io/bbolt" |
|
) |
|
|
|
const markerPrefix = "marker:" |
|
|
|
// SetMarker sets a metadata marker. |
|
func (b *B) SetMarker(key string, value []byte) error { |
|
return b.db.Update(func(tx *bolt.Tx) error { |
|
bucket := tx.Bucket(bucketMeta) |
|
if bucket == nil { |
|
return nil |
|
} |
|
return bucket.Put([]byte(markerPrefix+key), value) |
|
}) |
|
} |
|
|
|
// GetMarker gets a metadata marker. |
|
func (b *B) GetMarker(key string) (value []byte, err error) { |
|
err = b.db.View(func(tx *bolt.Tx) error { |
|
bucket := tx.Bucket(bucketMeta) |
|
if bucket == nil { |
|
return nil |
|
} |
|
data := bucket.Get([]byte(markerPrefix + key)) |
|
if data != nil { |
|
value = make([]byte, len(data)) |
|
copy(value, data) |
|
} |
|
return nil |
|
}) |
|
return |
|
} |
|
|
|
// HasMarker checks if a marker exists. |
|
func (b *B) HasMarker(key string) bool { |
|
var exists bool |
|
b.db.View(func(tx *bolt.Tx) error { |
|
bucket := tx.Bucket(bucketMeta) |
|
if bucket == nil { |
|
return nil |
|
} |
|
exists = bucket.Get([]byte(markerPrefix+key)) != nil |
|
return nil |
|
}) |
|
return exists |
|
} |
|
|
|
// DeleteMarker deletes a marker. |
|
func (b *B) DeleteMarker(key string) error { |
|
return b.db.Update(func(tx *bolt.Tx) error { |
|
bucket := tx.Bucket(bucketMeta) |
|
if bucket == nil { |
|
return nil |
|
} |
|
return bucket.Delete([]byte(markerPrefix + key)) |
|
}) |
|
}
|
|
|