// Apply executes a set of sqlite statements, within a transaction. All statements // will take effect, or none. func (c *TransactionExecuteCommandSet) Apply(server raft.Server) (interface{}, error) { log.Trace("Applying TransactionExecuteCommandSet of size %d", len(c.Stmts)) commitSuccess := false db := server.Context().(*db.DB) defer func() { if !commitSuccess { err := db.RollbackTransaction() if err != nil { log.Error("Failed to rollback transaction: %s", err.Error) } } }() err := db.StartTransaction() if err != nil { log.Error("Failed to start transaction:", err.Error()) return nil, err } for i := range c.Stmts { err = db.Execute(c.Stmts[i]) if err != nil { log.Error("Failed to execute statement within transaction", err.Error()) return nil, err } } err = db.CommitTransaction() if err != nil { log.Error("Failed to commit transaction:", err.Error()) return nil, err } else { commitSuccess = true } return nil, nil }
// Apply executes an sqlite statement. func (c *ExecuteCommand) Apply(server raft.Server) (interface{}, error) { log.Trace("Applying ExecuteCommand: '%s'", c.Stmt) db := server.Context().(*db.DB) return nil, db.Execute(c.Stmt) }