mirror of
https://bitbucket.org/s_l_teichmann/mtsatellite
synced 2024-12-23 16:50:18 +01:00
Made key encoder/decoder variable in SQLite backend. TODO: Do the same in LevelDB backend.
This commit is contained in:
parent
83c160eb90
commit
24b9236e41
7
main.go
7
main.go
@ -13,6 +13,8 @@ import (
|
||||
"os/signal"
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"bitbucket.org/s_l_teichmann/mtredisalize/common"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -61,7 +63,10 @@ func main() {
|
||||
}
|
||||
|
||||
if driver == "sqlite" {
|
||||
if backend, err = NewSqliteBackend(args[0]); err != nil {
|
||||
if backend, err = NewSqliteBackend(
|
||||
args[0],
|
||||
common.EncodeStringToBytes,
|
||||
common.DecodeStringFromBytes); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
} else {
|
||||
|
16
sqlite.go
16
sqlite.go
@ -27,6 +27,8 @@ const (
|
||||
|
||||
type SqliteBackend struct {
|
||||
db *sql.DB
|
||||
encoder common.KeyEncoder
|
||||
decoder common.KeyDecoder
|
||||
existsStmt *sql.Stmt
|
||||
fetchStmt *sql.Stmt
|
||||
insertStmt *sql.Stmt
|
||||
@ -53,7 +55,10 @@ func (ss *SqliteSession) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewSqliteBackend(path string) (sqlb *SqliteBackend, err error) {
|
||||
func NewSqliteBackend(
|
||||
path string,
|
||||
encoder common.KeyEncoder,
|
||||
decoder common.KeyDecoder) (sqlb *SqliteBackend, err error) {
|
||||
|
||||
res := SqliteBackend{}
|
||||
|
||||
@ -91,6 +96,9 @@ func NewSqliteBackend(path string) (sqlb *SqliteBackend, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
res.encoder = encoder
|
||||
res.decoder = decoder
|
||||
|
||||
sqlb = &res
|
||||
return
|
||||
}
|
||||
@ -139,7 +147,7 @@ func (ss *SqliteSession) txStmt(stmt *sql.Stmt) *sql.Stmt {
|
||||
|
||||
func (ss *SqliteSession) Fetch(hash, key []byte) (data []byte, err error) {
|
||||
var pos int64
|
||||
if pos, err = common.DecodeStringFromBytes(key); err != nil {
|
||||
if pos, err = ss.backend.decoder(key); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@ -161,7 +169,7 @@ func (ss *SqliteSession) InTransaction() bool {
|
||||
|
||||
func (ss *SqliteSession) Store(hash, key, value []byte) (exists bool, err error) {
|
||||
var pos int64
|
||||
if pos, err = common.DecodeStringFromBytes(key); err != nil {
|
||||
if pos, err = ss.backend.decoder(key); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@ -249,7 +257,7 @@ func (ss *SqliteSession) AllKeys(hash []byte) (keys chan []byte, n int, err erro
|
||||
break
|
||||
}
|
||||
var encoded []byte
|
||||
if encoded, err = common.EncodeStringToBytes(key); err != nil {
|
||||
if encoded, err = ss.backend.encoder(key); err != nil {
|
||||
log.Printf("Cannot encode key: %d %s\n", key, err)
|
||||
break
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user