diff --git a/DBEngine.cpp b/DBEngine.cpp index fb4e210..3ddb6b6 100755 --- a/DBEngine.cpp +++ b/DBEngine.cpp @@ -87,26 +87,40 @@ void DBEngine::rename(Relation& r, vector oldnames, vector newna Relation DBEngine::setUnion(Relation r1, Relation r2){ if (r1.getAttributeNames() != r2.getAttributeNames()){ - vector v1 = r1.getAttributeNames(); - vector 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 r1_atts = r1.getAttributes(); + //currently all returned relations are called TEMP + Relation new_r = r1; + vector 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 r1_atts = r1.getAttributes(); vector r2_atts = r2.getAttributes(); vector 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;*/ } } diff --git a/a.out b/a.out index c56b01f..54f580c 100755 Binary files a/a.out and b/a.out differ