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  }