419 lines
4.6 KiB
C
419 lines
4.6 KiB
C
![]() |
#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()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
PExpression(string str)
|
||
|
{
|
||
|
temp = str;
|
||
|
}
|
||
|
|
||
|
void setPExpression(string str)
|
||
|
{
|
||
|
temp = str;
|
||
|
}
|
||
|
|
||
|
string getPExpression()
|
||
|
{
|
||
|
return temp;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
void parse(string s, DBEngine &e);
|