diff options
author | MichaĆ Doros <dorosmichal06@gmail.com> | 2022-11-11 18:27:33 +0100 |
---|---|---|
committer | Franciszek Malinka <franciszek.malinka@gmail.com> | 2022-11-11 22:24:51 +0100 |
commit | 75f246276d1a8fc1e629f539638761c41fb47dd0 (patch) | |
tree | 1acc8253fc8188c232ff68d2e0a37d50f8db7bcf | |
parent | 3e776e1de09b6a8ce9838ab3c5d5e04d23c4f3c6 (diff) |
changesseqscan
-rw-r--r-- | komfydb/execution/BUILD | 1 | ||||
-rw-r--r-- | komfydb/execution/op_iterator.h | 8 | ||||
-rw-r--r-- | komfydb/execution/seq_scan.cc | 39 | ||||
-rw-r--r-- | komfydb/execution/seq_scan.h | 21 | ||||
-rw-r--r-- | komfydb/storage/BUILD | 3 | ||||
-rw-r--r-- | komfydb/storage/abstract_db_file_iterator.h | 0 | ||||
-rw-r--r-- | komfydb/storage/db_file.h | 2 | ||||
-rw-r--r-- | komfydb/storage/heap_file.cc | 1 | ||||
-rw-r--r-- | komfydb/storage/heap_file.h | 2 | ||||
-rw-r--r-- | komfydb/storage/heap_page.h | 3 | ||||
-rw-r--r-- | komfydb/storage/page.h | 2 | ||||
-rw-r--r-- | komfydb/storage/table_iterator.cc | 23 | ||||
-rw-r--r-- | komfydb/storage/table_iterator.h | 31 |
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 |