From 4b1fbf077d6ee5a4ae070b15b5048824b6e510c4 Mon Sep 17 00:00:00 2001 From: Brandon Jackson <1drummer@att.net> Date: Thu, 24 Sep 2015 21:37:27 -0500 Subject: [PATCH] Update DBEngine.cpp --- DBEngine.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/DBEngine.cpp b/DBEngine.cpp index 6101b46..5c3e864 100755 --- a/DBEngine.cpp +++ b/DBEngine.cpp @@ -1,6 +1,7 @@ #include #include #include +#include "Condition.h" #include "DBEngine.h" DBEngine::DBEngine(){ @@ -27,6 +28,7 @@ void DBEngine::createTable(Relation r){ vector DBEngine::getRelations(){ return tables; } + Relation& DBEngine::getTableFromName(string n){ for(int i = 0; i < tables.size(); i++){ @@ -48,6 +50,11 @@ void DBEngine::saveToFile(vector cmds){ 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){ @@ -66,15 +73,52 @@ Relation DBEngine::projection(vector input, Relation r){ return temp; } +Relation DBEngine::product(string new_name, Relation r1, Relation r2){ + + Relation temp(new_name); + vector a1; + + + for(int i = 0; i < r1.getAttributes().size(); ++i){ + a1.push_back(r1.getAttributes()[i]); + } + + for(int i = 0; i < r2.getAttributes().size(); ++i){ + a1.push_back(r2.getAttributes()[i]); + } + + temp.insertAttributes(a1); + + vector tuple1; + vector tuple2; + vector result_tuple; + + + //Don't we need to find the bigger one to start first? + if(r1.getSize() >= r2.getSize()) + { + //Combine tuples from relations into one, push back that tuple into the resultant relation via insertTuple + //Yeah have fun + } + + else if(r2.getSize() > r1.getSize()) + { + // + } + + + return temp; +} + //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."; + 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."; + cout << "FAILURE TO RENAME: the attributes to be renamed do not exist in the relation.\n"; return; } @@ -84,3 +128,35 @@ void DBEngine::rename(Relation& r, vector oldnames, vector newna } } } + +/*Relation DBEngine::setUnion(Relation r1, Relation r2){ + if (r1.getAttributeNames() != r2.getAttributeNames()){ + cout << "Failure to union: the relations are not union-compatible"; + return; + } + + else { + 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; + } +}*/