forked from Uradouby/cs660-pa
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBTreeFile.cpp
More file actions
70 lines (57 loc) · 2.84 KB
/
Copy pathBTreeFile.cpp
File metadata and controls
70 lines (57 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <db/BTreeFile.h>
using namespace db;
BTreeLeafPage* BTreeFile::findLeafPage(TransactionId tid, PagesMap& dirtypages, BTreePageId* pid, Permissions perm, const Field* key) {
while (pid->getType() == BTreePageType::INTERNAL){
db::BTreeInternalPage* currPage = dynamic_cast<db::BTreeInternalPage*>(getPage(tid, dirtypages, pid, Permissions::READ_ONLY));
BTreePageId* nextPid = nullptr;
if (key == nullptr) {
nextPid = (*currPage->begin()).getLeftChild();
}else{
auto it = currPage->begin();
auto prev_it = it;
// Find the first key greater than or equal to the given key.
while (it != currPage->end() && key->compare(Op::GREATER_THAN, (*it).getKey())) {
prev_it = it;
++it;
}
if (it != currPage->end()) {
nextPid = (*it).getLeftChild();
} else {
nextPid = (*prev_it).getRightChild();
}
}
pid = nextPid;
}
return dynamic_cast<BTreeLeafPage*>(getPage(tid, dirtypages, pid, perm));
}
BTreeLeafPage *BTreeFile::splitLeafPage(TransactionId tid, PagesMap &dirtypages, BTreeLeafPage *page, const Field *field) {
// TODO pa2.3: implement
return nullptr;
}
BTreeInternalPage *BTreeFile::splitInternalPage(TransactionId tid, PagesMap &dirtypages, BTreeInternalPage *page,
Field *field) {
// TODO pa2.3: implement
return nullptr;
}
void BTreeFile::stealFromLeafPage(BTreeLeafPage *page, BTreeLeafPage *sibling, BTreeInternalPage *parent,
BTreeEntry *entry, bool isRightSibling) {
// TODO pa2.4: implement (BONUS)
}
void BTreeFile::stealFromLeftInternalPage(TransactionId tid, PagesMap &dirtypages, BTreeInternalPage *page,
BTreeInternalPage *leftSibling, BTreeInternalPage *parent,
BTreeEntry *parentEntry) {
// TODO pa2.4: implement (BONUS)
}
void BTreeFile::stealFromRightInternalPage(TransactionId tid, PagesMap &dirtypages, BTreeInternalPage *page,
BTreeInternalPage *rightSibling, BTreeInternalPage *parent,
BTreeEntry *parentEntry) {
// TODO pa2.4: implement (BONUS)
}
void BTreeFile::mergeLeafPages(TransactionId tid, PagesMap &dirtypages, BTreeLeafPage *leftPage,
BTreeLeafPage *rightPage, BTreeInternalPage *parent, BTreeEntry *parentEntry) {
// TODO pa2.4: implement (BONUS)
}
void BTreeFile::mergeInternalPages(TransactionId tid, PagesMap &dirtypages, BTreeInternalPage *leftPage,
BTreeInternalPage *rightPage, BTreeInternalPage *parent, BTreeEntry *parentEntry) {
// TODO pa2.4: implement (BONUS)
}