diff --git a/src/table/record_header.cpp b/src/table/record_header.cpp index e197c77..88c0ecb 100644 --- a/src/table/record_header.cpp +++ b/src/table/record_header.cpp @@ -2,6 +2,7 @@ #include #include +#include namespace huadb { @@ -33,4 +34,15 @@ db_size_t RecordHeader::DeserializeFrom(const char *data) { return offset; } +std::string RecordHeader::ToString() const { + std::ostringstream oss; + oss << "Header["; + oss << "deleted: " << deleted_; + oss << ", xmin: " << xmin_; + oss << ", xmax: " << xmax_; + oss << ", cid: " << cid_; + oss << "]"; + return oss.str(); +} + } // namespace huadb diff --git a/src/table/record_header.h b/src/table/record_header.h index 20a905a..32fa2c6 100644 --- a/src/table/record_header.h +++ b/src/table/record_header.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "common/constants.h" namespace huadb { @@ -13,6 +15,8 @@ class RecordHeader { db_size_t SerializeTo(char *data) const; db_size_t DeserializeFrom(const char *data); + std::string ToString() const; + private: // LAB 1: 记录是否删除 bool deleted_ = false; diff --git a/src/table/table_page.cpp b/src/table/table_page.cpp index 25cff52..0acc2b4 100644 --- a/src/table/table_page.cpp +++ b/src/table/table_page.cpp @@ -105,9 +105,19 @@ std::string TablePage::ToString() const { oss << " next_page_id: " << *next_page_id_ << std::endl; oss << " lower: " << *lower_ << std::endl; oss << " upper: " << *upper_ << std::endl; + if (*lower_ > *upper_) { + oss << "***Error: lower > upper***" << std::endl; + } oss << " slots: " << std::endl; for (size_t i = 0; i < GetRecordCount(); i++) { - oss << " " << i << ": offset " << slots_[i].offset_ << ", size " << slots_[i].size_ << std::endl; + oss << " " << i << ": offset " << slots_[i].offset_ << ", size " << slots_[i].size_ << " "; + if (slots_[i].size_ <= RECORD_HEADER_SIZE) { + oss << "***Error: record size smaller than header size***" << std::endl; + } else { + RecordHeader header; + header.DeserializeFrom(page_data_ + slots_[i].offset_); + oss << header.ToString() << std::endl; + } } oss << "]\n"; return oss.str(); diff --git a/test/lab1/10-insert.test b/test/lab1/10-insert.test index b4fca4f..c5f8a28 100644 --- a/test/lab1/10-insert.test +++ b/test/lab1/10-insert.test @@ -28,6 +28,7 @@ select score, info from test_insert; 5.5 eeeee 6.6 ffffff +# 新建页面 query insert into test_insert values(7, 7.7, 'ggggggg'), (8, 8.8, 'hhhhhhhh'), (9, 9.9, 'iiiiiiiii'), (10, 10.1, 'jjjjjjjjjj'), (11, 11.1, 'kkkkkkkkkkk'); ----