condition support & selection
This commit is contained in:
parent
e793c790e4
commit
60b95250f1
10 changed files with 83 additions and 56 deletions
|
@ -61,3 +61,7 @@ void Attribute::display(){
|
||||||
|
|
||||||
cout << "-------------\n";
|
cout << "-------------\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Attribute::clearAllValues(){
|
||||||
|
values.clear();
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma once
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -22,4 +23,5 @@ public:
|
||||||
bool isKey();
|
bool isKey();
|
||||||
int getSize();
|
int getSize();
|
||||||
void display();
|
void display();
|
||||||
|
void clearAllValues();
|
||||||
};
|
};
|
|
@ -1,29 +1,58 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "Attribute.h"
|
#include "Relation.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
//currently only implementing for comparison
|
//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();
|
||||||
}
|
}
|
||||||
|
|
||||||
void equality(Attribute a, int i){
|
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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void gt(Attribute a, int 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 lt(Attribute a, int i){
|
vector<Attribute> gt(Attribute a, int i){
|
||||||
|
for (int i = 0; i < a.getSize(); ++i) {
|
||||||
|
//
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void gte(Attribute a, int i){
|
vector<Attribute> lt(Attribute a, int i){
|
||||||
|
for (int i = 0; i < a.getSize(); ++i) {
|
||||||
|
//
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void lte(Attribute a, int i){
|
vector<Attribute> gte(Attribute a, int i){
|
||||||
|
for (int i = 0; i < a.getSize(); ++i) {
|
||||||
|
//
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<Attribute> lte(Attribute a, int i){
|
||||||
|
for (int i = 0; i < a.getSize(); ++i) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
15
Condition.h
15
Condition.h
|
@ -1,13 +1,4 @@
|
||||||
#include <iostream>
|
#pragma once
|
||||||
#include "Attribute.h"
|
#include "Relation.h"
|
||||||
|
|
||||||
using namespace std;
|
Relation equality(string attName, string s, Relation r);
|
||||||
|
|
||||||
class Condition{
|
|
||||||
Attribute att;
|
|
||||||
|
|
||||||
public:
|
|
||||||
//currently only implemented for comparison
|
|
||||||
Condition(Attribute a);
|
|
||||||
Condition(Attribute a);
|
|
||||||
};
|
|
16
DBEngine.cpp
16
DBEngine.cpp
|
@ -1,6 +1,7 @@
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "Condition.h"
|
||||||
#include "DBEngine.h"
|
#include "DBEngine.h"
|
||||||
|
|
||||||
DBEngine::DBEngine(){
|
DBEngine::DBEngine(){
|
||||||
|
@ -48,6 +49,11 @@ void DBEngine::saveToFile(vector<string> cmds){
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Relation DBEngine::selection(string attName, string s, Relation r){
|
||||||
|
equality(attName, s, r);
|
||||||
|
}
|
||||||
|
|
||||||
//assumes that all attribute titles are unique
|
//assumes that all attribute titles are unique
|
||||||
Relation DBEngine::projection(vector<string> input, Relation r){
|
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 {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma once
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -17,10 +18,10 @@ public:
|
||||||
//void showTable(Relation r);
|
//void showTable(Relation r);
|
||||||
Relation& getTableFromName(string n);
|
Relation& getTableFromName(string n);
|
||||||
void saveToFile(vector<string> cmds);
|
void saveToFile(vector<string> cmds);
|
||||||
//Relation selection();
|
Relation selection(string attName, string s, Relation r);
|
||||||
Relation projection(vector<string> input, Relation r);
|
Relation projection(vector<string> input, Relation r);
|
||||||
void rename(Relation& r, vector<string> oldnames, vector<string> newnames);
|
void rename(Relation& r, vector<string> oldnames, vector<string> newnames);
|
||||||
//void setUnion();
|
Relation setUnion();
|
||||||
//void setDiff();
|
//void setDiff();
|
||||||
//void crossProduct();
|
//void crossProduct();
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,6 +17,10 @@ string Relation::getTableName(){
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Attribute Relation::operator[](int i){
|
||||||
|
return att[i];
|
||||||
|
}
|
||||||
|
|
||||||
vector<Attribute> Relation::getAttributes(){
|
vector<Attribute> Relation::getAttributes(){
|
||||||
return att;
|
return att;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma once
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "Attribute.h"
|
#include "Attribute.h"
|
||||||
|
@ -11,6 +12,7 @@ public:
|
||||||
Relation(string n);
|
Relation(string n);
|
||||||
Relation(string n, vector<Attribute> a);
|
Relation(string n, vector<Attribute> a);
|
||||||
string getTableName();
|
string getTableName();
|
||||||
|
Attribute operator[](int i);
|
||||||
vector<Attribute> getAttributes();
|
vector<Attribute> getAttributes();
|
||||||
vector<string> getAttributeNames();
|
vector<string> getAttributeNames();
|
||||||
Attribute& getAttributeByName(string s);
|
Attribute& getAttributeByName(string s);
|
||||||
|
|
BIN
a.out
BIN
a.out
Binary file not shown.
28
test.cpp
28
test.cpp
|
@ -1,5 +1,6 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "Condition.h"
|
||||||
#include "DBEngine.h"
|
#include "DBEngine.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -26,31 +27,8 @@ int main() {
|
||||||
v.push_back(att2);
|
v.push_back(att2);
|
||||||
v.push_back(att3);
|
v.push_back(att3);
|
||||||
|
|
||||||
//Relation r("Food", v);
|
|
||||||
//r.renameAttribute("Breakfast", "BFST");
|
|
||||||
//r.display();
|
|
||||||
|
|
||||||
engine.createTable("Food", v);
|
engine.createTable("Food", v);
|
||||||
|
|
||||||
vector<string> tuple;
|
Relation r = equality("Breakfast", "Pancakes", engine.getTableFromName("Food"));
|
||||||
tuple.push_back("Omelette");
|
r.display();
|
||||||
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";
|
|
||||||
}
|
}
|
Reference in a new issue