forked from mirror/ledisdb
58 lines
790 B
Go
58 lines
790 B
Go
package server
|
|
|
|
import (
|
|
"errors"
|
|
)
|
|
|
|
var errTxMiss = errors.New("transaction miss")
|
|
|
|
func beginCommand(c *client) error {
|
|
tx, err := c.db.Begin()
|
|
if err == nil {
|
|
c.tx = tx
|
|
c.db = tx.DB
|
|
c.resp.writeStatus(OK)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func commitCommand(c *client) error {
|
|
if c.tx == nil {
|
|
return errTxMiss
|
|
}
|
|
|
|
err := c.tx.Commit()
|
|
c.db, _ = c.ldb.Select(c.tx.Index())
|
|
c.tx = nil
|
|
|
|
if err == nil {
|
|
c.resp.writeStatus(OK)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func rollbackCommand(c *client) error {
|
|
if c.tx == nil {
|
|
return errTxMiss
|
|
}
|
|
|
|
err := c.tx.Rollback()
|
|
|
|
c.db, _ = c.ldb.Select(c.tx.Index())
|
|
c.tx = nil
|
|
|
|
if err == nil {
|
|
c.resp.writeStatus(OK)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func init() {
|
|
register("begin", beginCommand)
|
|
register("commit", commitCommand)
|
|
register("rollback", rollbackCommand)
|
|
}
|