union works
This commit is contained in:
commit
27f63bd452
8 changed files with 58 additions and 12 deletions
|
@ -21,6 +21,11 @@ void Attribute::addCell(string v){
|
||||||
size++;
|
size++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Attribute::removeCell(int index){
|
||||||
|
values.erase(values.begin() + index);
|
||||||
|
size--;
|
||||||
|
}
|
||||||
|
|
||||||
string Attribute::operator[](int i){
|
string Attribute::operator[](int i){
|
||||||
return values[i];
|
return values[i];
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ public:
|
||||||
Attribute();
|
Attribute();
|
||||||
Attribute(string n, string t, bool k);
|
Attribute(string n, string t, bool k);
|
||||||
void addCell(string v);
|
void addCell(string v);
|
||||||
|
void removeCell(int index);
|
||||||
string operator[](int i);
|
string operator[](int i);
|
||||||
vector<string> getValues();
|
vector<string> getValues();
|
||||||
string getName();
|
string getName();
|
||||||
|
|
40
DBEngine.cpp
40
DBEngine.cpp
|
@ -92,14 +92,42 @@ void DBEngine::rename(Relation& r, vector<string> oldnames, vector<string> newna
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Relation DBEngine::setUnion(Relation r1, Relation r2){
|
Relation DBEngine::setUnion(Relation r1, Relation r2){
|
||||||
if (r1.getAttributeNames() != r2.getAttributeNames()){
|
if (r1.getAttributeNames() != r2.getAttributeNames()){
|
||||||
cout << "Failure to union: the relations are not union-compatible";
|
cout << "Failure to union: the relations are not union-compatible.\nreturning the first relation.\n";
|
||||||
return;
|
return r1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
vector<Attribute> r1_atts = r1.getAttributes();
|
//currently all returned relations are called TEMP
|
||||||
|
Relation new_r = r1;
|
||||||
|
vector<string> temp;
|
||||||
|
bool duplicate = false;
|
||||||
|
|
||||||
|
for (int i = 0; i < r2.getAttributes()[0].getSize(); ++i) {
|
||||||
|
temp = r2.getTuple(i);
|
||||||
|
|
||||||
|
for (int j = 0; j < new_r.getAttributes()[0].getSize(); ++j){
|
||||||
|
if (temp == new_r.getTuple(j)){
|
||||||
|
duplicate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!duplicate) {
|
||||||
|
new_r.insertTuple(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
duplicate = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new_r;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*vector<Attribute> r1_atts = r1.getAttributes();
|
||||||
vector<Attribute> r2_atts = r2.getAttributes();
|
vector<Attribute> r2_atts = r2.getAttributes();
|
||||||
vector<Attribute> new_atts = r1_atts;
|
vector<Attribute> new_atts = r1_atts;
|
||||||
|
|
||||||
|
@ -120,6 +148,6 @@ void DBEngine::rename(Relation& r, vector<string> oldnames, vector<string> newna
|
||||||
|
|
||||||
//currently all returned relations are called TEMP
|
//currently all returned relations are called TEMP
|
||||||
Relation new_r("TEMP", new_atts);
|
Relation new_r("TEMP", new_atts);
|
||||||
return new_r;
|
return new_r;*/
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ public:
|
||||||
Relation selection(string attName, string s, Relation r);
|
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);
|
||||||
//Relation setUnion(Relation r1, Relation r2);
|
Relation setUnion(Relation r1, Relation r2);
|
||||||
//void setDiff();
|
//void setDiff();
|
||||||
//void crossProduct();
|
//void crossProduct();
|
||||||
};
|
};
|
||||||
|
|
12
Relation.cpp
12
Relation.cpp
|
@ -110,3 +110,15 @@ void Relation::insertFromRelation(Relation r){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Relation::removeTuple(int index){
|
||||||
|
if (index >= this->size) {
|
||||||
|
cout << "Failure to delete: the requested index is out of bounds.";
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
for (int i = 0; i < att.size(); ++i) {
|
||||||
|
att[i].removeCell(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,5 +23,5 @@ public:
|
||||||
void display();
|
void display();
|
||||||
void insertTuple(vector<string> tuple); //assuming they are in order
|
void insertTuple(vector<string> tuple); //assuming they are in order
|
||||||
void insertFromRelation(Relation r);
|
void insertFromRelation(Relation r);
|
||||||
//void removeTuple();
|
void removeTuple(int index);
|
||||||
};
|
};
|
BIN
a.out
Executable file
BIN
a.out
Executable file
Binary file not shown.
8
test.cpp
8
test.cpp
|
@ -29,9 +29,9 @@ int main() {
|
||||||
|
|
||||||
engine.createTable("Food", v);
|
engine.createTable("Food", v);
|
||||||
|
|
||||||
Attribute att4("SecondBreakfast", "VARCHAR(20)", true);
|
Attribute att4("Breakfast", "VARCHAR(20)", true);
|
||||||
Attribute att5("SecondLunch", "VARCHAR(20)", false);
|
Attribute att5("Lunch", "VARCHAR(20)", false);
|
||||||
Attribute att6("SecondDinner", "VARCHAR(20)", false);
|
Attribute att6("Dinner", "VARCHAR(20)", false);
|
||||||
|
|
||||||
att4.addCell("Pancakes");
|
att4.addCell("Pancakes");
|
||||||
att4.addCell("Bacon");
|
att4.addCell("Bacon");
|
||||||
|
@ -50,5 +50,5 @@ int main() {
|
||||||
|
|
||||||
engine.createTable("MoarFood", v2);
|
engine.createTable("MoarFood", v2);
|
||||||
|
|
||||||
//engine.setUnion(engine.getTableFromName("Food"), engine.getTableFromName("MoarFood")).display();
|
engine.setUnion(engine.getTableFromName("Food"), engine.getTableFromName("MoarFood")).display();
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue