diff options
author | Franciszek Malinka <franciszek.malinka@gmail.com> | 2022-11-06 21:42:13 +0100 |
---|---|---|
committer | kacper776 <54678026+kacper776@users.noreply.github.com> | 2022-11-06 23:54:31 +0100 |
commit | bb172f8a1e971eb89ec34ee60e4328ed1875c287 (patch) | |
tree | 1fe54e923714637853b53734a7eda890cb9ab14b | |
parent | 62f335c52b36a9f5c58dde5a8fd6ce4600f35ccd (diff) |
Fixed bugs.
-rw-r--r-- | komfydb/storage/db_file.h | 2 | ||||
-rw-r--r-- | komfydb/storage/heap_file.cc | 50 | ||||
-rw-r--r-- | komfydb/storage/heap_file.h | 18 | ||||
-rw-r--r-- | komfydb/storage/page_id.cc | 10 | ||||
-rw-r--r-- | komfydb/storage/page_id.h | 12 |
5 files changed, 47 insertions, 45 deletions
diff --git a/komfydb/storage/db_file.h b/komfydb/storage/db_file.h index f92fb14..b169bb4 100644 --- a/komfydb/storage/db_file.h +++ b/komfydb/storage/db_file.h @@ -40,7 +40,7 @@ class DbFile { // TODO This method shouldn't be here for sure.. // virtual std::unique_ptr<DbFileIterator> Iterator(TransactionId tid); - virtual unsigned int GetId(); + virtual uint32_t GetId(); // TODO Shouldn't this return a const pointer? virtual TupleDesc* GetTupleDesc(); diff --git a/komfydb/storage/heap_file.cc b/komfydb/storage/heap_file.cc index 4477cd4..15ce027 100644 --- a/komfydb/storage/heap_file.cc +++ b/komfydb/storage/heap_file.cc @@ -1,19 +1,20 @@ #include "komfydb/storage/heap_file.h" #include <fstream> +#include <iostream> -#include "komfydb/utils/utility.h" +#include "komfydb/common/tuple_desc.h" #include "komfydb/config.h" +#include "komfydb/storage/heap_page.h" #include "komfydb/utils/status_macros.h" -#include "komfydb/common/tuple_desc.h" +#include "komfydb/utils/utility.h" namespace komfydb::storage { -HeapFile::HeapFile( - std::fstream& file, - TupleDesc td, - unsigned int table_id, - Permissions permissions) +uint32_t HeapFile::table_cnt = 0; + +HeapFile::HeapFile(std::fstream& file, TupleDesc td, uint32_t table_id, + Permissions permissions) : file(file), td(td), table_id(table_id), permissions(permissions) {} HeapFile::~HeapFile() { @@ -21,22 +22,20 @@ HeapFile::~HeapFile() { } absl::StatusOr<std::unique_ptr<HeapFile>> HeapFile::Create( - const std::string& file_path, - TupleDesc* td, - Permissions permissions) { - ios_base::openmode mode = std::io::binary | std::io::in; + const std::string& file_path, TupleDesc td, Permissions permissions) { + std::ios_base::openmode mode = std::ios::binary | std::ios::in; if (permissions == Permissions::READ_WRITE) { - mode |= std::io::out; + mode |= std::ios::out; } - - std::fstream file; + + std::fstream file; file.open(file_path, mode); if (!file.good()) { return absl::InvalidArgumentError("Could not open specified db file."); } file.seekg(0, file.end); - unsigned int file_length = file.tellg(); + uint32_t file_length = file.tellg(); if (file_length % CONFIG_PAGE_SIZE) { file.close(); return absl::InvalidArgumentError("File size not divisble by page size."); @@ -49,35 +48,34 @@ std::fstream& HeapFile::GetFile() { return file; } -unsigned int HeapFile::GetId() { +uint32_t HeapFile::GetId() { return table_id; } -unsigned int HeapFile::GetTupleDesc() { - return td; +TupleDesc* HeapFile::GetTupleDesc() { + return &td; } -absl::StatusOr<std::unique_ptr<Page>> ReadPage(PageId id) { - if (id.table_id != table_id) { +absl::StatusOr<std::unique_ptr<Page>> HeapFile::ReadPage(PageId id) { + if (id.GetTableId() != table_id) { return absl::InvalidArgumentError("Table ID does not match."); } file.seekg(0, file.end); - unsigned int file_length = file.tellg(); + uint32_t file_length = file.tellg(); - int page_pos = CONFIG_PAGE_SIZE * id.page_no; + int page_pos = CONFIG_PAGE_SIZE * id.GetPageNumber(); if (page_pos >= file_length) { return absl::InvalidArgumentError("Page number out of range."); } - vector<uint8_t> data(CONFIG_PAGE_SIZE); + std::vector<uint8_t> data(CONFIG_PAGE_SIZE); file.seekg(page_pos); - file.get(&data, CONFIG_PAGE_SIZE); + file.read((char*)data.data(), CONFIG_PAGE_SIZE); ASSIGN_OR_RETURN(std::unique_ptr<Page> page, HeapPage::Create(id, &td, data)); return page; } -}; - +}; // namespace komfydb::storage diff --git a/komfydb/storage/heap_file.h b/komfydb/storage/heap_file.h index c284dce..7638bc6 100644 --- a/komfydb/storage/heap_file.h +++ b/komfydb/storage/heap_file.h @@ -8,9 +8,9 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" +#include "komfydb/common/permissions.h" #include "komfydb/common/tuple.h" #include "komfydb/common/tuple_desc.h" -#include "komfydb/common/permissions.h" #include "komfydb/storage/db_file.h" #include "komfydb/storage/db_file_iterator.h" #include "komfydb/storage/page.h" @@ -19,9 +19,9 @@ namespace { +using komfydb::common::Permissions; using komfydb::common::Tuple; using komfydb::common::TupleDesc; -using komfydb::common::Permissions; using komfydb::transaction::TransactionId; }; // namespace @@ -32,19 +32,21 @@ class HeapFile : DbFile { private: std::fstream& file; TupleDesc td; - unsigned int table_id; + uint32_t table_id; Permissions permissions; // TODO This is probably a very bad way to create table_id's, it's not // thread safe. Probably it would be better to get some file's hash code. - static unsigned int table_cnt = 0; + static uint32_t table_cnt; + + HeapFile(std::fstream& file, TupleDesc td, uint32_t table_id, + Permissions permissions); - HeapFile(std::fstream& file, TupleDesc td, unsigned int table_id, Permissions permissions); public: ~HeapFile(); - static absl::StatusOr<std::unique_ptr<HeapFile>> - Create(const std::string& file_name, TupleDesc td, Permissions permissions); + static absl::StatusOr<std::unique_ptr<HeapFile>> Create( + const std::string& file_name, TupleDesc td, Permissions permissions); std::fstream& GetFile(); @@ -60,7 +62,7 @@ class HeapFile : DbFile { // std::unique_ptr<DbFileIterator> Iterator(TransactionId tid) override; - unsigned int GetId() override; + uint32_t GetId() override; TupleDesc* GetTupleDesc() override; }; diff --git a/komfydb/storage/page_id.cc b/komfydb/storage/page_id.cc index 6221f44..28e117b 100644 --- a/komfydb/storage/page_id.cc +++ b/komfydb/storage/page_id.cc @@ -6,21 +6,21 @@ namespace komfydb::storage { -PageId::PageId(int table_id, int page_no) +PageId::PageId(uint32_t table_id, uint32_t page_no) : table_id(table_id), page_no(page_no) {} std::vector<uint8_t> PageId::Serialize() { std::vector<uint8_t> data(sizeof(table_id) + sizeof(page_no)); - ((int*)&data)[0] = table_id; - ((int*)&data)[1] = page_no; + ((uint32_t*)&data)[0] = table_id; + ((uint32_t*)&data)[1] = page_no; return data; } -int PageId::GetTableId() const { +uint32_t PageId::GetTableId() const { return table_id; } -int PageId::GetPageNumber() const { +uint32_t PageId::GetPageNumber() const { return page_no; } diff --git a/komfydb/storage/page_id.h b/komfydb/storage/page_id.h index 749090f..b2a4571 100644 --- a/komfydb/storage/page_id.h +++ b/komfydb/storage/page_id.h @@ -11,17 +11,19 @@ namespace komfydb::storage { class PageId { private: - unsigned int table_id; - unsigned int page_no; + uint32_t table_id; + uint32_t page_no; public: - PageId(int table_id, int page_no); + PageId() = default; + + PageId(uint32_t table_id, uint32_t page_no); std::vector<uint8_t> Serialize(); - unsigned int GetTableId() const; + uint32_t GetTableId() const; - unsigned int GetPageNumber() const; + uint32_t GetPageNumber() const; bool operator==(const PageId& p) const; |