Fetching contributors…
Cannot retrieve contributors at this time
27 lines (20 sloc) 655 Bytes
// Copyright 2018 The Xorm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package xorm
// Transaction Execute sql wrapped in a transaction(abbr as tx), tx will automatic commit if no errors occurred
func (engine *Engine) Transaction(f func(*Session) (interface{}, error)) (interface{}, error) {
session := engine.NewSession()
defer session.Close()
if err := session.Begin(); err != nil {
return nil, err
result, err := f(session)
if err != nil {
return nil, err
if err := session.Commit(); err != nil {
return nil, err
return result, nil