int db_load(struct DB *db, char *db_name, size_t cache_size) { log_info("Loading DB with name %s", db_name); struct Metadata md = {0,0,0}; meta_load(db_name, &md); log_info("PoolSize: %zd, PageSize %zd", md.pool_size, md.page_size); dbi_init(db, db_name, md.page_size, md.pool_size, cache_size); pool_init_old(db->pool, db_name, md.page_size, md.pool_size, cache_size); db->btree_degree = btree_node_max_capacity(db); node_btree_load(db, db->top, md.header_page); return 0; }
EXPORT int p_dbi_init( /* + */ value v_errno, type t_errno ) { static int initialized = 0; if (initialized) Succeed_; Check_Integer(t_errno); /* * In C error codes are negative while in Prolog they are positive ! */ dbi_errno = - v_errno.nint; dbi_init(); /* do any DB specific initialisation */ initialized = 1; Succeed_; }
/** * @brief Initialize DB object * * @param[out] db Object to initialize * @param[in] db_name File for use in Database * @param[in] page_size Size of pages to use in PagePool * @param[in] pool_size Size of pool to use in PagePool * * @return Status */ int db_init(struct DB *db, char *db_name, uint16_t page_size, pageno_t pool_size, size_t cache_size) { log_info("Creating DB with name %s", db_name); log_info("PoolSize: %zd, PageSize %i", pool_size, page_size); dbi_init(db, db_name, page_size, pool_size, cache_size); pool_init_new(db->pool, db_name, page_size, pool_size, cache_size); db->btree_degree = btree_node_max_capacity(db); wal_init(db, db->wal); dumper_init(db, db->pool); node_btree_load(db, db->top, 0); db->top->h->flags = IS_TOP | IS_LEAF; struct Metadata md = {pool_size, page_size, db->top->h->page}; meta_dump(db_name, &md); return 0; }