00001
00002
00003
00004
00005
00006
00007
00008 #ifndef QUERYENGINE_H_
00009 #define QUERYENGINE_H_
00010
00011 #include "Common.h"
00012 #include "IQueryOperator.h"
00013 #include "IScanOperator.h"
00014 #include "RecordFileScan.h"
00015 #include "SystemManager.h"
00016
00032 class QueryEngine {
00033 public:
00037 static QueryEngine* getInstance();
00038
00058 ReturnCode select(int nAttributes, const RelationAttribute attributes[],
00059 int nRelations, const char* relations[],
00060 int nConditions, const Condition conditions[]);
00061
00076 ReturnCode insert(const char* relName, int nValues,
00077 const TypedValue values[]);
00078
00094 ReturnCode remove(const char* relName, int nConditions,
00095 const Condition conditions[]);
00096
00114 ReturnCode update(const char* relName, const RelationAttribute* left,
00115 const AttributeOrValue* right, int nConditions,
00116 const Condition conditions[]);
00117
00118
00119 private:
00120
00121
00122
00123
00124 ReturnCode buildFileScanNode(const char* relation, IScanOperator** scan);
00125
00126 ReturnCode buildProjectNode(IQueryOperator* child, int nAttributes,
00127 const RelationAttribute attributes[],
00128 IQueryOperator** project);
00129
00130 ReturnCode buildExecutionPlan(int nAttributes, const RelationAttribute attributes[],
00131 int nRelations, const char* relations[],
00132 int nConditions, const Condition conditions[],
00133 IQueryOperator** root);
00134
00135 uint getRecordSize(int nAttributes, const RelationAttributeInfo attributes[]);
00136
00137 ReturnCode executePlan(IQueryOperator* root);
00138
00139 SystemManager* sm_;
00140 RecordFileManager* rm_;
00141
00142
00143
00144 QueryEngine();
00145 ~QueryEngine();
00146 };
00147
00148 #endif