github.com/ladydascalie/elvish@v0.0.0-20170703214355-2964dd3ece7f/store/sqlutil.go (about) 1 package store 2 3 import "database/sql" 4 5 func hasColumn(rows *sql.Rows, colname string) (bool, error) { 6 cols, err := rows.Columns() 7 if err != nil { 8 return false, err 9 } 10 for _, col := range cols { 11 if col == colname { 12 return true, nil 13 } 14 } 15 return false, rows.Err() 16 } 17 18 // transaction creates a Tx and calls f on it. It commits or rollbacks the 19 // transaction depending on whether f succeeded. 20 func transaction(db *sql.DB, f func(*sql.Tx) error) error { 21 tx, err := db.Begin() 22 if err != nil { 23 return err 24 } 25 err = f(tx) 26 if err != nil { 27 return tx.Rollback() 28 } 29 return tx.Commit() 30 }