mirror of
https://github.com/gofiber/storage.git
synced 2025-12-24 13:29:30 +08:00
🧹 introduce reset and close
This commit is contained in:
@@ -51,10 +51,10 @@ type Config struct {
|
||||
// Optional. Default is "127.0.0.1:11211"
|
||||
Servers string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -10,10 +10,10 @@ type Config struct {
|
||||
// Optional. Default is "127.0.0.1:11211"
|
||||
Servers string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// The socket read/write timeout.
|
||||
//
|
||||
|
||||
@@ -39,7 +39,7 @@ func New(config ...Config) *Storage {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if cfg.Clear {
|
||||
if cfg.Reset {
|
||||
if err := db.DeleteAll(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@@ -93,11 +93,16 @@ func (s *Storage) Delete(key string) error {
|
||||
return s.db.Delete(key)
|
||||
}
|
||||
|
||||
// Clear all keys
|
||||
func (s *Storage) Clear() error {
|
||||
// Reset all keys
|
||||
func (s *Storage) Reset() error {
|
||||
return s.db.DeleteAll()
|
||||
}
|
||||
|
||||
// Close the database
|
||||
func (s *Storage) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Acquire item from pool
|
||||
func (s *Storage) acquireItem() *mc.Item {
|
||||
return s.items.Get().(*mc.Item)
|
||||
|
||||
@@ -104,7 +104,7 @@ func Test_Memcache_Clear(t *testing.T) {
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
err = testStore.Clear()
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
|
||||
@@ -19,7 +19,7 @@ var ErrNotExist = errors.New("key does not exist")
|
||||
func (s *Storage) Get(key string) ([]byte, error)
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) Delete(key string) error
|
||||
func (s *Storage) Clear() error
|
||||
func (s *Storage) Reset() error
|
||||
```
|
||||
|
||||
### Installation
|
||||
|
||||
@@ -75,14 +75,19 @@ func (s *Storage) Delete(key string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Clear all keys
|
||||
func (s *Storage) Clear() error {
|
||||
// Reset all keys
|
||||
func (s *Storage) Reset() error {
|
||||
s.mux.Lock()
|
||||
s.db = make(map[string]entry)
|
||||
s.mux.Unlock()
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close the database
|
||||
func (s *Storage) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Storage) gc() {
|
||||
for t := range time.NewTicker(s.gcInterval).C {
|
||||
now := t.Unix()
|
||||
|
||||
@@ -104,7 +104,7 @@ func Test_Memory_Clear(t *testing.T) {
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
err = testStore.Clear()
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
|
||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
||||
func (s *Storage) Get(key string) ([]byte, error)
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) Delete(key string) error
|
||||
func (s *Storage) Clear() error
|
||||
func (s *Storage) Reset() error
|
||||
```
|
||||
### Installation
|
||||
MongoDB is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||
@@ -47,7 +47,7 @@ store := mongodb.New(mongodb.Config{
|
||||
Port: 27017,
|
||||
Database: "fiber",
|
||||
Collection: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
})
|
||||
```
|
||||
@@ -85,10 +85,10 @@ type Config struct {
|
||||
// Optional. Default is "fiber_storage"
|
||||
Collection string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// Time before deleting expired keys
|
||||
//
|
||||
@@ -104,7 +104,7 @@ var ConfigDefault = Config{
|
||||
Port: 27017,
|
||||
Database: "fiber",
|
||||
Collection: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
}
|
||||
```
|
||||
|
||||
@@ -36,10 +36,10 @@ type Config struct {
|
||||
// Optional. Default is "fiber_storage"
|
||||
Collection string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// Time before deleting expired keys
|
||||
//
|
||||
@@ -53,7 +53,7 @@ var ConfigDefault = Config{
|
||||
Port: 27017,
|
||||
Database: "fiber",
|
||||
Collection: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
}
|
||||
|
||||
|
||||
@@ -152,11 +152,16 @@ func (s *Storage) Delete(key string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Clear all keys by drop collection
|
||||
func (s *Storage) Clear() error {
|
||||
// Reset all keys by drop collection
|
||||
func (s *Storage) Reset() error {
|
||||
return s.col.Drop(context.Background())
|
||||
}
|
||||
|
||||
// Close the database
|
||||
func (s *Storage) Close() error {
|
||||
return s.db.Client().Disconnect(context.Background())
|
||||
}
|
||||
|
||||
// Acquire item from pool
|
||||
func (s *Storage) acquireItem() *item {
|
||||
return s.items.Get().(*item)
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
var testStore = New(Config{
|
||||
Clear: true,
|
||||
Reset: true,
|
||||
})
|
||||
|
||||
func Test_MongoDB_Set(t *testing.T) {
|
||||
@@ -106,7 +106,7 @@ func Test_MongoDB_Clear(t *testing.T) {
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
err = testStore.Clear()
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
|
||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
||||
func (s *Storage) Get(key string) ([]byte, error)
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) Delete(key string) error
|
||||
func (s *Storage) Clear() error
|
||||
func (s *Storage) Reset() error
|
||||
```
|
||||
### Installation
|
||||
MySQL is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||
@@ -47,7 +47,7 @@ store := mysql.New(mysql.Config{
|
||||
Port: 3306,
|
||||
Database: "fiber",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
})
|
||||
```
|
||||
@@ -85,10 +85,10 @@ type Config struct {
|
||||
// Optional. Default is "fiber_storage"
|
||||
Table string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// Time before deleting expired keys
|
||||
//
|
||||
@@ -104,7 +104,7 @@ var ConfigDefault = Config{
|
||||
Port: 3306,
|
||||
Database: "fiber",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
}
|
||||
```
|
||||
|
||||
@@ -37,10 +37,10 @@ type Config struct {
|
||||
// Optional. Default is "fiber_storage"
|
||||
Table string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// Time before deleting expired keys
|
||||
//
|
||||
@@ -62,7 +62,7 @@ var ConfigDefault = Config{
|
||||
Port: 3306,
|
||||
Database: "fiber",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
maxOpenConns: 100,
|
||||
maxIdleConns: 100,
|
||||
|
||||
@@ -18,7 +18,7 @@ type Storage struct {
|
||||
sqlSelect string
|
||||
sqlInsert string
|
||||
sqlDelete string
|
||||
sqlClear string
|
||||
sqlReset string
|
||||
sqlGC string
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ func New(config ...Config) *Storage {
|
||||
}
|
||||
|
||||
// Drop table if Clear set to true
|
||||
if cfg.Clear {
|
||||
if cfg.Reset {
|
||||
query := fmt.Sprintf(dropQuery, cfg.Table)
|
||||
if _, err = db.Exec(query); err != nil {
|
||||
_ = db.Close()
|
||||
@@ -83,7 +83,7 @@ func New(config ...Config) *Storage {
|
||||
sqlSelect: fmt.Sprintf("SELECT v, e FROM %s WHERE k=?;", cfg.Table),
|
||||
sqlInsert: fmt.Sprintf("INSERT INTO %s (k, v, e) VALUES (?,?,?) ON DUPLICATE KEY UPDATE v = ?, e = ?", cfg.Table),
|
||||
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=?", cfg.Table),
|
||||
sqlClear: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||
sqlReset: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= ?", cfg.Table),
|
||||
}
|
||||
|
||||
@@ -142,12 +142,17 @@ func (s *Storage) Delete(key string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Clear all keys
|
||||
func (s *Storage) Clear() error {
|
||||
_, err := s.db.Exec(s.sqlClear)
|
||||
// Reset all keys
|
||||
func (s *Storage) Reset() error {
|
||||
_, err := s.db.Exec(s.sqlReset)
|
||||
return err
|
||||
}
|
||||
|
||||
// Close the database
|
||||
func (s *Storage) Close() error {
|
||||
return s.db.Close()
|
||||
}
|
||||
|
||||
// Garbage collector to delete expired keys
|
||||
func (s *Storage) gc() {
|
||||
tick := time.NewTicker(s.gcInterval)
|
||||
|
||||
@@ -12,7 +12,7 @@ var testStore = New(Config{
|
||||
Database: os.Getenv("MYSQL_DATABASE"),
|
||||
Username: os.Getenv("MYSQL_USERNAME"),
|
||||
Password: os.Getenv("MYSQL_PASSWORD"),
|
||||
Clear: true,
|
||||
Reset: true,
|
||||
})
|
||||
|
||||
func Test_MYSQL_Set(t *testing.T) {
|
||||
@@ -110,7 +110,7 @@ func Test_MYSQL_Clear(t *testing.T) {
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
err = testStore.Clear()
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
|
||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
||||
func (s *Storage) Get(key string) ([]byte, error)
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) Delete(key string) error
|
||||
func (s *Storage) Clear() error
|
||||
func (s *Storage) Reset() error
|
||||
```
|
||||
### Installation
|
||||
Postgres is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||
@@ -47,7 +47,7 @@ store := postgres.New(postgres.Config{
|
||||
Port: 5432,
|
||||
Database: "fiber",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
})
|
||||
```
|
||||
@@ -86,10 +86,10 @@ type Config struct {
|
||||
// Optional. Default is "fiber_storage"
|
||||
Table string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// Time before deleting expired keys
|
||||
//
|
||||
@@ -105,7 +105,7 @@ var ConfigDefault = Config{
|
||||
Port: 5432,
|
||||
Database: "fiber",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
}
|
||||
```
|
||||
|
||||
@@ -36,10 +36,10 @@ type Config struct {
|
||||
// Optional. Default is "fiber_storage"
|
||||
Table string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// Time before deleting expired keys
|
||||
//
|
||||
@@ -89,7 +89,7 @@ var ConfigDefault = Config{
|
||||
Port: 5432,
|
||||
Database: "fiber",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
maxOpenConns: 100,
|
||||
maxIdleConns: 100,
|
||||
|
||||
@@ -19,7 +19,7 @@ type Storage struct {
|
||||
sqlSelect string
|
||||
sqlInsert string
|
||||
sqlDelete string
|
||||
sqlClear string
|
||||
sqlReset string
|
||||
sqlGC string
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ func New(config ...Config) *Storage {
|
||||
}
|
||||
|
||||
// Drop table if set to true
|
||||
if cfg.Clear {
|
||||
if cfg.Reset {
|
||||
if _, err = db.Exec(fmt.Sprintf(dropQuery, cfg.Table)); err != nil {
|
||||
_ = db.Close()
|
||||
panic(err)
|
||||
@@ -100,7 +100,7 @@ func New(config ...Config) *Storage {
|
||||
sqlSelect: fmt.Sprintf(`SELECT v, e FROM %s WHERE k=$1;`, cfg.Table),
|
||||
sqlInsert: fmt.Sprintf("INSERT INTO %s (k, v, e) VALUES ($1, $2, $3) ON CONFLICT (k) DO UPDATE SET v = $4, e = $5", cfg.Table),
|
||||
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=$1", cfg.Table),
|
||||
sqlClear: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||
sqlReset: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= $1", cfg.Table),
|
||||
}
|
||||
|
||||
@@ -156,12 +156,17 @@ func (s *Storage) Delete(key string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Clear all entries, including unexpired
|
||||
func (s *Storage) Clear() error {
|
||||
_, err := s.db.Exec(s.sqlClear)
|
||||
// Reset all entries, including unexpired
|
||||
func (s *Storage) Reset() error {
|
||||
_, err := s.db.Exec(s.sqlReset)
|
||||
return err
|
||||
}
|
||||
|
||||
// Close the database
|
||||
func (s *Storage) Close() error {
|
||||
return s.db.Close()
|
||||
}
|
||||
|
||||
// GC deletes all expired entries
|
||||
func (s *Storage) gc() {
|
||||
tick := time.NewTicker(s.gcInterval)
|
||||
|
||||
@@ -12,7 +12,7 @@ var testStore = New(Config{
|
||||
Database: os.Getenv("POSTGRES_DATABASE"),
|
||||
Username: os.Getenv("POSTGRES_USERNAME"),
|
||||
Password: os.Getenv("POSTGRES_PASSWORD"),
|
||||
Clear: true,
|
||||
Reset: true,
|
||||
})
|
||||
|
||||
func Test_Postgres_Set(t *testing.T) {
|
||||
@@ -110,7 +110,7 @@ func Test_Postgres_Clear(t *testing.T) {
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
err = testStore.Clear()
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
|
||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
||||
func (s *Storage) Get(key string) ([]byte, error)
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) Delete(key string) error
|
||||
func (s *Storage) Clear() error
|
||||
func (s *Storage) Reset() error
|
||||
```
|
||||
### Installation
|
||||
Redis is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||
@@ -48,7 +48,7 @@ store := redis.New(redis.Config{
|
||||
Username: "",
|
||||
Password: "",
|
||||
Database: 0,
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
})
|
||||
```
|
||||
|
||||
@@ -80,10 +80,10 @@ type Config struct {
|
||||
// Optional. Default is 0
|
||||
Database int
|
||||
|
||||
// Clear any existing keys in existing Collection
|
||||
// Reset clears any existing keys in existing Collection
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
}
|
||||
|
||||
```
|
||||
@@ -96,6 +96,6 @@ var ConfigDefault = Config{
|
||||
Username: "",
|
||||
Password: "",
|
||||
Database: 0,
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
}
|
||||
```
|
||||
|
||||
@@ -27,10 +27,10 @@ type Config struct {
|
||||
// Optional. Default is 0
|
||||
Database int
|
||||
|
||||
// Clear any existing keys in existing Collection
|
||||
// Reset clears any existing keys in existing Collection
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
////////////////////////////////////
|
||||
// Adaptor related config options //
|
||||
@@ -46,7 +46,7 @@ var ConfigDefault = Config{
|
||||
Username: "",
|
||||
Password: "",
|
||||
Database: 0,
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
}
|
||||
|
||||
// Helper function to set default values
|
||||
|
||||
@@ -36,7 +36,7 @@ func New(config ...Config) *Storage {
|
||||
}
|
||||
|
||||
// Empty collection if Clear is true
|
||||
if cfg.Clear {
|
||||
if cfg.Reset {
|
||||
if err := db.FlushDB(context.Background()).Err(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@@ -71,7 +71,12 @@ func (s *Storage) Delete(key string) error {
|
||||
return s.db.Del(context.Background(), key).Err()
|
||||
}
|
||||
|
||||
// Clear all keys
|
||||
func (s *Storage) Clear() error {
|
||||
// Reset all keys
|
||||
func (s *Storage) Reset() error {
|
||||
return s.db.FlushDB(context.Background()).Err()
|
||||
}
|
||||
|
||||
// Close the database
|
||||
func (s *Storage) Close() error {
|
||||
return s.db.Close()
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
var testStore = New(Config{
|
||||
Clear: true,
|
||||
Reset: true,
|
||||
})
|
||||
|
||||
func Test_Redis_Set(t *testing.T) {
|
||||
@@ -105,7 +105,7 @@ func Test_Redis_Clear(t *testing.T) {
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
err = testStore.Clear()
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
|
||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
||||
func (s *Storage) Get(key string) ([]byte, error)
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) Delete(key string) error
|
||||
func (s *Storage) Clear() error
|
||||
func (s *Storage) Reset() error
|
||||
```
|
||||
### Installation
|
||||
SQLite3 is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||
@@ -45,7 +45,7 @@ store := sqlite3.New()
|
||||
store := sqlite3.New(sqlite3.Config{
|
||||
Database: "./fiber.sqlite3",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
})
|
||||
```
|
||||
@@ -63,10 +63,10 @@ type Config struct {
|
||||
// Optional. Default is "fiber_storage"
|
||||
Table string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// Time before deleting expired keys
|
||||
//
|
||||
@@ -80,7 +80,7 @@ type Config struct {
|
||||
var ConfigDefault = Config{
|
||||
Database: "./fiber.sqlite3",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
}
|
||||
```
|
||||
|
||||
@@ -14,10 +14,10 @@ type Config struct {
|
||||
// Optional. Default is "fiber_storage"
|
||||
Table string
|
||||
|
||||
// Clear any existing keys in existing Table
|
||||
// Reset clears any existing keys in existing Table
|
||||
//
|
||||
// Optional. Default is false
|
||||
Clear bool
|
||||
Reset bool
|
||||
|
||||
// Time before deleting expired keys
|
||||
//
|
||||
@@ -38,7 +38,7 @@ var ConfigDefault = Config{
|
||||
// General config options
|
||||
Database: "./fiber.sqlite3",
|
||||
Table: "fiber_storage",
|
||||
Clear: false,
|
||||
Reset: false,
|
||||
GCInterval: 10 * time.Second,
|
||||
|
||||
// Adaptor related config options
|
||||
|
||||
@@ -19,7 +19,7 @@ type Storage struct {
|
||||
sqlSelect string
|
||||
sqlInsert string
|
||||
sqlDelete string
|
||||
sqlClear string
|
||||
sqlReset string
|
||||
sqlGC string
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ func New(config ...Config) *Storage {
|
||||
}
|
||||
|
||||
// Drop table if set to true
|
||||
if cfg.Clear {
|
||||
if cfg.Reset {
|
||||
if _, err = db.Exec(fmt.Sprintf(dropQuery, cfg.Table)); err != nil {
|
||||
_ = db.Close()
|
||||
panic(err)
|
||||
@@ -83,7 +83,7 @@ func New(config ...Config) *Storage {
|
||||
sqlSelect: fmt.Sprintf(`SELECT v, e FROM %s WHERE k=?;`, cfg.Table),
|
||||
sqlInsert: fmt.Sprintf("INSERT OR REPLACE INTO %s (k, v, e) VALUES (?,?,?)", cfg.Table),
|
||||
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=?", cfg.Table),
|
||||
sqlClear: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||
sqlReset: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= ?", cfg.Table),
|
||||
}
|
||||
|
||||
@@ -135,12 +135,17 @@ func (s *Storage) Delete(key string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Clear all entries, including unexpired
|
||||
func (s *Storage) Clear() error {
|
||||
_, err := s.db.Exec(s.sqlClear)
|
||||
// Reset all entries, including unexpired
|
||||
func (s *Storage) Reset() error {
|
||||
_, err := s.db.Exec(s.sqlReset)
|
||||
return err
|
||||
}
|
||||
|
||||
// Close the database
|
||||
func (s *Storage) Close() error {
|
||||
return s.db.Close()
|
||||
}
|
||||
|
||||
// GC deletes all expired entries
|
||||
func (s *Storage) gc() {
|
||||
tick := time.NewTicker(s.gcInterval)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
var testStore = New(Config{
|
||||
Clear: true,
|
||||
Reset: true,
|
||||
})
|
||||
|
||||
func Test_SQLite3_Set(t *testing.T) {
|
||||
@@ -107,7 +107,7 @@ func Test_SQLite3_Clear(t *testing.T) {
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
err = testStore.Clear()
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
|
||||
@@ -19,6 +19,9 @@ type Storage interface {
|
||||
// The key must not be "".
|
||||
Delete(key string) error
|
||||
|
||||
// Clear storage
|
||||
Clear() error
|
||||
// Reset the storage
|
||||
Reset() error
|
||||
|
||||
// Close the storage
|
||||
Close() error
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user