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  }