github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/passwords/scans.go (about) 1 // DON'T EDIT - automatically generated by structgen // 2 3 package passwords 4 5 import "database/sql" 6 7 type scanner interface { 8 Scan(...interface{}) error 9 } 10 11 // DB groups transaction like objects 12 type DB interface { 13 Exec(query string, args ...interface{}) (sql.Result, error) 14 Query(query string, args ...interface{}) (*sql.Rows, error) 15 QueryRow(query string, args ...interface{}) *sql.Row 16 Prepare(query string) (*sql.Stmt, error) 17 } 18 19 func scanOnePassword(row scanner) (Password, error) { 20 var s Password 21 err := row.Scan( 22 &s.Id, 23 &s.Provenance, 24 &s.Loggin, 25 &s.Description, 26 &s.PasswordCrypted, 27 ) 28 return s, err 29 } 30 31 func ScanPassword(row *sql.Row) (Password, error) { 32 return scanOnePassword(row) 33 } 34 35 func SelectAllPasswords(tx DB) (Passwords, error) { 36 rows, err := tx.Query("SELECT * FROM passwords") 37 if err != nil { 38 return nil, err 39 } 40 return ScanPasswords(rows) 41 } 42 43 // SelectPassword returns the entry matching id. 44 func SelectPassword(tx DB, id int64) (Password, error) { 45 row := tx.QueryRow("SELECT * FROM passwords WHERE id = $1", id) 46 return ScanPassword(row) 47 } 48 49 type Passwords map[int64]Password 50 51 func (m Passwords) Ids() Ids { 52 out := make(Ids, 0, len(m)) 53 for i := range m { 54 out = append(out, i) 55 } 56 return out 57 } 58 59 func ScanPasswords(rs *sql.Rows) (Passwords, error) { 60 var ( 61 s Password 62 err error 63 ) 64 defer func() { 65 errClose := rs.Close() 66 if err == nil { 67 err = errClose 68 } 69 }() 70 structs := make(Passwords, 16) 71 for rs.Next() { 72 s, err = scanOnePassword(rs) 73 if err != nil { 74 return nil, err 75 } 76 structs[s.Id] = s 77 } 78 if err = rs.Err(); err != nil { 79 return nil, err 80 } 81 return structs, nil 82 } 83 84 // Insert Password in the database and returns the item with id filled. 85 func (item Password) Insert(tx DB) (out Password, err error) { 86 row := tx.QueryRow(`INSERT INTO passwords ( 87 provenance,loggin,description,password_crypted 88 ) VALUES ( 89 $1,$2,$3,$4 90 ) RETURNING 91 id,provenance,loggin,description,password_crypted; 92 `, item.Provenance, item.Loggin, item.Description, item.PasswordCrypted) 93 return ScanPassword(row) 94 } 95 96 // Update Password in the database and returns the new version. 97 func (item Password) Update(tx DB) (out Password, err error) { 98 row := tx.QueryRow(`UPDATE passwords SET ( 99 provenance,loggin,description,password_crypted 100 ) = ( 101 $2,$3,$4,$5 102 ) WHERE id = $1 RETURNING 103 id,provenance,loggin,description,password_crypted; 104 `, item.Id, item.Provenance, item.Loggin, item.Description, item.PasswordCrypted) 105 return ScanPassword(row) 106 } 107 108 // Deletes Password in the database and returns the item. 109 // Only the field 'Id' is used. 110 func (item Password) Delete(tx DB) (Password, error) { 111 row := tx.QueryRow("DELETE FROM passwords WHERE id = $1 RETURNING *;", item.Id) 112 return ScanPassword(row) 113 }