condition support & selection

This commit is contained in:
Rebecca Schofield 2015-09-24 20:02:57 -05:00
parent e793c790e4
commit 60b95250f1
10 changed files with 83 additions and 56 deletions

View file

@ -60,4 +60,8 @@ void Attribute::display(){
}
cout << "-------------\n";
}
void Attribute::clearAllValues(){
values.clear();
}

View file

@ -1,3 +1,4 @@
#pragma once
#include <iostream>
#include <vector>
@ -22,4 +23,5 @@ public:
bool isKey();
int getSize();
void display();
void clearAllValues();
};

View file

@ -1,29 +1,58 @@
#include <iostream>
#include "Attribute.h"
#include "Relation.h"
using namespace std;
//currently only implementing for comparison
void equality(Attribute a, string s){
Relation equality(string attName, string s, Relation r){
Attribute att = r.getAttributeByName(attName);
vector<Attribute> r_atts = r.getAttributes();
vector<Attribute> new_atts = r_atts;
for (int i = 0; i < new_atts.size(); ++i) {
new_atts[i].clearAllValues();
}
for (int i = 0; i < att.getSize(); ++i) {
if (att[i] == s){
for (int j = 0; j < r_atts.size(); ++j){
new_atts[j].addCell(r_atts[j][i]);
}
}
}
//currently all returned relations are called TEMP
Relation new_r("TEMP", new_atts);
return new_r;
}
/*
vector<Attribute> equality(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
}
void equality(Attribute a, int i){
vector<Attribute> gt(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
}
void gt(Attribute a, int i){
vector<Attribute> lt(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
}
void lt(Attribute a, int i){
vector<Attribute> gte(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
}
void gte(Attribute a, int i){
vector<Attribute> lte(Attribute a, int i){
for (int i = 0; i < a.getSize(); ++i) {
//
}
}
void lte(Attribute a, int i){
}
*/

View file

@ -1,13 +1,4 @@
#include <iostream>
#include "Attribute.h"
#pragma once
#include "Relation.h"
using namespace std;
class Condition{
Attribute att;
public:
//currently only implemented for comparison
Condition(Attribute a);
Condition(Attribute a);
};
Relation equality(string attName, string s, Relation r);

View file

@ -1,6 +1,7 @@
#include <fstream>
#include <iostream>
#include <vector>
#include "Condition.h"
#include "DBEngine.h"
DBEngine::DBEngine(){
@ -48,6 +49,11 @@ void DBEngine::saveToFile(vector<string> cmds){
file.close();
}
Relation DBEngine::selection(string attName, string s, Relation r){
equality(attName, s, r);
}
//assumes that all attribute titles are unique
Relation DBEngine::projection(vector<string> input, Relation r){
@ -78,3 +84,13 @@ void DBEngine::rename(Relation& r, vector<string> oldnames, vector<string> newna
}
}
Relation DBEngine::setUnion(Relation r1, Relation r2){
if (r1.getAttributes() != r2.getAttributes()){
cout << "Failure to union: the relations are not union-compatible";
return;
}
else {
}
}

View file

@ -1,3 +1,4 @@
#pragma once
#include <fstream>
#include <iostream>
#include <vector>
@ -17,10 +18,10 @@ public:
//void showTable(Relation r);
Relation& getTableFromName(string n);
void saveToFile(vector<string> cmds);
//Relation selection();
Relation selection(string attName, string s, Relation r);
Relation projection(vector<string> input, Relation r);
void rename(Relation& r, vector<string> oldnames, vector<string> newnames);
//void setUnion();
Relation setUnion();
//void setDiff();
//void crossProduct();
//void crossProduct();
};

View file

@ -17,6 +17,10 @@ string Relation::getTableName(){
return name;
}
Attribute Relation::operator[](int i){
return att[i];
}
vector<Attribute> Relation::getAttributes(){
return att;
}

View file

@ -1,3 +1,4 @@
#pragma once
#include <iostream>
#include <vector>
#include "Attribute.h"
@ -11,6 +12,7 @@ public:
Relation(string n);
Relation(string n, vector<Attribute> a);
string getTableName();
Attribute operator[](int i);
vector<Attribute> getAttributes();
vector<string> getAttributeNames();
Attribute& getAttributeByName(string s);

BIN
a.out

Binary file not shown.

View file

@ -1,5 +1,6 @@
#include <iostream>
#include <vector>
#include "Condition.h"
#include "DBEngine.h"
using namespace std;
@ -26,31 +27,8 @@ int main() {
v.push_back(att2);
v.push_back(att3);
//Relation r("Food", v);
//r.renameAttribute("Breakfast", "BFST");
//r.display();
engine.createTable("Food", v);
vector<string> tuple;
tuple.push_back("Omelette");
tuple.push_back("Fried Rice");
tuple.push_back("Grouper");
engine.getTableFromName("Food").insertTuple(tuple);
vector<string> old;
vector<string> newa;
old.push_back("Breakfast");
old.push_back("Lunch");
old.push_back("Dinner");
newa.push_back("Tsafkaerb");
newa.push_back("Hcnul");
newa.push_back("Rennid");
engine.rename(engine.getTableFromName("Food"), old, newa);
engine.getTableFromName("Food").display();
cout << "finished";
Relation r = equality("Breakfast", "Pancakes", engine.getTableFromName("Food"));
r.display();
}