diff --git a/Attribute.cpp b/Attribute.cpp index eb35167..01437da 100755 --- a/Attribute.cpp +++ b/Attribute.cpp @@ -60,4 +60,8 @@ void Attribute::display(){ } cout << "-------------\n"; +} + +void Attribute::clearAllValues(){ + values.clear(); } \ No newline at end of file diff --git a/Attribute.h b/Attribute.h index 0e92a40..f721ff7 100755 --- a/Attribute.h +++ b/Attribute.h @@ -1,3 +1,4 @@ +#pragma once #include #include @@ -22,4 +23,5 @@ public: bool isKey(); int getSize(); void display(); + void clearAllValues(); }; \ No newline at end of file diff --git a/Condition.cpp b/Condition.cpp index d8ef7e1..80e74b7 100755 --- a/Condition.cpp +++ b/Condition.cpp @@ -1,29 +1,59 @@ #include #include "Attribute.h" +#include "Relation.h" using namespace std; -//currently only implementing for comparison -void equality(Attribute a, string s){ - +Relation equality(string attName, string s, Relation r){ + Attribute att = r.getAttributeByName(attName); + vector r_atts = r.getAttributes(); + vector new_atts = r_atts; + + for (int i = 0; i < new_atts.size(); ++i) { + new_atts[i].clearAllValues(); + } + + for (int i = 0; i < att.getSize(); ++i) { + if (att[i] == s){ + for (int j = 0; j < r_atts.size(); ++j){ + new_atts[j].addCell(r_atts[j][i]); + } + } + } + + //currently all returned relations are called TEMP + Relation new_r("TEMP", new_atts); + return new_r; } -void equality(Attribute a, int i){ - +/* +vector equality(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } -void gt(Attribute a, int i){ - +vector gt(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } -void lt(Attribute a, int i){ - +vector lt(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } -void gte(Attribute a, int i){ - +vector gte(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } -void lte(Attribute a, int i){ - -} \ No newline at end of file +vector lte(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } +} +*/ diff --git a/Condition.h b/Condition.h index ea1bda4..51c031e 100755 --- a/Condition.h +++ b/Condition.h @@ -1,13 +1,7 @@ -#include -#include "Attribute.h" +#pragma once +#include "Relation.h" using namespace std; //currently only implementing for comparison -Condition(); -void equality(Attribute a, string s); -void equality(Attribute a, int i); -void gt(Attribute a, int i); -void lt(Attribute a, int i); -void gte(Attribute a, int i); -void lte(Attribute a, int i); \ No newline at end of file +Relation equality(string attName, string s, Relation r); diff --git a/DBEngine.cpp b/DBEngine.cpp index 116638e..96b315d 100755 --- a/DBEngine.cpp +++ b/DBEngine.cpp @@ -1,6 +1,7 @@ #include #include #include +#include "Condition.h" #include "DBEngine.h" DBEngine::DBEngine(){ @@ -49,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){ @@ -77,4 +83,36 @@ void DBEngine::rename(Relation& r, vector oldnames, vector newna r.renameAttribute(oldnames[i], newnames[i]); } } -} \ No newline at end of file +} + +/*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; + } +}*/ diff --git a/DBEngine.h b/DBEngine.h index 8a71981..4b8a309 100755 --- a/DBEngine.h +++ b/DBEngine.h @@ -1,3 +1,4 @@ +#pragma once #include #include #include @@ -17,10 +18,10 @@ public: //void showTable(Relation r); Relation& getTableFromName(string n); void saveToFile(vector cmds); - //Relation selection(); + Relation selection(string attName, string s, Relation r); Relation projection(vector input, Relation r); void rename(Relation& r, vector oldnames, vector newnames); - //void setUnion(); + //Relation setUnion(Relation r1, Relation r2); //void setDiff(); - //void crossProduct(); + //void crossProduct(); }; diff --git a/Relation.cpp b/Relation.cpp index bb5de5b..d2dca12 100755 --- a/Relation.cpp +++ b/Relation.cpp @@ -23,6 +23,20 @@ string Relation::getTableName(){ return name; } +Attribute Relation::operator[](int i){ + return att[i]; +} + +vector Relation::getTuple(int index){ + vector temp; + + for (int i = 0; i < att.size(); ++i){ + temp.push_back(att[i][index]); + } + + return temp; +} + vector Relation::getAttributes(){ return att; } diff --git a/Relation.h b/Relation.h index c2769c3..7de9d11 100755 --- a/Relation.h +++ b/Relation.h @@ -1,3 +1,4 @@ +#pragma once #include #include #include "Attribute.h" @@ -12,6 +13,8 @@ public: Relation(string n, vector a); void insertAttributes(vector a); string getTableName(); + Attribute operator[](int i); + vector getTuple(int index); vector getAttributes(); vector getAttributeNames(); Attribute& getAttributeByName(string s); diff --git a/test b/test new file mode 100755 index 0000000..bb0df00 Binary files /dev/null and b/test differ diff --git a/test.cpp b/test.cpp index f747bb8..24d03c1 100755 --- a/test.cpp +++ b/test.cpp @@ -1,5 +1,6 @@ #include #include +#include "Condition.h" #include "DBEngine.h" using namespace std; @@ -26,11 +27,8 @@ int main() { v.push_back(att2); v.push_back(att3); - //Relation r("Food", v); - //r.renameAttribute("Breakfast", "BFST"); - //r.display(); - engine.createTable("Food", v); +<<<<<<< HEAD vector tuple; tuple.push_back("Omelette"); @@ -54,3 +52,35 @@ int main() { engine.getTableFromName("Food").display(); cout << "finished"; } +======= + + Attribute att4("SecondBreakfast", "VARCHAR(20)", true); + Attribute att5("SecondLunch", "VARCHAR(20)", false); + Attribute att6("SecondDinner", "VARCHAR(20)", false); + + att4.addCell("Pancakes"); + att4.addCell("Bacon"); + att4.addCell("Eggs"); + att5.addCell("Turkey Sandwich"); + att5.addCell("Pasta Salad"); + att5.addCell("Taco"); + att6.addCell("Steak"); + att6.addCell("Fajitas"); + att6.addCell("Spaghetti"); + + vector v2; + v2.push_back(att4); + v2.push_back(att5); + v2.push_back(att6); + + engine.createTable("MoarFood", v2); + + vector test = engine.getTableFromName("Food").getTuple(1); + + for (int i = 0; i < test.size(); ++i){ + cout << test[i] << " "; + } + + //engine.setUnion(engine.getTableFromName("Food"), engine.getTableFromName("MoarFood")).display(); +} +>>>>>>> beccadev