union works
This commit is contained in:
parent
db4396b952
commit
d5ea5433e0
2 changed files with 32 additions and 18 deletions
50
DBEngine.cpp
50
DBEngine.cpp
|
@ -87,26 +87,40 @@ void DBEngine::rename(Relation& r, vector<string> oldnames, vector<string> newna
|
|||
|
||||
Relation DBEngine::setUnion(Relation r1, Relation r2){
|
||||
if (r1.getAttributeNames() != r2.getAttributeNames()){
|
||||
vector<string> v1 = r1.getAttributeNames();
|
||||
vector<string> v2 = r2.getAttributeNames();
|
||||
|
||||
for (int i = 0; i < v1.size(); ++i){
|
||||
cout << v1[i] << " ";
|
||||
}
|
||||
cout << "\n";
|
||||
|
||||
for (int i = 0; i < v2.size(); ++i){
|
||||
cout << v2[i] << " ";
|
||||
}
|
||||
cout << "\n";
|
||||
|
||||
|
||||
cout << "Failure to union: the relations are not union-compatible.\nreturning the first relation.\n";
|
||||
return r1;
|
||||
}
|
||||
|
||||
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> new_atts = r1_atts;
|
||||
|
||||
|
@ -116,17 +130,17 @@ Relation DBEngine::setUnion(Relation r1, Relation r2){
|
|||
}
|
||||
}
|
||||
|
||||
/*for (int i = 0; i < new_atts.size(); ++i) {
|
||||
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;
|
||||
return new_r;*/
|
||||
}
|
||||
}
|
||||
|
|
BIN
a.out
BIN
a.out
Binary file not shown.
Reference in a new issue