From d5ea5433e04f2d4f00cf13e55522cc08714e18ec Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Thu, 24 Sep 2015 21:33:25 -0500 Subject: [PATCH] union works --- DBEngine.cpp | 50 ++++++++++++++++++++++++++++++++------------------ a.out | Bin 97311 -> 97311 bytes 2 files changed, 32 insertions(+), 18 deletions(-) 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 c56b01fd09d05495e3e07c266d7bb3f32ed25e2d..54f580c771995270a139f89552204b6cc6a36474 100755 GIT binary patch delta 14343 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 Jd)UZl{}0bu;S>M> delta 14245 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