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..5e2dd9f 100755 --- a/Condition.cpp +++ b/Condition.cpp @@ -1,29 +1,58 @@ #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; +} +/* +vector equality(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } -void equality(Attribute a, int i){ - +vector gt(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } -void gt(Attribute a, int i){ - +vector lt(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } -void lt(Attribute a, int i){ - +vector gte(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } -void gte(Attribute a, int i){ - +vector lte(Attribute a, int i){ + for (int i = 0; i < a.getSize(); ++i) { + // + } } - -void lte(Attribute a, int i){ - -} \ No newline at end of file +*/ \ No newline at end of file diff --git a/Condition.h b/Condition.h index cc06978..1f720ec 100755 --- a/Condition.h +++ b/Condition.h @@ -1,13 +1,4 @@ -#include -#include "Attribute.h" +#pragma once +#include "Relation.h" -using namespace std; - -class Condition{ - Attribute att; - -public: - //currently only implemented for comparison - Condition(Attribute a); - Condition(Attribute a); -}; \ No newline at end of file +Relation equality(string attName, string s, Relation r); \ No newline at end of file diff --git a/DBEngine.cpp b/DBEngine.cpp index a082cd6..1383e6f 100755 --- a/DBEngine.cpp +++ b/DBEngine.cpp @@ -1,6 +1,7 @@ #include #include #include +#include "Condition.h" #include "DBEngine.h" DBEngine::DBEngine(){ @@ -48,6 +49,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){ @@ -78,3 +84,13 @@ void DBEngine::rename(Relation& r, vector oldnames, vector newna } } +Relation DBEngine::setUnion(Relation r1, Relation r2){ + if (r1.getAttributes() != r2.getAttributes()){ + cout << "Failure to union: the relations are not union-compatible"; + return; + } + + else { + + } +} \ No newline at end of file diff --git a/DBEngine.h b/DBEngine.h index 8a71981..5d91084 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(); //void setDiff(); - //void crossProduct(); + //void crossProduct(); }; diff --git a/Relation.cpp b/Relation.cpp index f81adee..613916d 100755 --- a/Relation.cpp +++ b/Relation.cpp @@ -17,6 +17,10 @@ string Relation::getTableName(){ return name; } +Attribute Relation::operator[](int i){ + return att[i]; +} + vector Relation::getAttributes(){ return att; } diff --git a/Relation.h b/Relation.h index faa89ea..8aa2a4b 100755 --- a/Relation.h +++ b/Relation.h @@ -1,3 +1,4 @@ +#pragma once #include #include #include "Attribute.h" @@ -11,6 +12,7 @@ public: Relation(string n); Relation(string n, vector a); string getTableName(); + Attribute operator[](int i); vector getAttributes(); vector getAttributeNames(); Attribute& getAttributeByName(string s); diff --git a/a.out b/a.out index 6a77a3d..141fa42 100755 Binary files a/a.out and b/a.out differ diff --git a/test.cpp b/test.cpp index 4174101..5740ec7 100755 --- a/test.cpp +++ b/test.cpp @@ -1,5 +1,6 @@ #include #include +#include "Condition.h" #include "DBEngine.h" using namespace std; @@ -26,31 +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); - - vector tuple; - tuple.push_back("Omelette"); - tuple.push_back("Fried Rice"); - tuple.push_back("Grouper"); - - engine.getTableFromName("Food").insertTuple(tuple); - - vector old; - vector newa; - - old.push_back("Breakfast"); - old.push_back("Lunch"); - old.push_back("Dinner"); - - newa.push_back("Tsafkaerb"); - newa.push_back("Hcnul"); - newa.push_back("Rennid"); - - engine.rename(engine.getTableFromName("Food"), old, newa); - engine.getTableFromName("Food").display(); - cout << "finished"; + + Relation r = equality("Breakfast", "Pancakes", engine.getTableFromName("Food")); + r.display(); } \ No newline at end of file