/// <summary> /// Returns all rows for the specified table (via tree address) /// </summary> /// <param name="treeAddress">The tree's address (dbId, tableId)</param> /// <returns>All rows for the table</returns> public List <RowStruct> GetAllRows(BTreeAddress treeAddress) { var result = new List <RowStruct>(); Database2 database = _process.GetDatabase2(treeAddress.DatabaseId); TableSchema2 schema = database.GetTable(treeAddress.TableId).Schema; if (CacheHasContainer(treeAddress)) { result.AddRange(GetContainerFromCache(treeAddress).GetAllRows(schema, false)); } else { AddContainerToCache(treeAddress); result.AddRange(GetContainerFromCache(treeAddress).GetAllRows(schema, false)); } return(result); }
/// <summary> /// Tries to load a container from disk file. If this is a fresh database, will return a new container. /// </summary> /// <param name="address">The address of the container to get</param> /// <returns>A container from disk</returns> private BTreeContainer GetContainerFromDisk(BTreeAddress address) { Database2 db = _process.GetDatabase2(address.DatabaseId); DbStorage storage = db.Storage; var tree = new TreeDictionary <int, Page>(); TableSchema2 schema = db.GetTable(address.TableId).Schema; // get the first page Page page = storage.GetPage(1, address); // if this is a brand new table if (page == null) { page = new Page(1, address.TableId, address.DatabaseId, schema, _process); } tree.Add(page.Id, page); return(new BTreeContainer(address, tree, storage, schema, _process)); }