condition support & selection

This commit is contained in:
Rebecca Schofield 2015-09-24 20:02:57 -05:00
parent e793c790e4
commit 60b95250f1
10 changed files with 83 additions and 56 deletions

View file

@ -61,3 +61,7 @@ void Attribute::display(){
cout << "-------------\n"; cout << "-------------\n";
} }
void Attribute::clearAllValues(){
values.clear();
}

View file

@ -1,3 +1,4 @@
#pragma once
#include <iostream> #include <iostream>
#include <vector> #include <vector>
@ -22,4 +23,5 @@ public:
bool isKey(); bool isKey();
int getSize(); int getSize();
void display(); void display();
void clearAllValues();
}; };

View file

@ -1,29 +1,58 @@
#include <iostream> #include <iostream>
#include "Attribute.h" #include "Relation.h"
using namespace std; using namespace std;
//currently only implementing for comparison //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<Attribute> r_atts = r.getAttributes();
vector<Attribute> 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<Attribute> equality(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
} }
void equality(Attribute a, int i){ vector<Attribute> gt(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
} }
void gt(Attribute a, int i){ vector<Attribute> lt(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
} }
void lt(Attribute a, int i){ vector<Attribute> gte(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
} }
void gte(Attribute a, int i){ vector<Attribute> lte(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
} //
}
void lte(Attribute a, int i){
} }
*/

View file

@ -1,13 +1,4 @@
#include <iostream> #pragma once
#include "Attribute.h" #include "Relation.h"
using namespace std; Relation equality(string attName, string s, Relation r);
class Condition{
Attribute att;
public:
//currently only implemented for comparison
Condition(Attribute a);
Condition(Attribute a);
};

View file

@ -1,6 +1,7 @@
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include "Condition.h"
#include "DBEngine.h" #include "DBEngine.h"
DBEngine::DBEngine(){ DBEngine::DBEngine(){
@ -48,6 +49,11 @@ void DBEngine::saveToFile(vector<string> cmds){
file.close(); file.close();
} }
Relation DBEngine::selection(string attName, string s, Relation r){
equality(attName, s, r);
}
//assumes that all attribute titles are unique //assumes that all attribute titles are unique
Relation DBEngine::projection(vector<string> input, Relation r){ Relation DBEngine::projection(vector<string> input, Relation r){
@ -78,3 +84,13 @@ void DBEngine::rename(Relation& r, vector<string> oldnames, vector<string> 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 {
}
}

View file

@ -1,3 +1,4 @@
#pragma once
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <vector> #include <vector>
@ -17,10 +18,10 @@ public:
//void showTable(Relation r); //void showTable(Relation r);
Relation& getTableFromName(string n); Relation& getTableFromName(string n);
void saveToFile(vector<string> cmds); void saveToFile(vector<string> cmds);
//Relation selection(); Relation selection(string attName, string s, Relation r);
Relation projection(vector<string> input, Relation r); Relation projection(vector<string> input, Relation r);
void rename(Relation& r, vector<string> oldnames, vector<string> newnames); void rename(Relation& r, vector<string> oldnames, vector<string> newnames);
//void setUnion(); Relation setUnion();
//void setDiff(); //void setDiff();
//void crossProduct(); //void crossProduct();
}; };

View file

@ -17,6 +17,10 @@ string Relation::getTableName(){
return name; return name;
} }
Attribute Relation::operator[](int i){
return att[i];
}
vector<Attribute> Relation::getAttributes(){ vector<Attribute> Relation::getAttributes(){
return att; return att;
} }

View file

@ -1,3 +1,4 @@
#pragma once
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include "Attribute.h" #include "Attribute.h"
@ -11,6 +12,7 @@ public:
Relation(string n); Relation(string n);
Relation(string n, vector<Attribute> a); Relation(string n, vector<Attribute> a);
string getTableName(); string getTableName();
Attribute operator[](int i);
vector<Attribute> getAttributes(); vector<Attribute> getAttributes();
vector<string> getAttributeNames(); vector<string> getAttributeNames();
Attribute& getAttributeByName(string s); Attribute& getAttributeByName(string s);

BIN
a.out

Binary file not shown.

View file

@ -1,5 +1,6 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include "Condition.h"
#include "DBEngine.h" #include "DBEngine.h"
using namespace std; using namespace std;
@ -26,31 +27,8 @@ int main() {
v.push_back(att2); v.push_back(att2);
v.push_back(att3); v.push_back(att3);
//Relation r("Food", v);
//r.renameAttribute("Breakfast", "BFST");
//r.display();
engine.createTable("Food", v); engine.createTable("Food", v);
vector<string> tuple; Relation r = equality("Breakfast", "Pancakes", engine.getTableFromName("Food"));
tuple.push_back("Omelette"); r.display();
tuple.push_back("Fried Rice");
tuple.push_back("Grouper");
engine.getTableFromName("Food").insertTuple(tuple);
vector<string> old;
vector<string> 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";
} }