// CreateDB creates, initializes, and opens a database for use. func CreateDB(args ...interface{}) (btcdb.Db, error) { if err := parseArgs("CreateDB", args...); err != nil { return nil, err } log = btcdb.GetLog() return newMemDb(), nil }
// CreateDB creates, initializes and opens a database for use. func CreateDB(args ...interface{}) (btcdb.Db, error) { dbpath, err := parseArgs("Create", args...) if err != nil { return nil, err } log = btcdb.GetLog() // No special setup needed, just OpenBB db, err := openDB(dbpath, true) if err == nil { ldb := db.(*LevelDb) ldb.lastBlkIdx = -1 ldb.nextBlock = 0 } return db, err }
// OpenDB opens an existing database for use. func OpenDB(args ...interface{}) (btcdb.Db, error) { dbpath, err := parseArgs("OpenDB", args...) if err != nil { return nil, err } log = btcdb.GetLog() db, err := openDB(dbpath, false) if err != nil { return nil, err } // Need to find last block and tx var lastknownblock, nextunknownblock, testblock int64 increment := int64(100000) ldb := db.(*LevelDb) var lastSha *btcwire.ShaHash // forward scan blockforward: for { sha, err := ldb.fetchBlockShaByHeight(testblock) if err == nil { // block is found lastSha = sha lastknownblock = testblock testblock += increment } else { if testblock == 0 { //no blocks in db, odd but ok. lastknownblock = -1 nextunknownblock = 0 var emptysha btcwire.ShaHash lastSha = &emptysha } else { nextunknownblock = testblock } break blockforward } } // narrow search blocknarrow: for lastknownblock != -1 { testblock = (lastknownblock + nextunknownblock) / 2 sha, err := ldb.fetchBlockShaByHeight(testblock) if err == nil { lastknownblock = testblock lastSha = sha } else { nextunknownblock = testblock } if lastknownblock+1 == nextunknownblock { break blocknarrow } } ldb.lastBlkSha = *lastSha ldb.lastBlkIdx = lastknownblock ldb.nextBlock = lastknownblock + 1 return db, nil }
// CreateSqliteDB creates, initializes and opens a database for use. func CreateSqliteDB(filepath string) (pbdb btcdb.Db, err error) { log = btcdb.GetLog() return newOrCreateSqliteDB(filepath, true) }