aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichaƂ Doros <dorosmichal06@gmail.com>2022-11-11 18:27:33 +0100
committerFranciszek Malinka <franciszek.malinka@gmail.com>2022-11-11 22:24:51 +0100
commit75f246276d1a8fc1e629f539638761c41fb47dd0 (patch)
tree1acc8253fc8188c232ff68d2e0a37d50f8db7bcf
parent3e776e1de09b6a8ce9838ab3c5d5e04d23c4f3c6 (diff)
changesseqscan
-rw-r--r--komfydb/execution/BUILD1
-rw-r--r--komfydb/execution/op_iterator.h8
-rw-r--r--komfydb/execution/seq_scan.cc39
-rw-r--r--komfydb/execution/seq_scan.h21
-rw-r--r--komfydb/storage/BUILD3
-rw-r--r--komfydb/storage/abstract_db_file_iterator.h0
-rw-r--r--komfydb/storage/db_file.h2
-rw-r--r--komfydb/storage/heap_file.cc1
-rw-r--r--komfydb/storage/heap_file.h2
-rw-r--r--komfydb/storage/heap_page.h3
-rw-r--r--komfydb/storage/page.h2
-rw-r--r--komfydb/storage/table_iterator.cc23
-rw-r--r--komfydb/storage/table_iterator.h31
13 files changed, 82 insertions, 54 deletions
diff --git a/komfydb/execution/BUILD b/komfydb/execution/BUILD
index c40258e..fee938a 100644
--- a/komfydb/execution/BUILD
+++ b/komfydb/execution/BUILD
@@ -16,6 +16,7 @@ cc_library(
],
deps = [
":op",
+ "//komfydb/storage:storage",
"@com_google_absl//absl/status",
],
visibility = ["//visibility:public"],
diff --git a/komfydb/execution/op_iterator.h b/komfydb/execution/op_iterator.h
index 36a4c1b..04ac86f 100644
--- a/komfydb/execution/op_iterator.h
+++ b/komfydb/execution/op_iterator.h
@@ -4,13 +4,13 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
-#include "komfydb/common/tuple.h"
#include "komfydb/common/tuple_desc.h"
+#include "komfydb/storage/record.h"
namespace {
-using komfydb::common::Tuple;
using komfydb::common::TupleDesc;
+using komfydb::storage::Record;
}; // namespace
@@ -24,9 +24,9 @@ class OpIterator {
virtual absl::StatusOr<bool> HasNext();
- virtual absl::StatusOr<Tuple> Next();
+ virtual absl::StatusOr<Record> Next();
- virtual TupleDesc GetTupleDesc();
+ virtual absl::StatusOr<TupleDesc*> GetTupleDesc();
};
}; // namespace komfydb::execution
diff --git a/komfydb/execution/seq_scan.cc b/komfydb/execution/seq_scan.cc
index 2d9dd66..352824d 100644
--- a/komfydb/execution/seq_scan.cc
+++ b/komfydb/execution/seq_scan.cc
@@ -3,18 +3,24 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
-#include "komfydb/common/tuple.h"
-#include "komfydb/common/tuple_desc.h"
-#include "komfydb/execution/op_iterator.h"
-#include "komfydb/transaction/transaction_id.h"
+#include "komfydb/execution/seq_scan.h"
namespace komfydb::execution {
-SeqScan::SeqScan(TransactionId tid, int table_id, absl::string_view table_alias)
- : tid(tid), table_id(table_id), table_alias(table_alias) {}
+SeqScan::SeqScan(TransactionId tid, int table_id,
+ std::shared_ptr<Catalog> catalog,
+ std::shared_ptr<BufferPool> bufferpool,
+ absl::string_view table_alias)
+ : tid(tid),
+ table_id(table_id),
+ catalog(catalog),
+ bufferpool(bufferpool),
+ table_alias(table_alias) {}
-SeqScan::SeqScan(TransactionId tid, int table_id) {
- SeqScan(tid, table_id, common::GenerateUuidV4());
+SeqScan::SeqScan(TransactionId tid, int table_id,
+ std::shared_ptr<Catalog> catalog,
+ std::shared_ptr<BufferPool> bufferpool) {
+ SeqScan(tid, table_id, catalog, bufferpool, common::GenerateUuidV4());
}
std::string SeqScan::GetTableName() {
@@ -27,26 +33,25 @@ std::string SeqScan::GetAlias() {
}
absl::Status SeqScan::Open() {
- TableIterator iterator(table_id);
- iterator.open();
+ TableIterator iterator(tid, table_id, );
+ iterator.Open();
return absl::OkStatus();
}
void SeqScan::Close() {
- iterator.close();
+ iterator.Close();
}
absl::StatusOr<bool> SeqScan::HasNext() {
- return iterator.has_next();
+ return iterator.HasNext();
}
-absl::StatusOr<Tuple> SeqScan::Next() {
- return iterator.next();
+absl::StatusOr<Record> SeqScan::Next() {
+ return iterator.Next();
}
absl::StatusOr<TupleDesc*> SeqScan::GetTupleDesc() {
return catalog->GetTupleDesc(table_id);
}
-};
-}
-; // namespace komfydb::execution \ No newline at end of file
+
+}; // namespace komfydb::execution \ No newline at end of file
diff --git a/komfydb/execution/seq_scan.h b/komfydb/execution/seq_scan.h
index 3295978..9e4c375 100644
--- a/komfydb/execution/seq_scan.h
+++ b/komfydb/execution/seq_scan.h
@@ -6,13 +6,20 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
-#include "komfydb/common/tuple.h"
#include "komfydb/common/tuple_desc.h"
#include "komfydb/execution/op_iterator.h"
+#include "komfydb/storage/buffer_pool.h"
+#include "komfydb/storage/catalog.h"
+#include "komfydb/storage/record.h"
+#include "komfydb/storage/table_iterator.h"
#include "komfydb/transaction/transaction_id.h"
namespace {
+using komfydb::storage::BufferPool;
+using komfydb::storage::Catalog;
+using komfydb::storage::Record;
+using komfydb::storage::TableIterator;
using komfydb::transaction::TransactionId;
}; // namespace
@@ -21,9 +28,12 @@ namespace komfydb::execution {
class SeqScan : OpIterator {
public:
- SeqScan(TransactionId tid, int table_id, absl::string_view table_alias);
+ SeqScan(TransactionId tid, int table_id, std::shared_ptr<Catalog> catalog,
+ std::shared_ptr<BufferPool> bufferpool,
+ absl::string_view table_alias);
- SeqScan(TransactionId tid, int table_id);
+ SeqScan(TransactionId tid, int table_id, std::shared_ptr<Catalog> catalog,
+ std::shared_ptr<BufferPool> bufferpool);
std::string GetTableName();
@@ -37,7 +47,7 @@ class SeqScan : OpIterator {
absl::StatusOr<bool> HasNext() override;
- absl::StatusOr<Tuple> Next() override;
+ absl::StatusOr<Record> Next() override;
absl::StatusOr<TupleDesc*> GetTupleDesc() override;
@@ -46,7 +56,8 @@ class SeqScan : OpIterator {
std::string table_alias;
TransactionId tid;
TableIterator iterator;
- static std::shared_ptr<Catalog> catalog;
+ std::shared_ptr<Catalog> catalog;
+ std::shared_ptr<BufferPool> bufferpool;
};
}; // namespace komfydb::execution
diff --git a/komfydb/storage/BUILD b/komfydb/storage/BUILD
index 4444357..2371425 100644
--- a/komfydb/storage/BUILD
+++ b/komfydb/storage/BUILD
@@ -9,11 +9,12 @@ cc_library(
"heap_file.cc",
"heap_page.cc",
"record.cc",
+ "table_iterator.cc"
],
hdrs = [
"catalog.h",
"page_id.h",
- "db_file_iterator.h",
+ "table_iterator.h",
"log_file.h",
"db_file.h",
"record_id.h",
diff --git a/komfydb/storage/abstract_db_file_iterator.h b/komfydb/storage/abstract_db_file_iterator.h
deleted file mode 100644
index e69de29..0000000
--- a/komfydb/storage/abstract_db_file_iterator.h
+++ /dev/null
diff --git a/komfydb/storage/db_file.h b/komfydb/storage/db_file.h
index 04659ae..aa61a75 100644
--- a/komfydb/storage/db_file.h
+++ b/komfydb/storage/db_file.h
@@ -7,9 +7,9 @@
#include "absl/status/statusor.h"
#include "komfydb/common/tuple.h"
#include "komfydb/common/tuple_desc.h"
-#include "komfydb/storage/db_file_iterator.h"
#include "komfydb/storage/page.h"
#include "komfydb/storage/page_id.h"
+#include "komfydb/storage/table_iterator.h"
#include "komfydb/transaction/transaction_id.h"
namespace {
diff --git a/komfydb/storage/heap_file.cc b/komfydb/storage/heap_file.cc
index be8cb38..9e062b7 100644
--- a/komfydb/storage/heap_file.cc
+++ b/komfydb/storage/heap_file.cc
@@ -87,6 +87,7 @@ absl::StatusOr<std::unique_ptr<Page>> HeapFile::ReadPage(PageId id) {
}
int HeapFile::GetNumPages() {
+ file.seekg(0, file.end);
uint32_t file_length = file.tellg();
return (file_length + CONFIG_PAGE_SIZE - 1) / CONFIG_PAGE_SIZE;
}
diff --git a/komfydb/storage/heap_file.h b/komfydb/storage/heap_file.h
index f517c1e..0783f08 100644
--- a/komfydb/storage/heap_file.h
+++ b/komfydb/storage/heap_file.h
@@ -13,9 +13,9 @@
#include "komfydb/common/tuple.h"
#include "komfydb/common/tuple_desc.h"
#include "komfydb/storage/db_file.h"
-#include "komfydb/storage/db_file_iterator.h"
#include "komfydb/storage/page.h"
#include "komfydb/storage/page_id.h"
+#include "komfydb/storage/table_iterator.h"
#include "komfydb/transaction/transaction_id.h"
namespace {
diff --git a/komfydb/storage/heap_page.h b/komfydb/storage/heap_page.h
index c223156..46e23f7 100644
--- a/komfydb/storage/heap_page.h
+++ b/komfydb/storage/heap_page.h
@@ -7,7 +7,6 @@
#include "absl/synchronization/mutex.h"
-#include "komfydb/common/tuple.h"
#include "komfydb/common/tuple_desc.h"
#include "komfydb/storage/page.h"
#include "komfydb/storage/page_id.h"
@@ -16,7 +15,7 @@
namespace {
-using komfydb::common::Tuple;
+using komfydb::common::Record;
using komfydb::common::TupleDesc;
using komfydb::transaction::TransactionId;
diff --git a/komfydb/storage/page.h b/komfydb/storage/page.h
index 99244be..13947b8 100644
--- a/komfydb/storage/page.h
+++ b/komfydb/storage/page.h
@@ -31,7 +31,7 @@ class Page {
virtual absl::Status SetBeforeImage() = 0;
- virtual std::vector<Tuple>* GetTuples() = 0;
+ virtual std::vector<Record>* GetRecords() = 0;
};
}; // namespace komfydb::storage
diff --git a/komfydb/storage/table_iterator.cc b/komfydb/storage/table_iterator.cc
index 3caac26..1f9cd28 100644
--- a/komfydb/storage/table_iterator.cc
+++ b/komfydb/storage/table_iterator.cc
@@ -1,19 +1,21 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
-#include "komfydb/common/tuple.h"
+#include "komfydb/storage/table_iterator.h"
namespace komfydb::storage {
-TableIterator::TableIterator(TransactionId tid, int table_id)
- : tid(tid), table_id(table_id) {}
+TableIterator::TableIterator(TransactionId tid, int table_id,
+ std::shared_ptr<Catalog> catalog,
+ std::shared_ptr<BufferPool> bufferpool)
+ : tid(tid), table_id(table_id), catalog(catalog), bufferpool(bufferpool) {}
absl::StatusOr<bool> TableIterator::LoadNextPage() {
if (++page_ctr >= num_pages)
return false;
ASSIGN_OR_RETURN(Page* page, bufferpool->GetPage(PageId(table_id, page_ctr));
- tuples = page->GetTuples();
- current_tuple = tuples.begin();
+ records = page->GetRecords();
+ current_tuple = records->begin();
return true;
}
@@ -36,7 +38,7 @@ absl::Status TableIterator::Open() {
void TableIterator::Close() {}
absl::StatusOr<bool> TableIterator::HasNext() {
- if (current_tuple != tuples.end())
+ if (current_tuple != records->end())
return true;
ASSIGN_OR_RETURN(bool good, LoadNextPage());
@@ -45,12 +47,11 @@ absl::StatusOr<bool> TableIterator::HasNext() {
return HasNext();
}
-absl::StatusOr<Tuple> TableIterator::Next() {
+absl::StatusOr<Record> TableIterator::Next() {
ASSIGN_OR_RETURN(bool good, HasNext());
if (!good)
- return absl::OutOfRangeError("No more tuples in this table");
+ return absl::OutOfRangeError("No more records in this table");
return *current_tuple++;
}
-};
-}
-; // namespace komfydb::storage
+
+}; // namespace komfydb::storage
diff --git a/komfydb/storage/table_iterator.h b/komfydb/storage/table_iterator.h
index c4f4c10..eb555c1 100644
--- a/komfydb/storage/table_iterator.h
+++ b/komfydb/storage/table_iterator.h
@@ -4,11 +4,14 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
-#include "komfydb/common/tuple.h"
+#include "komfydb/storage/buffer_pool.h"
+#include "komfydb/storage/catalog.h"
+#include "komfydb/storage/record.h"
+#include "komfydb/transaction/transaction_id.h"
namespace {
-using komfydb::common::Tuple;
+using komfydb::transaction::TransactionId;
}; // namespace
@@ -16,23 +19,29 @@ namespace komfydb::storage {
class TableIterator {
private:
+ TransactionId tid;
int page_ctr;
int table_id;
int num_pages;
- TransactionId tid;
- std::vector<Tuple>& tuples;
- std::vector<Tuple>::iterator current_tuple;
- static std::shared_ptr<BufferPool> bufferpool;
- static std::shared_ptr<Catalog> catalog;
+ std::vector<Record>* records;
+ std::vector<Record>::iterator current_tuple;
+ std::shared_ptr<Catalog> catalog;
+ std::shared_ptr<BufferPool> bufferpool;
+ absl::StatusOr<bool> LoadNextPage();
+ absl::Status LoadFirstPage();
public:
- virtual absl::Status Open();
+ TableIterator(TransactionId tid, int table_id,
+ std::shared_ptr<Catalog> catalog,
+ std::shared_ptr<BufferPool> bufferpool);
+
+ absl::Status Open();
- virtual void Close();
+ void Close();
- virtual absl::StatusOr<bool> HasNext();
+ absl::StatusOr<bool> HasNext();
- virtual absl::StatusOr<Tuple> Next();
+ absl::StatusOr<Record> Next();
};
}; // namespace komfydb::storage