#include #include #include #include "Condition.h" #include "DBEngine.h" DBEngine::DBEngine(){ size = 0; } void DBEngine::createTable(string n){ Relation r(n); tables.push_back(r); size++; } void DBEngine::createTable(string n, vector a){ Relation r(n, a); tables.push_back(r); size++; } void DBEngine::createTable(Relation r){ tables.push_back(r); size++; } vector DBEngine::getRelations(){ return tables; } Relation& DBEngine::getTableFromName(string n){ for(int i = 0; i < tables.size(); i++){ if (tables[i].getTableName() == n){ return tables[i]; } } } //currently writes nothing meaningful void DBEngine::saveToFile(vector cmds){ ofstream file; file.open("savefile.db"); for(int i = 0; i < cmds.size(); ++i){ file << cmds[i] << endl; } file.close(); } Relation DBEngine::selection(string attName, string s, Relation r){ equality(attName, s, r); } //assumes that all attribute titles are unique Relation DBEngine::projection(vector input, Relation r){ // for(int i = 0; i < input.size(); i++) { // it = find(r.getAttributes().begin(), r.getAttributes().end(), input[i]) //if(r[i].getName == input[]) // } } //test error matching void DBEngine::rename(Relation& r, vector oldnames, vector newnames){ if (oldnames.size() != newnames.size()) { cout << "FAILURE TO RENAME: number of attributes do not match.\n"; return; } else if (oldnames != r.getAttributeNames()) { cout << "FAILURE TO RENAME: the attributes to be renamed do not exist in the relation.\n"; return; } else { for(int i = 0; i < oldnames.size(); ++i){ r.renameAttribute(oldnames[i], newnames[i]); } } } Relation DBEngine::setUnion(Relation r1, Relation r2){ if (r1.getAttributeNames() != r2.getAttributeNames()){ cout << "Failure to union: the relations are not union-compatible.\nreturning the first relation.\n"; return r1; } else { //currently all returned relations are called TEMP Relation new_r = r1; vector temp; bool duplicate = false; for (int i = 0; i < r2.getAttributes()[0].getSize(); ++i) { temp = r2.getTuple(i); for (int j = 0; j < new_r.getAttributes()[0].getSize(); ++j){ if (temp == new_r.getTuple(j)){ duplicate = true; break; } } if (!duplicate) { new_r.insertTuple(temp); } duplicate = false; } return new_r; /*vector r1_atts = r1.getAttributes(); vector r2_atts = r2.getAttributes(); vector new_atts = r1_atts; for (int i = 0; i < r2_atts.size(); ++i) { for (int j = 0; j < r2_atts[i].getSize(); ++j){ new_atts[i].addCell(r2_atts[i][j]); } } for (int i = 0; i < new_atts.size(); ++i) { for (int j = 0; j < new_atts.size(); ++j){ if (new_atts[i] == new_atts[j]){ new_atts.erase(new_atts.begin() + i); continue; } } } //currently all returned relations are called TEMP Relation new_r("TEMP", new_atts); return new_r;*/ } }