コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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));
        }