package main import ( // External "github.com/jmoiron/sqlx" // Standard ) type Key struct { ID int UserID int `db:"user_id"` Description string Key string } func (session Session) Keys() (keys []Key, err error) {// {{{ var rows *sqlx.Rows if rows, err = db.Queryx(`SELECT * FROM crypto_key WHERE user_id=$1`, session.UserID); err != nil { return } defer rows.Close() keys = []Key{} for rows.Next() { key := Key{} if err = rows.StructScan(&key); err != nil { return } keys = append(keys, key) } return }// }}} func (session Session) KeyCreate(description, keyEncoded string) (key Key, err error) {// {{{ var row *sqlx.Rows if row, err = db.Queryx( `INSERT INTO crypto_key(user_id, description, key) VALUES($1, $2, $3) RETURNING *`, session.UserID, description, keyEncoded, ); err != nil { return } defer row.Close() key = Key{} for row.Next() { if err = row.StructScan(&key); err != nil { return } } return }// }}} func (session Session) KeyCounter() (counter int64, err error) {// {{{ var rows *sqlx.Rows rows, err = db.Queryx(`SELECT nextval('aes_ccm_counter') AS counter`) if err != nil { return } defer rows.Close() rows.Next() err = rows.Scan(&counter) return }// }}} // vim: foldmethod=marker