github.com/status-im/status-go@v1.1.0/common/dbsetup/db_setup.go (about) 1 package dbsetup 2 3 import ( 4 "database/sql" 5 "errors" 6 7 "github.com/ethereum/go-ethereum/log" 8 ) 9 10 const InMemoryPath = ":memory:" 11 12 // The reduced number of kdf iterations (for performance reasons) which is 13 // currently used for derivation of the database key 14 // https://github.com/status-im/status-go/pull/1343 15 // https://notes.status.im/i8Y_l7ccTiOYq09HVgoFwA 16 const ReducedKDFIterationsNumber = 3200 17 18 type DatabaseInitializer interface { 19 Initialize(path, password string, kdfIterationsNumber int) (*sql.DB, error) 20 } 21 22 // GetDBFilename takes an instance of sql.DB and returns the filename of the "main" database 23 func GetDBFilename(db *sql.DB) (string, error) { 24 if db == nil { 25 logger := log.New() 26 logger.Warn("GetDBFilename was passed a nil pointer sql.DB") 27 return "", nil 28 } 29 30 var i, category, filename string 31 rows, err := db.Query("PRAGMA database_list;") 32 if err != nil { 33 return "", err 34 } 35 36 defer rows.Close() 37 for rows.Next() { 38 err = rows.Scan(&i, &category, &filename) 39 if err != nil { 40 return "", err 41 } 42 43 // The "main" database is the one we care about 44 if category == "main" { 45 return filename, nil 46 } 47 } 48 if err := rows.Err(); err != nil { 49 return "", err 50 } 51 52 return "", errors.New("no main database found") 53 }