Enable import / export of database transaction log
This commit is contained in:
parent
58ac9d9424
commit
e86857bdf7
4 changed files with 57 additions and 16 deletions
32
db/db.go
32
db/db.go
|
@ -16,6 +16,7 @@ package db
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
|
@ -105,14 +106,30 @@ func Exit() {
|
|||
|
||||
}
|
||||
|
||||
// Begin opens a new manual transaction with the data layer
|
||||
func Begin(rw bool) (txn kvs.TX, err error) {
|
||||
|
||||
return db.Begin(rw)
|
||||
|
||||
// Import loads database operations from a reader.
|
||||
// This can be used to playback a database snapshot
|
||||
// into an already running database.
|
||||
func Import(r io.Reader) (err error) {
|
||||
return db.Import(r)
|
||||
}
|
||||
|
||||
// Execute parses the query and executes it against the data layer
|
||||
// Export saves all database operations to a writer.
|
||||
// This can be used to save a database snapshot
|
||||
// to a secondary file or stream.
|
||||
func Export(w io.Writer) (err error) {
|
||||
return db.Export(w)
|
||||
}
|
||||
|
||||
// Begin begins a new read / write transaction
|
||||
// with the underlying database, and returns
|
||||
// the transaction, or any error which occured.
|
||||
func Begin(rw bool) (txn kvs.TX, err error) {
|
||||
return db.Begin(rw)
|
||||
}
|
||||
|
||||
// Execute parses a single sql query, or multiple
|
||||
// sql queries, and executes them serially against
|
||||
// the underlying data layer.
|
||||
func Execute(ctx *fibre.Context, txt interface{}, vars map[string]interface{}) (out []*Response, err error) {
|
||||
|
||||
// If no preset variables have been defined
|
||||
|
@ -142,6 +159,9 @@ func Execute(ctx *fibre.Context, txt interface{}, vars map[string]interface{}) (
|
|||
|
||||
}
|
||||
|
||||
// Process takes a parsed set of sql queries and
|
||||
// executes them serially against the underlying
|
||||
// data layer.
|
||||
func Process(ctx *fibre.Context, ast *sql.Query, vars map[string]interface{}) (out []*Response, err error) {
|
||||
|
||||
// Create 2 channels, one for force quitting
|
||||
|
|
|
@ -14,8 +14,12 @@
|
|||
|
||||
package kvs
|
||||
|
||||
import "io"
|
||||
|
||||
// DB represents a database implementation
|
||||
type DB interface {
|
||||
Begin(bool) (TX, error)
|
||||
Import(io.Reader) error
|
||||
Export(io.Writer) error
|
||||
Close() error
|
||||
}
|
||||
|
|
15
kvs/ds.go
15
kvs/ds.go
|
@ -15,6 +15,7 @@
|
|||
package kvs
|
||||
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"github.com/abcum/surreal/cnf"
|
||||
|
@ -66,6 +67,20 @@ func (ds *DS) Begin(writable bool) (txn TX, err error) {
|
|||
return ds.db.Begin(writable)
|
||||
}
|
||||
|
||||
// Import loads database operations from a reader.
|
||||
// This can be used to playback a database snapshot
|
||||
// into an already running database.
|
||||
func (ds *DS) Import(r io.Reader) (err error) {
|
||||
return ds.db.Import(r)
|
||||
}
|
||||
|
||||
// Export saves all database operations to a writer.
|
||||
// This can be used to save a database snapshot
|
||||
// to a secondary file or stream.
|
||||
func (ds *DS) Export(w io.Writer) (err error) {
|
||||
return ds.db.Export(w)
|
||||
}
|
||||
|
||||
// Close closes the underlying rixxdb / dendrodb
|
||||
// database connection, enabling the underlying
|
||||
// database to clean up remainging transactions.
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
package rixxdb
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/abcum/rixxdb"
|
||||
"github.com/abcum/surreal/kvs"
|
||||
)
|
||||
|
@ -24,22 +26,22 @@ type DB struct {
|
|||
}
|
||||
|
||||
func (db *DB) Begin(writable bool) (txn kvs.TX, err error) {
|
||||
|
||||
pntr, err := db.pntr.Begin(writable)
|
||||
if err != nil {
|
||||
err = &kvs.DSError{Err: err}
|
||||
if pntr != nil {
|
||||
pntr.Cancel()
|
||||
}
|
||||
var pntr *rixxdb.TX
|
||||
if pntr, err = db.pntr.Begin(writable); err != nil {
|
||||
err = &kvs.DBError{Err: err}
|
||||
return
|
||||
}
|
||||
|
||||
return &TX{pntr: pntr}, err
|
||||
}
|
||||
|
||||
func (db *DB) Import(r io.Reader) (err error) {
|
||||
return db.pntr.Load(r)
|
||||
}
|
||||
|
||||
func (db *DB) Export(w io.Writer) (err error) {
|
||||
return db.pntr.Save(w)
|
||||
}
|
||||
|
||||
func (db *DB) Close() (err error) {
|
||||
|
||||
return db.pntr.Close()
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue