forked from Shiloh/githaven
c61b902538
* Upgrade xorm to v1.0.0 * small nit * Fix tests * Update xorm * Update xorm * fix go.sum * fix test * Fix bug when dump * Fix bug * update xorm to latest * Fix migration test * update xorm to latest * Fix import order * Use xorm tag
95 lines
1.8 KiB
Go
95 lines
1.8 KiB
Go
// Copyright 2020 The Xorm Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package caches
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/syndtr/goleveldb/leveldb"
|
|
)
|
|
|
|
// LevelDBStore implements CacheStore provide local machine
|
|
type LevelDBStore struct {
|
|
store *leveldb.DB
|
|
Debug bool
|
|
v interface{}
|
|
}
|
|
|
|
var _ CacheStore = &LevelDBStore{}
|
|
|
|
func NewLevelDBStore(dbfile string) (*LevelDBStore, error) {
|
|
db := &LevelDBStore{}
|
|
h, err := leveldb.OpenFile(dbfile, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
db.store = h
|
|
return db, nil
|
|
}
|
|
|
|
func (s *LevelDBStore) Put(key string, value interface{}) error {
|
|
val, err := Encode(value)
|
|
if err != nil {
|
|
if s.Debug {
|
|
log.Println("[LevelDB]EncodeErr: ", err, "Key:", key)
|
|
}
|
|
return err
|
|
}
|
|
err = s.store.Put([]byte(key), val, nil)
|
|
if err != nil {
|
|
if s.Debug {
|
|
log.Println("[LevelDB]PutErr: ", err, "Key:", key)
|
|
}
|
|
return err
|
|
}
|
|
if s.Debug {
|
|
log.Println("[LevelDB]Put: ", key)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (s *LevelDBStore) Get(key string) (interface{}, error) {
|
|
data, err := s.store.Get([]byte(key), nil)
|
|
if err != nil {
|
|
if s.Debug {
|
|
log.Println("[LevelDB]GetErr: ", err, "Key:", key)
|
|
}
|
|
if err == leveldb.ErrNotFound {
|
|
return nil, ErrNotExist
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
err = Decode(data, &s.v)
|
|
if err != nil {
|
|
if s.Debug {
|
|
log.Println("[LevelDB]DecodeErr: ", err, "Key:", key)
|
|
}
|
|
return nil, err
|
|
}
|
|
if s.Debug {
|
|
log.Println("[LevelDB]Get: ", key, s.v)
|
|
}
|
|
return s.v, err
|
|
}
|
|
|
|
func (s *LevelDBStore) Del(key string) error {
|
|
err := s.store.Delete([]byte(key), nil)
|
|
if err != nil {
|
|
if s.Debug {
|
|
log.Println("[LevelDB]DelErr: ", err, "Key:", key)
|
|
}
|
|
return err
|
|
}
|
|
if s.Debug {
|
|
log.Println("[LevelDB]Del: ", key)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (s *LevelDBStore) Close() {
|
|
s.store.Close()
|
|
}
|