Deleted some useless code. Fixing more complicated parser bugs.

This commit is contained in:
Alexander Huddleston 2015-09-29 12:36:45 -05:00
parent 28facf2997
commit 1f6fa55754
2 changed files with 177 additions and 164 deletions

View file

@ -5,6 +5,7 @@
#include <vector> #include <vector>
#include <string> #include <string>
#include "Parser.h" #include "Parser.h"
#include <tuple>
using namespace std; using namespace std;
@ -41,6 +42,176 @@ void displayTokenList(vector<string> input)
} }
} }
tuple<vector<string>, Relation> expression(vector<string> input, DBEngine &engine)
{
Relation rfinal("TEMP");
tuple<vector<string>, Relation> t(input, rfinal);
if(input[0] == "select")
{
}
else if(input[0] == "project")
{
}
else if(input[0] == "rename")
{
}
else if(engine.isRelation(input[0]))
{
Relation r1(engine.getTableFromName(input[0]));
input.erase(input.begin());
if(input[0] == "+")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.setUnion(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
else if(input[0] == "(")
{
tuple<vector<string>, Relation> t = expression(input, engine);
Relation r2 = get<1>(t);
rfinal = engine.setUnion(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
}
else if(input[0] == "-")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.setDiff(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
else if(input[0] == "(")
{
tuple<vector<string>, Relation> t = expression(input, engine);
Relation r2 = get<1>(t);
rfinal = engine.setDiff(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
}
else if(input[0] == "*")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.crossProduct(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
else if(input[0] == "(")
{
tuple<vector<string>, Relation> t = expression(input, engine);
Relation r2 = get<1>(t);
rfinal = engine.crossProduct(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
}
}
else if(input[0] == "(")
{
input.erase(input.begin());
Relation r1(engine.getTableFromName(input[0]));
input.erase(input.begin());
if(input[0] == "+")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.setUnion(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
else if(input[0] == "(")
{
tuple<vector<string>, Relation> t = expression(input, engine);
Relation r2 = get<1>(t);
rfinal = engine.setUnion(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
}
else if(input[0] == "-")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.setDiff(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
else if(input[0] == "(")
{
tuple<vector<string>, Relation> t = expression(input, engine);
Relation r2 = get<1>(t);
rfinal = engine.setDiff(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
}
else if(input[0] == "*")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.crossProduct(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
else if(input[0] == "(")
{
tuple<vector<string>, Relation> t = expression(input, engine);
Relation r2 = get<1>(t);
rfinal = engine.crossProduct(r1, r2);
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
}
}
get<0>(t) = input;
get<1>(t) = rfinal;
return t;
}
vector<string> showCMD(vector<string> input, DBEngine &engine) vector<string> showCMD(vector<string> input, DBEngine &engine)
{ {
if (input.size() > 3) if (input.size() > 3)
@ -358,16 +529,11 @@ vector<string> insertCMD(vector<string> input, DBEngine &engine)
{ {
input.erase(input.begin()); input.erase(input.begin());
//PExpression e; tuple<vector<string>, Relation> t = expression(input, engine);
// while(input[0] != ";") engine.createTable(get<1>(t));
// {
// e.setPExpression(e.getPExpression() + input[0]);
// }
//cout << "Inserting: " << e.getPExpression() << " into " << r.getName() << ".\n"; input = get<0>(t);
cout << "Not yet implemented." << endl;
return input; return input;
} }
@ -507,104 +673,6 @@ vector<string> deleteCMD(vector<string> input, DBEngine &engine)
else cout<<"Syntax error!"<<endl; else cout<<"Syntax error!"<<endl;
} }
Relation expression(vector<string> input, DBEngine &engine)
{
Relation rfinal("TEMP");
if(input[0] == "select")
{
}
else if(input[0] == "project")
{
}
else if(input[0] == "rename")
{
}
else if(engine.isRelation(input[0]))
{
Relation r1(engine.getTableFromName(input[0]));
input.erase(input.begin());
if(input[0] == "+")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.setUnion(r1, r2);
return rfinal;
}
else if(input[0] == "(")
{
Relation r2 = expression(input, engine);
rfinal = engine.setUnion(r1, r2);
return rfinal;
}
}
else if(input[0] == "-")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.setDiff(r1, r2);
return rfinal;
}
else if(input[0] == "(")
{
Relation r2 = expression(input, engine);
rfinal = engine.setDiff(r1, r2);
return rfinal;
}
}
else if(input[0] == "*")
{
input.erase(input.begin());
if(engine.isRelation(input[0]))
{
Relation r2(engine.getTableFromName(input[0]));
rfinal = engine.crossProduct(r1, r2);
return rfinal;
}
else if(input[0] == "(")
{
Relation r2 = expression(input, engine);
rfinal = engine.crossProduct(r1, r2);
return rfinal;
}
}
}
else if(input[0] == "(")
{
input.erase(input.begin());
if(input[0] == "+")
{
}
else if(input[0] == "-")
{
}
else if(input[0] == "*")
{
}
}
return rfinal;
}
vector<string> query(vector<string> input, DBEngine &engine) vector<string> query(vector<string> input, DBEngine &engine)
{ {
PRelation pr(input[0]); PRelation pr(input[0]);
@ -612,66 +680,11 @@ vector<string> query(vector<string> input, DBEngine &engine)
input.erase(input.begin()); input.erase(input.begin());
input.erase(input.begin()); input.erase(input.begin());
Relation r = expression(input, engine); tuple<vector<string>, Relation> t = expression(input, engine);
Relation r = get<1>(t);
r.setTableName(pr.getName()); r.setTableName(pr.getName());
//r.display(); //r.display();
input = get<0>(t);
//temporary fix
while(input[0] != ";")
{
input.erase(input.begin());
}
/*
if(input[0] == "select")
{
}
else if(input[0] == "project")
{
}
else if(input[0] == "rename")
{
}
else if(engine.isRelation())
{
Relation r(engine.getTableFromName(input[0]));
input.erase(input.begin());
if(input[0] == "+")
{
}
else if(input[0] == "-")
{
}
else if(input[0] == "*")
{
}
}
else
{
cout << "Invalid query request." << endl;
}
*/
//testing
/*
for(int x = 0; x < input.size(); ++x)
{
cout << input[x] << endl;
}
*/
engine.createTable(r); engine.createTable(r);

BIN
test

Binary file not shown.