From c6c5caaf027cea27f18de2e0aa81510759e1fe3e Mon Sep 17 00:00:00 2001 From: Alexander Huddleston Date: Wed, 23 Sep 2015 15:24:42 -0500 Subject: [PATCH 1/2] Added default constructor values to classes for Parser. --- Parserv3.h | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/Parserv3.h b/Parserv3.h index 830f98e..d3f7812 100644 --- a/Parserv3.h +++ b/Parserv3.h @@ -14,6 +14,7 @@ class Relation public: Relation() { + name = NULL; } Relation(string str) @@ -36,6 +37,11 @@ class Attribute string name; public: + Attribute() + { + name = NULL; + } + Attribute(string str) { name = str; @@ -58,6 +64,12 @@ class Union string Un2; public: + Union() + { + Un1 = NULL; + Un2 = NULL; + } + Union (string s1, string s2) { Un1 = s1; @@ -76,6 +88,12 @@ class Product string Pr2; public: + Product() + { + Pr1 = NULL; + Pr2 = NULL; + } + Product(string s1, string s2) { Pr1 = s1; @@ -94,6 +112,12 @@ class Difference string D2; public: + Difference() + { + D1 = NULL; + D2 = NULL; + } + Difference(string s1, string s2) { D1 = s1; @@ -112,6 +136,12 @@ class Renaming string oldName; public: + Renaming() + { + newName = NULL; + oldName = NULL; + } + Renaming(string s1, string s2) { newName = s1; @@ -130,6 +160,12 @@ class Projection string oldName; public: + Projection() + { + newName = NULL; + oldName = NULL; + } + Projection(string s1, string s2) { newName = s1; @@ -150,6 +186,7 @@ class Operand Operand() { + op = NULL; } Operand(string str) @@ -175,6 +212,7 @@ class Op public: Op() { + op = NULL; } Op(string str) @@ -200,7 +238,13 @@ class Comparison Operand operand2; public: - + Comparison() + { + op = NULL; + operand1 = NULL; + operand2 = NULL; + } + Comparison(string str1, string str2, string str3) { operand1.setOperand(str1); @@ -225,6 +269,11 @@ class Conjunction { string conj; public: + Conjunction() + { + conj = NULL; + } + Conjunction(string str) { conj = str; @@ -248,6 +297,7 @@ class Condition Condition() { + cond = NULL; } Condition(string str) @@ -270,6 +320,11 @@ class Selection { string select; public: + Selection() + { + select = NULL; + } + Selection(string str) { select = str; @@ -289,6 +344,7 @@ class Expression Expression() { + exp = NULL; } Expression(string str) From cd14f55be7aebc7534f7789ddba26f980faee124 Mon Sep 17 00:00:00 2001 From: Alexander Huddleston Date: Wed, 23 Sep 2015 17:34:36 -0500 Subject: [PATCH 2/2] Adding DBEngine functions into CreateCMD parser function. --- DBEngine.cpp | 10 +++ Parserv2.cpp | 196 -------------------------------------------- Parserv3.h | 225 +++++++++++++++++++++++++++++---------------------- Parserv4.cpp | 74 +++++++++++------ a.out | Bin 38917 -> 87749 bytes 5 files changed, 185 insertions(+), 320 deletions(-) delete mode 100755 Parserv2.cpp diff --git a/DBEngine.cpp b/DBEngine.cpp index d028aea..a10368c 100755 --- a/DBEngine.cpp +++ b/DBEngine.cpp @@ -27,6 +27,16 @@ void DBEngine::createTable(Relation r){ vector DBEngine::getRelations(){ return tables; } + +//To check if a relation name is already used. +bool DBEngine::isRelation(string n){ + for(int i = 0; i < tables.size(); i++){ + if (tables[i].getTableName() == n){ + return true; + } + } + return false; +} Relation& DBEngine::getTableFromName(string n){ for(int i = 0; i < tables.size(); i++){ diff --git a/Parserv2.cpp b/Parserv2.cpp deleted file mode 100755 index cb848f3..0000000 --- a/Parserv2.cpp +++ /dev/null @@ -1,196 +0,0 @@ -#include -#include -#include -#include -#include - -using namespace std; - - -vector tokenize(string ss) -{ - string tempString; - stringstream lineStream(ss); - vector output; - - while (lineStream >> tempString) - { - output.push_back(tempString); - } - - //testing--------------- - cout<<"TokenList: "; - - for (int i = 0; i input) -{ - cout<<"TokenList: "< insertCMD(vector input) -{ - //relation name will be the first element of the vector of data returned by this function - vector output; - - if (input[0] == "INTO") - { - input.erase(input.begin()); - - output.push_back(input[0]); //pushing relation name - - input.erase(input.begin()); - - if (input[0] == "VALUES" && input[1] == "FROM") - { - input.erase(input.begin()); - input.erase(input.begin()); - - - if(input[0] == "(") - { - input.erase(input.begin()); - - while(input[0] != ")") //inserting all values to relation - //for (int i = 0; i < 2; ++i) - { - if (input[0] == ",") input.erase(input.begin()); - - output.push_back(input[0]); - - input.erase(input.begin()); - } - - return output; - - } - - else cout<<"Syntax error!"< showCMD(vector input) -{ - if (input.size() > 3) - { - cout<<"Syntax error!"< exitCMD(vector input) -{ - if (input[1] != ";") - { - cout<<"ERROR: missing semicolon!"< createCMD(vector input) -{ - if (input[0] != "CREATE") { - cout << "Error: create keyword is missing." < openCMD(vector input){ - if (input[0] != "OPEN") { - cout << "Error: open keyword is missing." < closeCMD(vector input){ - if (input[0] != "CLOSE") { - cout << "Error: close keyword is missing." < saveCMD(vector input){ - if (input[0] != "SAVE") { - cout << "Error: save keyword is missing." < updateCMD(vector input){ - //UPDATE relation-name SET attribute-name = literal { , attribute-name = literal } WHERE condition -} - -vector deleteCMD(vector input){ - //DELETE FROM relation-name WHERE condition - if (input[0] != "DELETE") { - cout << "Error: save keyword is missing." < listOfTokens = tokenize(s); - deleteCMD(listOfTokens); -} \ No newline at end of file diff --git a/Parserv3.h b/Parserv3.h index d3f7812..0064a9b 100644 --- a/Parserv3.h +++ b/Parserv3.h @@ -7,22 +7,22 @@ using namespace std; -class Relation +class PRelation { string name; public: - Relation() + PRelation() { - name = NULL; + name = "~"; } - Relation(string str) + PRelation(string str) { name = str; } - void setRelation(string str) + void setPRelation(string str) { name = str; } @@ -32,117 +32,140 @@ class Relation } }; -class Attribute +class PAttribute { string name; + string type; + string size; public: - Attribute() + PAttribute() { - name = NULL; + name = "~"; + type = "~"; + size = "~"; } - Attribute(string str) + PAttribute(string str, string t) + { + name = str; + type = t; + size = "~"; + } + + PAttribute(string str, string t, string s) + { + name = str; + type = t; + size = s; + } + + void setPAttributeName(string str) { name = str; } - void setAttribute(string str) + void setPAttributeType(string t) { - name = str; + type = t; } - string getAttribute() + void setPAttributeSize(string s) + { + size = s; + } + + string getPAttribute() { return name; } }; -class Union +class PUnion { string Un1; string Un2; public: - Union() + PUnion() { - Un1 = NULL; - Un2 = NULL; + Un1 = "~"; + Un2 = "~"; } - Union (string s1, string s2) + PUnion (string s1, string s2) { Un1 = s1; Un2 = s2; } - string getUnion() + string getPUnion() { return "Union of " + Un1 + " and " + Un2; } }; -class Product +class PProduct { string Pr1; string Pr2; public: - Product() + PProduct() { - Pr1 = NULL; - Pr2 = NULL; + Pr1 = "~"; + Pr2 = "~"; } - Product(string s1, string s2) + PProduct(string s1, string s2) { Pr1 = s1; Pr2 = s2; } - string getProduct() + string getPProduct() { return "Product of " + Pr1 + " and " + Pr2; } }; -class Difference +class PDifference { string D1; string D2; public: - Difference() + PDifference() { - D1 = NULL; - D2 = NULL; + D1 = "~"; + D2 = "~"; } - Difference(string s1, string s2) + PDifference(string s1, string s2) { D1 = s1; D2 = s2; } - string getDifference() + string getPDifference() { return "Difference of " + D1 + " and " + D2; } }; -class Renaming +class PRenaming { string newName; string oldName; public: - Renaming() + PRenaming() { - newName = NULL; - oldName = NULL; + newName = "~"; + oldName = "~"; } - Renaming(string s1, string s2) + PRenaming(string s1, string s2) { newName = s1; oldName = s2; @@ -154,211 +177,217 @@ class Renaming } }; -class Projection +class PProjection { string newName; string oldName; public: - Projection() + PProjection() { - newName = NULL; - oldName = NULL; + newName = "~"; + oldName = "~"; } - Projection(string s1, string s2) + PProjection(string s1, string s2) { newName = s1; oldName = s2; } - string doProjection() + string doPProjection() { return "Projecting " + oldName + " onto " + newName; } }; -class Operand +class POperand { string op; public: - Operand() + POperand() { - op = NULL; + op = "~"; } - Operand(string str) + POperand(string str) { op = str; } - void setOperand(string str) + void setPOperand(string str) { op = str; } - string getOperand() + string getPOperand() { return op; } }; -class Op +class POp { string op; public: - Op() + POp() { - op = NULL; + op = "~"; } - Op(string str) + POp(string str) { op = str; } - void setOp(string str) + void setPOp(string str) { op = str; } - string getOp() + string getPOp() { return op; } }; -class Comparison +class PComparison { - Op op; - Operand operand1; - Operand operand2; + POp op; + POperand operand1; + POperand operand2; public: - Comparison() + PComparison() { - op = NULL; - operand1 = NULL; - operand2 = NULL; + op.setPOp("~"); + operand1.setPOperand("~"); + operand2.setPOperand("~"); } - Comparison(string str1, string str2, string str3) + PComparison(string str1, string str2, string str3) { - operand1.setOperand(str1); - op.setOp(str2); - operand2.setOperand(str3); + operand1.setPOperand(str1); + op.setPOp(str2); + operand2.setPOperand(str3); } - void setComparison(string str1, string str2, string str3) + void setPComparison(string str1, string str2, string str3) { - operand1.setOperand(str1); - op.setOp(str2); - operand2.setOperand(str3); + operand1.setPOperand(str1); + op.setPOp(str2); + operand2.setPOperand(str3); } - string getComparison() + string getPComparison() { - return operand1.getOperand() + " " + op.getOp() + " " + operand2.getOperand(); + return operand1.getPOperand() + " " + op.getPOp() + " " + operand2.getPOperand(); } }; -class Conjunction +class PConjunction { string conj; public: - Conjunction() + PConjunction() { - conj = NULL; + conj = "~"; } - Conjunction(string str) + PConjunction(string str) { conj = str; } - void setConjunction(string str) + void setPConjunction(string str) { conj = str; } - string getConjunction() + string getPConjunction() { return conj; } }; -class Condition +class PCondition { string cond; public: - Condition() + PCondition() { - cond = NULL; + cond = "~"; } - Condition(string str) + PCondition(string str) { cond = str; } - void setCondition(string str) + void setPCondition(string str) { cond = str; } - string getCondition() + string getPCondition() { return cond; } }; -class Selection +class PSelection { string select; public: - Selection() + PSelection() { - select = NULL; + select = "~"; } - Selection(string str) + PSelection(string str) { select = str; } - string getSelection() + string getPSelection() { return select; } }; -class Expression +class PExpression { - string exp; + PRelation rel; + PSelection sel; + PProjection proj; + PRenaming ren; + PUnion un; + PDifference diff; + PProduct prod; + string temp; public: - Expression() + PExpression() { - exp = NULL; } - Expression(string str) + PExpression(string str) { - exp = str; + temp = str; } - void setExpression(string str) + void setPExpression(string str) { - exp = str; + temp = str; } - string getExpression() + string getPExpression() { - return exp; + return temp; } }; diff --git a/Parserv4.cpp b/Parserv4.cpp index 8d5f17b..f6c0bb4 100644 --- a/Parserv4.cpp +++ b/Parserv4.cpp @@ -118,8 +118,8 @@ vector createCMD(vector input) input.erase(input.begin()); input.erase(input.begin()); - Relation r; - r.setRelation(input[0]); + PRelation r; + r.setPRelation(input[0]); input.erase(input.begin()); @@ -127,21 +127,39 @@ vector createCMD(vector input) { input.erase(input.begin()); - vector e1; + //vector e1; + + vector a; while(input[0] != ")") //inserting all values to relation { + PAttribute temp; + if (input[0] == ",") { input.erase(input.begin()); } - e1.push_back(input[0]); + temp.setPAttributeName(input[0]); input.erase(input.begin()); + + if(input[0] == "INTEGER") + { + temp.setPAttributeType(input[0]); + input.erase(input.begin()); + } + else + { + temp.setPAttributeType(input[0].substr(0,input[0].find("("))); + temp.setPAttributeSize(input[0].substr(input[0].find("("), input[0].find(")"))); + input.erase(input.begin()); + } + + a.push_back(temp); } - vector e2; + vector apk; //save primary keys temp storage if(input[0] == "PRIMARY" && input[1] == "KEY") { @@ -153,23 +171,21 @@ vector createCMD(vector input) while(input[0] != ")") //inserting all values to relation { + PAttribute temp; + if (input[0] == ",") { input.erase(input.begin()); } - e2.push_back(input[0]); + temp.setPAttributeName(input[0]); + + apk.push_back(temp); input.erase(input.begin()); } - cout << "Creating a table: " << r.getName() << "\n"; - cout << "Primary key: "; - while(!e2.empty()) - { - cout << e2[0].getExpression() << " "; - e2.erase(e2.begin()); - } + return input; } @@ -190,10 +206,12 @@ vector insertCMD(vector input) { input.erase(input.begin()); - Relation r(input[0]); + PRelation r(input[0]); input.erase(input.begin()); + vector s; + if (input[0] == "VALUES" && input[1] == "FROM") { input.erase(input.begin()); @@ -202,7 +220,11 @@ vector insertCMD(vector input) if(input[0] == "(") { - vector e; + if(input[0].at(0) == '\"') + { + s.push_back(input[0].substr(1,input[0].find_last_of("\""))); + } + vector e; input.erase(input.begin()); while(input[0] != ")") //inserting all values to relation @@ -218,7 +240,7 @@ vector insertCMD(vector input) cout << "Inserting: "; while(!e.empty()) { - cout << e[0].getExpression() << " "; + cout << e[0].getPExpression() << " "; e.erase(e.begin()); } cout << "into " << r.getName() << ".\n"; @@ -231,14 +253,14 @@ vector insertCMD(vector input) { input.erase(input.begin()); - Expression e; + PExpression e; while(input[0] != ";") { - e.setExpression(e.getExpression() + input[0]); + e.setPExpression(e.getPExpression() + input[0]); } - cout << "Inserting: " << e.getExpression() << " into " << r.getName() << ".\n"; + cout << "Inserting: " << e.getPExpression() << " into " << r.getName() << ".\n"; return input; } @@ -263,7 +285,7 @@ vector updateCMD(vector input) { input.erase(input.begin()); - Relation r(input[0]); + PRelation r(input[0]); input.erase(input.begin()); @@ -271,7 +293,7 @@ vector updateCMD(vector input) if(input[0] == "(") { - vector e; + vector e; input.erase(input.begin()); while(input[0] != ")") @@ -282,10 +304,10 @@ vector updateCMD(vector input) if(input[0] == "WHERE") { - Condition c; + PCondition c; while(input[0] != ";") { - c.setCondition(/*c.getCondition +*/ input[0]); + c.setPCondition(/*c.getCondition +*/ input[0]); } } } @@ -301,10 +323,10 @@ vector deleteCMD(vector input) input.erase(input.begin()); input.erase(input.begin()); - Relation r(input[0]); + PRelation r(input[0]); if(input[0] == "(") { - vector e; + vector e; input.erase(input.begin()); while(input[0] != ")") @@ -319,7 +341,7 @@ vector deleteCMD(vector input) cout << "Deleting: "; while(!e.empty()) { - cout << e[0].getExpression() << " "; + cout << e[0].getPExpression() << " "; e.erase(e.begin()); } cout << "from " << r.getName() << ".\n"; diff --git a/a.out b/a.out index 6a77a3df2bea8473f5f60940f721d90c854fadc5..a09701b37fd268a79cf4aaf2d49eb0951c61e5a1 100755 GIT binary patch literal 87749 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 ZKX7r$9%5-6L>Eeo#$bJu!9R%^{|#1L+kyZ9