From 60b95250f17c04ccae357e7392cc388584a1730a Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Thu, 24 Sep 2015 20:02:57 -0500 Subject: [PATCH] condition support & selection --- Attribute.cpp | 4 ++++ Attribute.h | 2 ++ Condition.cpp | 59 +++++++++++++++++++++++++++++++++++++------------- Condition.h | 15 +++---------- DBEngine.cpp | 16 ++++++++++++++ DBEngine.h | 7 +++--- Relation.cpp | 4 ++++ Relation.h | 2 ++ a.out | Bin 38917 -> 92259 bytes test.cpp | 30 ++++--------------------- 10 files changed, 83 insertions(+), 56 deletions(-) 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 6a77a3df2bea8473f5f60940f721d90c854fadc5..141fa42c15bb17b11edbda39c82013d560d828cc 100755 GIT binary patch literal 92259 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 literal 38917 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 ZKX7r$9%5-6L>Eeo#$bJu!9R%^{|#1L+kyZ9 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