aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFranciszek Malinka <franciszek.malinka@gmail.com>2022-11-06 21:42:13 +0100
committerkacper776 <54678026+kacper776@users.noreply.github.com>2022-11-06 23:54:31 +0100
commitbb172f8a1e971eb89ec34ee60e4328ed1875c287 (patch)
tree1fe54e923714637853b53734a7eda890cb9ab14b
parent62f335c52b36a9f5c58dde5a8fd6ce4600f35ccd (diff)
Fixed bugs.
-rw-r--r--komfydb/storage/db_file.h2
-rw-r--r--komfydb/storage/heap_file.cc50
-rw-r--r--komfydb/storage/heap_file.h18
-rw-r--r--komfydb/storage/page_id.cc10
-rw-r--r--komfydb/storage/page_id.h12
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;