-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathql_treeplan.h
118 lines (88 loc) · 3.67 KB
/
ql_treeplan.h
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#ifndef QL_TREEPLAN_H
#define QL_TREEPLAN_H
#include <vector>
#include <string>
#include "redbase.h"
#include "sm.h"
#include "parser.h"
#include "printer.h"
#include "ql_iterator.h"
class QL_TreePlan
{
public:
enum NodeOperation {
UNION,
COMPARISON,
PROJECTION,
JOIN,
SELECT,
CARTESIANPRODUCT
};
enum ScanStatus {
SCANOPENED,
SCANCLOSED
};
// constructor & destructor
QL_TreePlan(SM_Manager *ipSmm, IX_Manager *ipIxm, RM_Manager *ipRmm);
~QL_TreePlan();
// getters
ScanStatus getScanStatus() { return _scanStatus; }
// setters
void SetNodeOperation(NodeOperation iNodeOperation);
void SetLeftChild(QL_TreePlan *ipTreePlan);
void SetRightChild(QL_TreePlan *ipTreePlan);
// builder
RC BuildFromQuery(const std::vector<RelAttr> &selAttrs,
const std::vector<const char*> &relations,
const std::vector<Condition> &conditions);
RC BuildFromSingleRelation(const std::vector<RelAttr> &selAttrs,
const std::vector<const char*> &relations,
const std::vector<Condition> &conditions);
RC BuildFromComparison(const std::vector<RelAttr> &selAttrs,
const std::vector<const char*> &relations,
const std::vector<Condition> &conditions);
RC BuildFromProjection(const std::vector<RelAttr> &selAttrs,
const std::vector<const char*> &relations,
const std::vector<Condition> &conditions);
RC BuildFromJoin(const std::vector<RelAttr> &selAttrs,
const std::vector<const char*> &relations,
const std::vector<Condition> &conditions);
RC BuildFromSelect(const std::vector<RelAttr> &selAttrs,
const std::vector<const char*> &relations,
const std::vector<Condition> &conditions);
RC BuildFromCartesianProduct(const std::vector<RelAttr> &selAttrs,
const std::vector<const char*> &relations,
const std::vector<Condition> &conditions);
// operator
RC GetNext(int &nAttributes, DataAttrInfo *&tNodeAttributes, char * &pData);
void Print(char prefix, int level);
private:
RC PerformUnion(int &nAttributes, DataAttrInfo *&tNodeAttributes, char * &pData);
RC PerformComparison(int &nAttributes, DataAttrInfo *&tNodeAttributes, char * &pData);
RC PerformProjection(int &nAttributes, DataAttrInfo *&tNodeAttributes, char * &pData);
RC PerformJoin(int &nAttributes, DataAttrInfo *&tNodeAttributes, char * &pData);
RC PerformSelect(int &nAttributes, DataAttrInfo *&tNodeAttributes, char * &pData);
RC PerformCartesianProduct(int &nAttributes, DataAttrInfo *&tNodeAttributes, char * &pData);
RC ComputeAttributesStructure(const std::vector<RelAttr> &selAttrs, int &nNodeAttributes, DataAttrInfo *&nodeAttributes, int &bufferSize);
RC IsAttributeInList(const int nNodeAttributes, const DataAttrInfo *nodeAttributes, const DataAttrInfo &attribute, int &index);
void Padding(char ch, int n);
SM_Manager *_pSmm;
IX_Manager *_pIxm;
RM_Manager *_pRmm;
QL_TreePlan *_pLc;
QL_TreePlan *_pRc;
NodeOperation _nodeOperation;
int _nNodeAttributes;
DataAttrInfo *_nodeAttributes;
int _bufferSize;
int _nOperationAttributes;
DataAttrInfo *_operationAttributes;
std::string _sRelName;
std::vector<Condition> _conditions;
ScanStatus _scanStatus;
QL_Iterator *_pScanIterator;
char * _pJoinData;
int _nJoinAttributes;
DataAttrInfo *_nodeJoinAttributes;
};
#endif // QL_TREEPLAN_H