github.com/status-im/status-go@v1.1.0/protocol/transport/persistence.go (about) 1 package transport 2 3 import ( 4 "database/sql" 5 "fmt" 6 ) 7 8 type SqlitePersistence struct { 9 db *sql.DB 10 tableName string 11 } 12 13 func newSQLitePersistence(db *sql.DB, tableName string) *SqlitePersistence { 14 return &SqlitePersistence{db: db, tableName: tableName} 15 } 16 17 func (s *SqlitePersistence) Add(chatID string, key []byte) error { 18 // tableName controlled by us 19 statement := fmt.Sprintf("INSERT INTO %s(chat_id, key) VALUES(?, ?)", s.tableName) // nolint:gosec 20 stmt, err := s.db.Prepare(statement) 21 if err != nil { 22 return err 23 } 24 defer stmt.Close() 25 26 _, err = stmt.Exec(chatID, key) 27 return err 28 } 29 30 func (s *SqlitePersistence) All() (map[string][]byte, error) { 31 keys := make(map[string][]byte) 32 33 // tableName controlled by us 34 statement := fmt.Sprintf("SELECT chat_id, key FROM %s", s.tableName) // nolint: gosec 35 36 stmt, err := s.db.Prepare(statement) 37 if err != nil { 38 return nil, err 39 } 40 defer stmt.Close() 41 42 rows, err := stmt.Query() 43 if err != nil && err != sql.ErrNoRows { 44 return nil, err 45 } 46 defer rows.Close() 47 48 for rows.Next() { 49 var ( 50 chatID string 51 key []byte 52 ) 53 54 err := rows.Scan(&chatID, &key) 55 if err != nil { 56 return nil, err 57 } 58 keys[chatID] = key 59 } 60 61 return keys, nil 62 }