func (adb *AsinkDB) DatabaseAddEvent(e *asink.Event) (err error) { adb.lock.Lock() tx, err := adb.db.Begin() if err != nil { return err } //make sure the transaction gets rolled back on error, and the database gets unlocked defer func() { if err != nil { tx.Rollback() } adb.lock.Unlock() }() result, err := tx.Exec("INSERT INTO events (id, type, localstatus, path, hash, predecessor, timestamp, permissions) VALUES (?,?,?,?,?,?,?,?);", e.Id, e.Type, e.LocalStatus, e.Path, e.Hash, e.Predecessor, e.Timestamp, e.Permissions) if err != nil { return err } id, err := result.LastInsertId() if err != nil { return err } err = tx.Commit() if err != nil { return err } e.LocalId = id e.InDB = true return nil }