266 lines
No EOL
4.3 KiB
C++
Executable file
266 lines
No EOL
4.3 KiB
C++
Executable file
#include <string> // std::string
|
|
#include <iostream> // std::cout
|
|
#include <sstream> // std::stringstream
|
|
#include <vector>
|
|
#include <string>
|
|
#include "DBEngine.h"
|
|
|
|
using namespace std;
|
|
|
|
class PRelation
|
|
{
|
|
string name;
|
|
|
|
public:
|
|
PRelation() { name = "~"; }
|
|
PRelation(string str) { name = str; }
|
|
void setPRelation(string str) { name = str; }
|
|
string getName() { return name; }
|
|
};
|
|
|
|
class PAttribute
|
|
{
|
|
string name;
|
|
string type;
|
|
bool key;
|
|
int size;
|
|
|
|
public:
|
|
PAttribute() {
|
|
name = "~";
|
|
type = "~";
|
|
key = false;
|
|
size = 0;
|
|
}
|
|
|
|
PAttribute(string str, string t) {
|
|
name = str;
|
|
type = t;
|
|
key = false;
|
|
size = 0;
|
|
}
|
|
|
|
PAttribute(string str, string t, int s) {
|
|
name = str;
|
|
type = t;
|
|
key = false;
|
|
size = s;
|
|
}
|
|
|
|
void setPAttributeName(string str) { name = str; }
|
|
void setPAttributeType(string t) { type = t; }
|
|
void setPAttributeKey() { key = true; }
|
|
void setPAttributeSize(int s) { size = s; }
|
|
string getPAttribute() { return name; }
|
|
string getPAttributeType() { return type; }
|
|
bool getPAttributeKey() { return key; }
|
|
int getPAttributeSize() { return size; }
|
|
};
|
|
|
|
class PUnion
|
|
{
|
|
string Un1;
|
|
string Un2;
|
|
|
|
public:
|
|
PUnion() {
|
|
Un1 = "~";
|
|
Un2 = "~";
|
|
}
|
|
|
|
PUnion(string s1, string s2) {
|
|
Un1 = s1;
|
|
Un2 = s2;
|
|
}
|
|
|
|
string getPUnion() {
|
|
return "Union of " + Un1 + " and " + Un2;
|
|
}
|
|
};
|
|
|
|
class PProduct
|
|
{
|
|
string Pr1;
|
|
string Pr2;
|
|
|
|
public:
|
|
PProduct() {
|
|
Pr1 = "~";
|
|
Pr2 = "~";
|
|
}
|
|
|
|
PProduct(string s1, string s2) {
|
|
Pr1 = s1;
|
|
Pr2 = s2;
|
|
}
|
|
|
|
string getPProduct() {
|
|
return "Product of " + Pr1 + " and " + Pr2;
|
|
}
|
|
};
|
|
|
|
class PDifference
|
|
{
|
|
string D1;
|
|
string D2;
|
|
|
|
public:
|
|
PDifference() {
|
|
D1 = "~";
|
|
D2 = "~";
|
|
}
|
|
|
|
PDifference(string s1, string s2) {
|
|
D1 = s1;
|
|
D2 = s2;
|
|
}
|
|
|
|
string getPDifference() {
|
|
return "Difference of " + D1 + " and " + D2;
|
|
}
|
|
};
|
|
|
|
class PRenaming
|
|
{
|
|
string newName;
|
|
string oldName;
|
|
|
|
public:
|
|
PRenaming() {
|
|
newName = "~";
|
|
oldName = "~";
|
|
}
|
|
|
|
PRenaming(string s1, string s2) {
|
|
newName = s1;
|
|
oldName = s2;
|
|
}
|
|
|
|
string doRename() {
|
|
return "Renaming " + oldName + " to " + newName;
|
|
}
|
|
};
|
|
|
|
class PProjection
|
|
{
|
|
string newName;
|
|
string oldName;
|
|
|
|
public:
|
|
PProjection() {
|
|
newName = "~";
|
|
oldName = "~";
|
|
}
|
|
|
|
PProjection(string s1, string s2) {
|
|
newName = s1;
|
|
oldName = s2;
|
|
}
|
|
|
|
string doPProjection() {
|
|
return "Projecting " + oldName + " onto " + newName;
|
|
}
|
|
};
|
|
|
|
class POperand
|
|
{
|
|
string op;
|
|
|
|
public:
|
|
POperand() { op = "~"; }
|
|
POperand(string str) { op = str; }
|
|
void setPOperand(string str) { op = str; }
|
|
string getPOperand() { return op; }
|
|
};
|
|
|
|
class POp
|
|
{
|
|
string op;
|
|
|
|
public:
|
|
POp() { op = "~"; }
|
|
POp(string str) { op = str; }
|
|
void setPOp(string str) { op = str; }
|
|
string getPOp() { return op; }
|
|
};
|
|
|
|
class PComparison
|
|
{
|
|
POp op;
|
|
POperand operand1;
|
|
POperand operand2;
|
|
|
|
public:
|
|
PComparison() {
|
|
op.setPOp("~");
|
|
operand1.setPOperand("~");
|
|
operand2.setPOperand("~");
|
|
}
|
|
|
|
PComparison(string str1, string str2, string str3) {
|
|
operand1.setPOperand(str1);
|
|
op.setPOp(str2);
|
|
operand2.setPOperand(str3);
|
|
}
|
|
|
|
void setPComparison(string str1, string str2, string str3) {
|
|
operand1.setPOperand(str1);
|
|
op.setPOp(str2);
|
|
operand2.setPOperand(str3);
|
|
}
|
|
|
|
string getPComparison() {
|
|
return operand1.getPOperand() + " " + op.getPOp() + " " + operand2.getPOperand();
|
|
}
|
|
};
|
|
|
|
class PConjunction
|
|
{
|
|
string conj;
|
|
public:
|
|
PConjunction() { conj = "~"; }
|
|
PConjunction(string str) { conj = str; }
|
|
void setPConjunction(string str) { conj = str; }
|
|
string getPConjunction() { return conj; }
|
|
};
|
|
|
|
class PCondition
|
|
{
|
|
string cond;
|
|
public:
|
|
|
|
PCondition() { cond = "~"; }
|
|
PCondition(string str) { cond = str; }
|
|
void setPCondition(string str) { cond = str; }
|
|
string getPCondition() { return cond; }
|
|
};
|
|
|
|
class PSelection
|
|
{
|
|
string select;
|
|
public:
|
|
PSelection() { select = "~"; }
|
|
PSelection(string str) { select = str; }
|
|
string getPSelection() { return select; }
|
|
};
|
|
|
|
class PExpression
|
|
{
|
|
PRelation rel;
|
|
PSelection sel;
|
|
PProjection proj;
|
|
PRenaming ren;
|
|
PUnion un;
|
|
PDifference diff;
|
|
PProduct prod;
|
|
string temp;
|
|
|
|
public:
|
|
|
|
PExpression() { select = "~"; }
|
|
PExpression(string str) { temp = str; }
|
|
void setPExpression(string str) { temp = str; }
|
|
string getPExpression() { return temp; }
|
|
};
|
|
|
|
void parse(string s, DBEngine &e); |