Class which represents a fixed-size database page containing records. More...
#include <page.h>
Public Member Functions | |
Page () | |
RecordId | insertRecord (const std::string &record_data) |
std::string | getRecord (const RecordId &record_id) const |
void | updateRecord (const RecordId &record_id, const std::string &record_data) |
void | deleteRecord (const RecordId &record_id) |
bool | hasSpaceForRecord (const std::string &record_data) const |
std::uint16_t | getFreeSpace () const |
PageId | page_number () const |
PageId | next_page_number () const |
PageIterator | begin () |
PageIterator | end () |
Static Public Attributes | |
static const std::size_t | SIZE = 8192 |
static const std::size_t | DATA_SIZE = SIZE - sizeof(PageHeader) |
static const PageId | INVALID_NUMBER = 0 |
static const SlotId | INVALID_SLOT = 0 |
Friends | |
class | File |
class | PageIterator |
class | PageTest |
class | BufferTest |
Class which represents a fixed-size database page containing records.
A page is a fixed-size unit of data storage. Each page holds zero or more records, which consist of arbitrary binary data. Records are placed into slots and identified by a RecordId. Although a record's actual contents may be moved on the page, accessing a record by its slot is consistent.
Constructs a new, uninitialized page.
Returns an iterator at the first record in the page.
void wiscdb::Page::deleteRecord | ( | const RecordId & | record_id | ) |
Deletes the record with the given ID. Page is compacted upon delete to ensure that data of all records is contiguous. Slot array is compacted if the slot deleted is at the end of the slot array.
record_id | ID of the record to delete. |
Returns an iterator representing the record after the last record in the page. This iterator should not be dereferenced.
std::uint16_t wiscdb::Page::getFreeSpace | ( | ) | const [inline] |
std::string wiscdb::Page::getRecord | ( | const RecordId & | record_id | ) | const |
Returns the record with the given ID. Returned data is a copy of what is stored on the page; use updateRecord to change it.
record_id | ID of the record to return. |
bool wiscdb::Page::hasSpaceForRecord | ( | const std::string & | record_data | ) | const |
Returns true if the page has enough free space to hold the given data.
record_data | Bytes that compose the record. |
RecordId wiscdb::Page::insertRecord | ( | const std::string & | record_data | ) |
Inserts a new record into the page.
record_data | Bytes that compose the record. |
PageId wiscdb::Page::next_page_number | ( | ) | const [inline] |
PageId wiscdb::Page::page_number | ( | ) | const [inline] |
void wiscdb::Page::updateRecord | ( | const RecordId & | record_id, |
const std::string & | record_data | ||
) |
Updates the record with the given ID, replacing its data with a new version. This is equivalent to deleting the old record and inserting a new one, with the exception that the record ID will not change.
record_id | ID of record to update. |
record_data | Updated bytes that compose the record. |
const std::size_t wiscdb::Page::DATA_SIZE = SIZE - sizeof(PageHeader) [static] |
const PageId wiscdb::Page::INVALID_NUMBER = 0 [static] |
const SlotId wiscdb::Page::INVALID_SLOT = 0 [static] |
const std::size_t wiscdb::Page::SIZE = 8192 [static] |