mirror of
https://github.com/ergochat/ergo.git
synced 2025-12-20 02:00:11 -08:00
upgrade buntdb
This commit is contained in:
parent
ce41f501c9
commit
82c50cc497
4 changed files with 34 additions and 10 deletions
38
vendor/github.com/tidwall/buntdb/buntdb.go
generated
vendored
38
vendor/github.com/tidwall/buntdb/buntdb.go
generated
vendored
|
|
@ -61,6 +61,8 @@ var (
|
|||
ErrTxIterating = errors.New("tx is iterating")
|
||||
)
|
||||
|
||||
const useAbsEx = true
|
||||
|
||||
// DB represents a collection of key-value pairs that persist on disk.
|
||||
// Transactions are used for all forms of data access to the DB.
|
||||
type DB struct {
|
||||
|
|
@ -895,24 +897,35 @@ func (db *DB) readLoad(rd io.Reader, modTime time.Time) (n int64, err error) {
|
|||
return totalSize, ErrInvalid
|
||||
}
|
||||
if len(parts) == 5 {
|
||||
if strings.ToLower(parts[3]) != "ex" {
|
||||
arg := strings.ToLower(parts[3])
|
||||
if arg != "ex" && arg != "ae" {
|
||||
return totalSize, ErrInvalid
|
||||
}
|
||||
ex, err := strconv.ParseUint(parts[4], 10, 64)
|
||||
ex, err := strconv.ParseInt(parts[4], 10, 64)
|
||||
if err != nil {
|
||||
return totalSize, err
|
||||
}
|
||||
var exat time.Time
|
||||
now := time.Now()
|
||||
dur := (time.Duration(ex) * time.Second) - now.Sub(modTime)
|
||||
if dur > 0 {
|
||||
if arg == "ex" {
|
||||
dur := (time.Duration(ex) * time.Second) - now.Sub(modTime)
|
||||
exat = now.Add(dur)
|
||||
} else {
|
||||
exat = time.Unix(ex, 0)
|
||||
}
|
||||
if exat.After(now) {
|
||||
db.insertIntoDatabase(&dbItem{
|
||||
key: parts[1],
|
||||
val: parts[2],
|
||||
opts: &dbItemOpts{
|
||||
ex: true,
|
||||
exat: now.Add(dur),
|
||||
exat: exat,
|
||||
},
|
||||
})
|
||||
} else {
|
||||
db.deleteFromDatabase(&dbItem{
|
||||
key: parts[1],
|
||||
})
|
||||
}
|
||||
} else {
|
||||
db.insertIntoDatabase(&dbItem{key: parts[1], val: parts[2]})
|
||||
|
|
@ -1330,13 +1343,19 @@ func appendBulkString(buf []byte, s string) []byte {
|
|||
// writeSetTo writes an item as a single SET record to the a bufio Writer.
|
||||
func (dbi *dbItem) writeSetTo(buf []byte, now time.Time) []byte {
|
||||
if dbi.opts != nil && dbi.opts.ex {
|
||||
ex := dbi.opts.exat.Sub(now) / time.Second
|
||||
buf = appendArray(buf, 5)
|
||||
buf = appendBulkString(buf, "set")
|
||||
buf = appendBulkString(buf, dbi.key)
|
||||
buf = appendBulkString(buf, dbi.val)
|
||||
buf = appendBulkString(buf, "ex")
|
||||
buf = appendBulkString(buf, strconv.FormatUint(uint64(ex), 10))
|
||||
if useAbsEx {
|
||||
ex := dbi.opts.exat.Unix()
|
||||
buf = appendBulkString(buf, "ae")
|
||||
buf = appendBulkString(buf, strconv.FormatUint(uint64(ex), 10))
|
||||
} else {
|
||||
ex := dbi.opts.exat.Sub(now) / time.Second
|
||||
buf = appendBulkString(buf, "ex")
|
||||
buf = appendBulkString(buf, strconv.FormatUint(uint64(ex), 10))
|
||||
}
|
||||
} else {
|
||||
buf = appendArray(buf, 3)
|
||||
buf = appendBulkString(buf, "set")
|
||||
|
|
@ -1622,6 +1641,9 @@ func (tx *Tx) scan(desc, gt, lt bool, index, start, stop string,
|
|||
// wrap a btree specific iterator around the user-defined iterator.
|
||||
iter := func(item interface{}) bool {
|
||||
dbi := item.(*dbItem)
|
||||
if dbi.expired() {
|
||||
return true
|
||||
}
|
||||
return iterator(dbi.key, dbi.val)
|
||||
}
|
||||
var tr *btree.BTree
|
||||
|
|
|
|||
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
|
|
@ -48,7 +48,7 @@ github.com/okzk/sdnotify
|
|||
# github.com/tidwall/btree v1.4.2
|
||||
## explicit; go 1.18
|
||||
github.com/tidwall/btree
|
||||
# github.com/tidwall/buntdb v1.2.10
|
||||
# github.com/tidwall/buntdb v1.3.1
|
||||
## explicit; go 1.18
|
||||
github.com/tidwall/buntdb
|
||||
# github.com/tidwall/gjson v1.14.3
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue