[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/Monaghan-Boy/QueryParser/master/Relation.cpp [Back]  [Original]

#include 
#include 
#include "Relation.h"

using namespace std;

void Relation::select(int position, string& ID){
    set temp;
    for (Tuple curr : tuples){
        if (curr[position] == ID) temp.insert(curr);
    }
    tuples = temp;
}

void Relation::select(const vector& positions){
    bool valid = true;
    set::iterator itr = tuples.begin();
    while (itr != tuples.end()){
        for (unsigned int i = 0; i < positions.size() - 1; i++) {
            if ((*itr)[positions[i]] != (*itr)[positions[i + 1]]) {
                valid = false;
                break;
            }
        }
        set::iterator temp = itr;
        itr++;
        if (!valid) {
            tuples.erase(*(temp));
            valid = true;
        }
    }
}

Relation Relation::project(const vector& positions) {
    if (positions.size() == 0){
        return Relation();
    } else {
        Scheme newScheme;
        set newTuples;
        for (unsigned int i = 0; i < positions.size(); i++) {
            newScheme.push_back(scheme[positions[i]]);
        }
        for (Tuple tuple : tuples) {
            Tuple newTuple;
            for (unsigned int i = 0; i < positions.size(); i++) {
                newTuple.push_back(tuple[positions[i]]);
            }
            newTuples.insert(newTuple);
        }
        Relation newRelation(name, newScheme);
        newRelation.tuples = newTuples;
        return newRelation;
    }
}

Relation Relation::rename(const Scheme& actual){
    Scheme newScheme;
    Relation newRelation;
    newRelation.name = this->name;
    newRelation.tuples = this->tuples;
    newRelation.scheme = this->scheme;
    for (unsigned int i = 0; i < actual.size(); i++) newRelation.scheme[i] = actual[i];
    return newRelation;
}

string Relation::toString(){
    if (tuples.size() == 0) return "";
    else {
        stringstream output;
        for (Tuple tuple : tuples){
            output 

Web Proxy Viewer  |  New URL  |  Original Page