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  }