From 7e221bf13e8348065cd6354da51be22f5dc46be8 Mon Sep 17 00:00:00 2001 From: William Bracho Blok Date: Tue, 22 Sep 2015 07:32:39 -0500 Subject: [PATCH 01/22] Create Parser.cpp as of now, this parser can take a string and break it into tokens --- Parser.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Parser.cpp diff --git a/Parser.cpp b/Parser.cpp new file mode 100644 index 0000000..4a9092f --- /dev/null +++ b/Parser.cpp @@ -0,0 +1,44 @@ + +#include // std::string +#include // std::cout +#include // std::stringstream +#include +#include + +using namespace std; + +/* + as of now, this parser can take a string and break it into tokens +*/ + + +vector tokenize(string ss) +{ + string tempString; + stringstream lineStream(ss); + vector output; + + while (lineStream >> tempString) + { + output.push_back(tempString); + } + + return output; + +} + +int main () { + + + string ss = "INSERT INTO animals VALUES FROM ( Joe , cat , 4 ) ;"; + + + vector listOfTokens = tokenize(ss); + + + for (int i = 0; i < listOfTokens.size(); ++i) + { + cout<<" slot "< Date: Tue, 22 Sep 2015 09:03:42 -0500 Subject: [PATCH 02/22] fixed rename --- Attribute.cpp | 4 ---- Attribute.h | 1 - DBEngine.cpp | 9 +++------ DBEngine.h | 4 ++-- Relation.cpp | 6 +++++- Relation.h | 3 ++- a.out | Bin 91732 -> 91755 bytes test.cpp | 29 +++++++++++++++++------------ 8 files changed, 29 insertions(+), 27 deletions(-) diff --git a/Attribute.cpp b/Attribute.cpp index 2ecee1c..093aace 100755 --- a/Attribute.cpp +++ b/Attribute.cpp @@ -45,10 +45,6 @@ bool Attribute::isKey(){ return key; } -void Attribute::rename(string s){ - name = s; -} - //may need to change primary key implementation int Attribute::getSize(){ return size; diff --git a/Attribute.h b/Attribute.h index fa98b14..0e92a40 100755 --- a/Attribute.h +++ b/Attribute.h @@ -21,6 +21,5 @@ public: string getType(); bool isKey(); int getSize(); - void rename(string s); void display(); }; \ No newline at end of file diff --git a/DBEngine.cpp b/DBEngine.cpp index 1e47c4a..26670b8 100755 --- a/DBEngine.cpp +++ b/DBEngine.cpp @@ -28,7 +28,7 @@ vector DBEngine::getRelations(){ return tables; } -Relation DBEngine::getTableFromName(string n){ +Relation& DBEngine::getTableFromName(string n){ //will return first occurence for(int i = 0; i < tables.size(); i++){ if (tables[i].getTableName() == n){ @@ -61,7 +61,7 @@ Relation DBEngine::projection(vector input, Relation r){ } //ASAP: TEST ALL OF THIS -void rename(Relation r, vector oldnames, vector newnames){ +void DBEngine::rename(Relation& r, vector oldnames, vector newnames){ if (oldnames.size() != newnames.size()) { cout << "Failure to rename: number of attributes do not match."; return; @@ -73,11 +73,8 @@ void rename(Relation r, vector oldnames, vector newnames){ } else { - Attribute temp; - for(int i = 0; i < oldnames.size(); ++i){ - temp = r.getAttributeByName(oldnames[i]); - temp.setName(newnames[i]); + r.renameAttribute(oldnames[i], newnames[i]); } } } diff --git a/DBEngine.h b/DBEngine.h index 8533656..20a921c 100755 --- a/DBEngine.h +++ b/DBEngine.h @@ -15,13 +15,13 @@ public: void createTable(Relation r); vector getRelations(); //void showTable(Relation r); - Relation getTableFromName(string n); + Relation& getTableFromName(string n); void saveToFile(vector cmds); //operations //Relation selection(); Relation projection(vector input, Relation r); - void rename(Relation r, vector oldnames, vector newnames); + void rename(Relation& r, vector oldnames, vector newnames); //void setUnion(); //void setDiff(); //void crossProduct(); diff --git a/Relation.cpp b/Relation.cpp index 300cde1..f81adee 100755 --- a/Relation.cpp +++ b/Relation.cpp @@ -29,7 +29,7 @@ vector Relation::getAttributeNames(){ return temp; } -Attribute Relation::getAttributeByName(string s) { +Attribute& Relation::getAttributeByName(string s) { for(int i = 0; i < size; ++i){ if (att[i].getName() == s) { return att[i]; @@ -39,6 +39,10 @@ Attribute Relation::getAttributeByName(string s) { cout << "Failure to return: the requested attribute does not exist."; } +void Relation::renameAttribute(string oldstr, string newstr){ + this->getAttributeByName(oldstr).setName(newstr); +} + int Relation::getSize(){ return size; } diff --git a/Relation.h b/Relation.h index beea397..ffeadcd 100755 --- a/Relation.h +++ b/Relation.h @@ -13,7 +13,8 @@ public: string getTableName(); vector getAttributes(); vector getAttributeNames(); - Attribute getAttributeByName(string s); + Attribute& getAttributeByName(string s); + void renameAttribute(string oldstr, string newstr); int getSize(); void display(); void insertTuple(vector tuple); //we are assuming they are in order diff --git a/a.out b/a.out index 0bb0543c863526d695c22da3b330690c31f64a50..7af9855056d0116baf03cd7a58c3d1222fcd2d86 100755 GIT binary patch delta 30507 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 M{0>_Bm`1euf8G0jR{#J2 literal 91732 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 TK~ tuple; tuple.push_back("Omelette"); tuple.push_back("Fried Rice"); tuple.push_back("Grouper"); - r.insertTuple(tuple); - r.display(); + engine.getTableFromName("Food").insertTuple(tuple); - vector o; - vector n; + vector old; + vector newa; - o.push_back("Breakfast"); - o.push_back("Lunch"); - o.push_back("Dinner"); + old.push_back("Breakfast"); + old.push_back("Lunch"); + old.push_back("Dinner"); - n.push_back("Tsafkaerb"); - n.push_back("Hcnul"); - n.push_back("Rennid"); + newa.push_back("Tsafkaerb"); + newa.push_back("Hcnul"); + newa.push_back("Rennid"); - //engine.rename(r, o, n); + engine.rename(engine.getTableFromName("Food"), old, newa); + engine.getTableFromName("Food").display(); + cout << "finished"; } \ No newline at end of file From 75be5ae221a2991420fc23574fba9cb4956e4970 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 22 Sep 2015 09:03:53 -0500 Subject: [PATCH 03/22] fixed rename --- a.out | Bin 91755 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 a.out diff --git a/a.out b/a.out deleted file mode 100755 index 7af9855056d0116baf03cd7a58c3d1222fcd2d86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91755 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 bkc2pB4D5nHL6vA!j!V0Gp Date: Tue, 22 Sep 2015 16:18:52 -0500 Subject: [PATCH 04/22] Create Parserv2 --- Parserv2 | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 Parserv2 diff --git a/Parserv2 b/Parserv2 new file mode 100644 index 0000000..af89934 --- /dev/null +++ b/Parserv2 @@ -0,0 +1,175 @@ + +#include // std::string +#include // std::cout +#include // std::stringstream +#include +#include + +using namespace std; + +/* + as of now, this parser can take a string and break it into tokens +*/ + + +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) +{ + // if (input[0] != "(") + // { + // cout<<"ERROR! missing parenthesis"< input) +{ + cout<<"TokenList: "< input) +{ + string relationName; + + cout<<"insert-cmd function was called"< input) //calls par_command() or par_query() depending on first item from token list +{ +/* +• Match the first item in the token list and determine weather this is a command or a query. +• Call functions par_command() or par_query(); +• After either par_command() or par_query() returns, make sure the line ends properly with “;” token +*/ + string tempChar = input.back(); + if (tempChar != ";") + { + cout<<"ERROR! missing semicolon "< listOfTokens = tokenize(ss); + par_line(listOfTokens); + + +} From ac43cf74b94ab4eb4eff3e14d648c383156fed3b Mon Sep 17 00:00:00 2001 From: William Bracho Blok Date: Tue, 22 Sep 2015 17:11:51 -0500 Subject: [PATCH 05/22] Update Parserv2 --- Parserv2 | 55 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/Parserv2 b/Parserv2 index af89934..8e53d6a 100644 --- a/Parserv2 +++ b/Parserv2 @@ -63,22 +63,51 @@ void displayTokenList(vector input) } -void insertCMD(vector input) +vector insertCMD(vector input) { - string relationName; - - cout<<"insert-cmd function was called"< output; + if (input[0] == "INTO") { input.erase(input.begin()); - relationName = input[0]; + + 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!"< input) //calls par_command() or par_query() dependi if ( input[0] == "INSERT") { + cout<<"\nPassing the following arguments to dbEngine: \nCommand type: "< insertInput = insertCMD(input); + cout<<"arguments: "< Date: Tue, 22 Sep 2015 18:38:04 -0500 Subject: [PATCH 06/22] Update Parserv2 --- Parserv2 | 85 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 71 insertions(+), 14 deletions(-) diff --git a/Parserv2 b/Parserv2 index 8e53d6a..675cbb1 100644 --- a/Parserv2 +++ b/Parserv2 @@ -37,21 +37,21 @@ vector tokenize(string ss) } -void par_select(vector input) -{ - // if (input[0] != "(") - // { - // cout<<"ERROR! missing parenthesis"< input) +// { + // // if (input[0] != "(") + // // { + // // cout<<"ERROR! missing parenthesis"< input) { @@ -112,6 +112,49 @@ vector insertCMD(vector input) +vector createCMD(vector input) +{ + //relation name will be the first element of the vector of data returned by this function + // vector output; + + // output.push_back(input[0]) //pushing relation name + + + + // 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!"< input) //calls par_command() or par_query() depending on first item from token list { @@ -150,13 +193,27 @@ void par_line(vector input) //calls par_command() or par_query() dependi if ( input[0] == "INSERT") { - cout<<"\nPassing the following arguments to dbEngine: \nCommand type: "< insertInput = insertCMD(input); cout<<"arguments: "< insertInput = insertCMD(input); + cout<<"arguments: "< listOfTokens = tokenize(ss); par_line(listOfTokens); From 40848ba29cf875ae393d0f34b62c58710f381e34 Mon Sep 17 00:00:00 2001 From: William Bracho Blok Date: Tue, 22 Sep 2015 18:40:39 -0500 Subject: [PATCH 07/22] Update Parserv2 --- Parserv2 | 3 --- 1 file changed, 3 deletions(-) diff --git a/Parserv2 b/Parserv2 index 675cbb1..17394b4 100644 --- a/Parserv2 +++ b/Parserv2 @@ -7,9 +7,6 @@ using namespace std; -/* - as of now, this parser can take a string and break it into tokens -*/ vector tokenize(string ss) From 41ee4c99d2431cf92f2d48b8cae2afc463cbfc85 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 22 Sep 2015 18:42:50 -0500 Subject: [PATCH 08/22] fixed rename --- Condition.h | 13 +++++++++++++ DBEngine.cpp | 5 ++--- DBEngine.h | 2 -- 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100755 Condition.h diff --git a/Condition.h b/Condition.h new file mode 100755 index 0000000..cc06978 --- /dev/null +++ b/Condition.h @@ -0,0 +1,13 @@ +#include +#include "Attribute.h" + +using namespace std; + +class Condition{ + Attribute att; + +public: + //currently only implemented for comparison + Condition(Attribute a); + Condition(Attribute a); +}; \ No newline at end of file diff --git a/DBEngine.cpp b/DBEngine.cpp index 26670b8..db596e6 100755 --- a/DBEngine.cpp +++ b/DBEngine.cpp @@ -29,7 +29,6 @@ vector DBEngine::getRelations(){ } Relation& DBEngine::getTableFromName(string n){ - //will return first occurence for(int i = 0; i < tables.size(); i++){ if (tables[i].getTableName() == n){ return tables[i]; @@ -37,8 +36,8 @@ Relation& DBEngine::getTableFromName(string n){ } } +//currently writes nothing meaningful void DBEngine::saveToFile(vector cmds){ - //writes nothing meaningful ofstream file; file.open("savefile.db"); @@ -60,7 +59,7 @@ Relation DBEngine::projection(vector input, Relation r){ // } } -//ASAP: TEST ALL OF THIS +//TEST ERRORS MATCHING void DBEngine::rename(Relation& r, vector oldnames, vector newnames){ if (oldnames.size() != newnames.size()) { cout << "Failure to rename: number of attributes do not match."; diff --git a/DBEngine.h b/DBEngine.h index 20a921c..8a71981 100755 --- a/DBEngine.h +++ b/DBEngine.h @@ -17,8 +17,6 @@ public: //void showTable(Relation r); Relation& getTableFromName(string n); void saveToFile(vector cmds); - - //operations //Relation selection(); Relation projection(vector input, Relation r); void rename(Relation& r, vector oldnames, vector newnames); From 156903415c46c296d3a57cadb1a075e1e5724a5c Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 22 Sep 2015 18:54:21 -0500 Subject: [PATCH 09/22] fixed file extension --- Parserv2.cpp | 262 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100755 Parserv2.cpp diff --git a/Parserv2.cpp b/Parserv2.cpp new file mode 100755 index 0000000..17394b4 --- /dev/null +++ b/Parserv2.cpp @@ -0,0 +1,262 @@ + +#include // std::string +#include // std::cout +#include // std::stringstream +#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) +// { + // // if (input[0] != "(") + // // { + // // cout<<"ERROR! missing parenthesis"< 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!"< createCMD(vector input) +{ + //relation name will be the first element of the vector of data returned by this function + // vector output; + + // output.push_back(input[0]) //pushing relation name + + + + // 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!"< input) //calls par_command() or par_query() depending on first item from token list +{ +/* +• Match the first item in the token list and determine weather this is a command or a query. +• Call functions par_command() or par_query(); +• After either par_command() or par_query() returns, make sure the line ends properly with “;” token +*/ + string tempChar = input.back(); + if (tempChar != ";") + { + cout<<"ERROR! missing semicolon "< insertInput = insertCMD(input); + cout<<"arguments: "< insertInput = insertCMD(input); + cout<<"arguments: "< listOfTokens = tokenize(ss); + par_line(listOfTokens); + + +} From db10f428031de25aa04c34df05badc22500eaf63 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 22 Sep 2015 18:54:36 -0500 Subject: [PATCH 10/22] fixed file extension --- Parserv2 | 262 ------------------------------------------------------- 1 file changed, 262 deletions(-) delete mode 100644 Parserv2 diff --git a/Parserv2 b/Parserv2 deleted file mode 100644 index 17394b4..0000000 --- a/Parserv2 +++ /dev/null @@ -1,262 +0,0 @@ - -#include // std::string -#include // std::cout -#include // std::stringstream -#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) -// { - // // if (input[0] != "(") - // // { - // // cout<<"ERROR! missing parenthesis"< 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!"< createCMD(vector input) -{ - //relation name will be the first element of the vector of data returned by this function - // vector output; - - // output.push_back(input[0]) //pushing relation name - - - - // 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!"< input) //calls par_command() or par_query() depending on first item from token list -{ -/* -• Match the first item in the token list and determine weather this is a command or a query. -• Call functions par_command() or par_query(); -• After either par_command() or par_query() returns, make sure the line ends properly with “;” token -*/ - string tempChar = input.back(); - if (tempChar != ";") - { - cout<<"ERROR! missing semicolon "< insertInput = insertCMD(input); - cout<<"arguments: "< insertInput = insertCMD(input); - cout<<"arguments: "< listOfTokens = tokenize(ss); - par_line(listOfTokens); - - -} From f8a192385685511fdc738ae91460d7290a40b90d Mon Sep 17 00:00:00 2001 From: William Bracho Blok Date: Tue, 22 Sep 2015 20:34:47 -0500 Subject: [PATCH 11/22] Update Parserv2.cpp --- Parserv2.cpp | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/Parserv2.cpp b/Parserv2.cpp index 17394b4..a50b1f1 100755 --- a/Parserv2.cpp +++ b/Parserv2.cpp @@ -7,6 +7,9 @@ using namespace std; +/* + as of now, this parser can take a string and break it into tokens +*/ vector tokenize(string ss) @@ -107,11 +110,33 @@ vector insertCMD(vector input) } +vector showCMD(vector input) +{ + if (input.size() > 3) + { + cout<<"Syntax error!"< exitCMD(vector input) +{ + if (input[1] != ";") + { + cout<<"ERROR: missing semicolon!"< createCMD(vector input) { - //relation name will be the first element of the vector of data returned by this function + // //relation name will be the first element of the vector of data returned by this function // vector output; // output.push_back(input[0]) //pushing relation name @@ -211,6 +236,12 @@ void par_line(vector input) //calls par_command() or par_query() dependi } + if ( input[0] == "SHOW") + { + showCMD(input); + } + + } @@ -253,10 +284,16 @@ int main () { string ss = "INSERT INTO animals VALUES FROM ( Joe , cat , 4 ) ;"; - string ss2 = "CREATE TABLE animals ( name VARCHAR(20) , kind VARCHAR(8) , years INTEGER ) PRIMARY KEY (name, kind);"; + string ss2 = "SHOW Dogs ;"; + string ss3 = "EXIT ; "; vector listOfTokens = tokenize(ss); + //vector listOfTokens2 = tokenize(ss2); + //vector listOfTokens3 = tokenize(ss3); + par_line(listOfTokens); + //par_line(listOfTokens2); + //par_line(listOfTokens3); } From 37610790ac0407ea6af52843657c83454cf24cac Mon Sep 17 00:00:00 2001 From: William Bracho Blok Date: Tue, 22 Sep 2015 21:05:11 -0500 Subject: [PATCH 12/22] Update Parserv2.cpp --- Parserv2.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Parserv2.cpp b/Parserv2.cpp index a50b1f1..13486cb 100755 --- a/Parserv2.cpp +++ b/Parserv2.cpp @@ -120,6 +120,8 @@ vector showCMD(vector input) cout<<"\nPassing the following arguments to dbEngine: "< exitCMD(vector input) @@ -131,6 +133,8 @@ vector exitCMD(vector input) if (input[0] != "EXIT") { cout<<"Wrong function/syntax error!"< input) //calls par_command() or par_query() dependi showCMD(input); } + if ( input[0] == "EXIT") + { + exitCMD(input); + } + } @@ -288,12 +297,12 @@ int main () { string ss3 = "EXIT ; "; vector listOfTokens = tokenize(ss); - //vector listOfTokens2 = tokenize(ss2); - //vector listOfTokens3 = tokenize(ss3); + vector listOfTokens2 = tokenize(ss2); + vector listOfTokens3 = tokenize(ss3); par_line(listOfTokens); - //par_line(listOfTokens2); - //par_line(listOfTokens3); + par_line(listOfTokens2); + par_line(listOfTokens3); } From 97eaea15f22675f32189176c88d810712b44bd00 Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 22 Sep 2015 21:17:45 -0500 Subject: [PATCH 13/22] updates --- Attribute.cpp | 1 - DBEngine.cpp | 2 +- Parserv2.cpp | 262 -------------------------------------------------- Relation.h | 2 +- 4 files changed, 2 insertions(+), 265 deletions(-) delete mode 100755 Parserv2.cpp diff --git a/Attribute.cpp b/Attribute.cpp index 093aace..eb35167 100755 --- a/Attribute.cpp +++ b/Attribute.cpp @@ -45,7 +45,6 @@ bool Attribute::isKey(){ return key; } -//may need to change primary key implementation int Attribute::getSize(){ return size; } diff --git a/DBEngine.cpp b/DBEngine.cpp index db596e6..a082cd6 100755 --- a/DBEngine.cpp +++ b/DBEngine.cpp @@ -59,7 +59,7 @@ Relation DBEngine::projection(vector input, Relation r){ // } } -//TEST ERRORS MATCHING +//test error matching void DBEngine::rename(Relation& r, vector oldnames, vector newnames){ if (oldnames.size() != newnames.size()) { cout << "Failure to rename: number of attributes do not match."; diff --git a/Parserv2.cpp b/Parserv2.cpp deleted file mode 100755 index 17394b4..0000000 --- a/Parserv2.cpp +++ /dev/null @@ -1,262 +0,0 @@ - -#include // std::string -#include // std::cout -#include // std::stringstream -#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) -// { - // // if (input[0] != "(") - // // { - // // cout<<"ERROR! missing parenthesis"< 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!"< createCMD(vector input) -{ - //relation name will be the first element of the vector of data returned by this function - // vector output; - - // output.push_back(input[0]) //pushing relation name - - - - // 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!"< input) //calls par_command() or par_query() depending on first item from token list -{ -/* -• Match the first item in the token list and determine weather this is a command or a query. -• Call functions par_command() or par_query(); -• After either par_command() or par_query() returns, make sure the line ends properly with “;” token -*/ - string tempChar = input.back(); - if (tempChar != ";") - { - cout<<"ERROR! missing semicolon "< insertInput = insertCMD(input); - cout<<"arguments: "< insertInput = insertCMD(input); - cout<<"arguments: "< listOfTokens = tokenize(ss); - par_line(listOfTokens); - - -} diff --git a/Relation.h b/Relation.h index ffeadcd..faa89ea 100755 --- a/Relation.h +++ b/Relation.h @@ -17,7 +17,7 @@ public: void renameAttribute(string oldstr, string newstr); int getSize(); void display(); - void insertTuple(vector tuple); //we are assuming they are in order + void insertTuple(vector tuple); //assuming they are in order void insertFromRelation(Relation r); //void removeTuple(); }; \ No newline at end of file From 11299fd6c5e21c187ab16002a6e832b9e3fb6d7a Mon Sep 17 00:00:00 2001 From: scho4077 Date: Tue, 22 Sep 2015 21:30:28 -0500 Subject: [PATCH 14/22] Update Parserv2.cpp --- Parserv2.cpp | 99 ++++++++++++++++++++++++---------------------------- 1 file changed, 46 insertions(+), 53 deletions(-) diff --git a/Parserv2.cpp b/Parserv2.cpp index 17394b4..6d77211 100755 --- a/Parserv2.cpp +++ b/Parserv2.cpp @@ -1,17 +1,4 @@ - -#include // std::string -#include // std::cout -#include // std::stringstream -#include -#include - -using namespace std; - - - -vector tokenize(string ss) -{ - string tempString; +tring; stringstream lineStream(ss); vector output; @@ -107,11 +94,37 @@ vector insertCMD(vector input) } +vector showCMD(vector input) +{ + if (input.size() > 3) + { + cout<<"Syntax error!"< exitCMD(vector input) +{ + if (input[1] != ";") + { + cout<<"ERROR: missing semicolon!"< createCMD(vector input) { - //relation name will be the first element of the vector of data returned by this function + // //relation name will be the first element of the vector of data returned by this function // vector output; // output.push_back(input[0]) //pushing relation name @@ -211,52 +224,32 @@ void par_line(vector input) //calls par_command() or par_query() dependi } + if ( input[0] == "SHOW") + { + showCMD(input); + } + + if ( input[0] == "EXIT") + { + exitCMD(input); + } + + } } - - -// void par_command(string ss) -// { - -// } -// void par_query(string ss); -// { - // if (input[0] == "select"); -// } - -// void par_insert(); -// void par_relationName(); -// void par_literals(); - - -// void par_condition(); -// void par_conjuction(); -// void par_automicexpr(): -// /* -// • try to match the current pointer in the token list with the atomic-expr grammar. -// • If an Expr is identified, call par_expr() grammar function -// */ -// void par_expr(): -// /* -// try to match the current pointer in the token list with the expr grammar. -// Check the current token and identify a proper query (e.g., if project-query is identified, call par_project() grammer function). -// */ -// void par_projection(): -// /*try to match the current pointer in the token list with the projection grammar -// ◦ Call grammar function par_attribute_list -// ◦ (later on, return a View after the evaluation) -// */ int main () { - - string ss = "INSERT INTO animals VALUES FROM ( Joe , cat , 4 ) ;"; - string ss2 = "CREATE TABLE animals ( name VARCHAR(20) , kind VARCHAR(8) , years INTEGER ) PRIMARY KEY (name, kind);"; + string ss2 = "SHOW Dogs ;"; + string ss3 = "EXIT ; "; vector listOfTokens = tokenize(ss); - par_line(listOfTokens); + vector listOfTokens2 = tokenize(ss2); + vector listOfTokens3 = tokenize(ss3); - + par_line(listOfTokens); + par_line(listOfTokens2); + par_line(listOfTokens3); } From 52c801715ca547acc9228ad35260c5359e59235e Mon Sep 17 00:00:00 2001 From: scho4077 Date: Tue, 22 Sep 2015 21:49:37 -0500 Subject: [PATCH 15/22] Update Parserv2.cpp --- Parserv2.cpp | 159 ++++++++++----------------------------------------- 1 file changed, 31 insertions(+), 128 deletions(-) diff --git a/Parserv2.cpp b/Parserv2.cpp index 6d77211..7e15a93 100755 --- a/Parserv2.cpp +++ b/Parserv2.cpp @@ -20,23 +20,6 @@ tring; } - -// void par_select(vector input) -// { - // // if (input[0] != "(") - // // { - // // cout<<"ERROR! missing parenthesis"< input) { cout<<"TokenList: "< showCMD(vector input) } cout<<"\nPassing the following arguments to dbEngine: "< exitCMD(vector input) if (input[1] != ";") { cout<<"ERROR: missing semicolon!"< createCMD(vector input) { - // //relation name will be the first element of the vector of data returned by this function - // vector output; - - // output.push_back(input[0]) //pushing relation name - - - - // 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!"< openCMD(vector input){ + // +} +vector closeCMD(vector input){ + // +} +vector saveCMD(vector input){ + //open-cmd ::== OPEN relation-name +//close-cmd ::== CLOSE relation-name +//save-cmd ::== SAVE relation-name +} +vector updateCMD(vector input){ + // +} - -void par_line(vector input) //calls par_command() or par_query() depending on first item from token list -{ -/* -• Match the first item in the token list and determine weather this is a command or a query. -• Call functions par_command() or par_query(); -• After either par_command() or par_query() returns, make sure the line ends properly with “;” token -*/ - string tempChar = input.back(); - if (tempChar != ";") - { - cout<<"ERROR! missing semicolon "< insertInput = insertCMD(input); - cout<<"arguments: "< insertInput = insertCMD(input); - cout<<"arguments: "< deleteCMD(vector input){ + // } int main () { From 74bc10d0adc9d163bce91f024e842d588c3e538f Mon Sep 17 00:00:00 2001 From: scho4077 Date: Tue, 22 Sep 2015 21:51:39 -0500 Subject: [PATCH 16/22] Update Parserv2.cpp --- Parserv2.cpp | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/Parserv2.cpp b/Parserv2.cpp index 7e15a93..150bab1 100755 --- a/Parserv2.cpp +++ b/Parserv2.cpp @@ -112,27 +112,48 @@ vector exitCMD(vector input) vector 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." < openCMD(vector input){ - // + cout << "relation: " << input[1] << endl; } vector closeCMD(vector input){ - // + if (input[0] != "CLOSE") { + cout << "Error: close keyword is missing." < saveCMD(vector input){ - //open-cmd ::== OPEN relation-name -//close-cmd ::== CLOSE relation-name -//save-cmd ::== SAVE relation-name + if (input[0] != "SAVE") { + cout << "Error: save keyword is missing." < updateCMD(vector input){ From db3469594acd349201d27ade48cdba56567408f4 Mon Sep 17 00:00:00 2001 From: scho4077 Date: Tue, 22 Sep 2015 21:53:35 -0500 Subject: [PATCH 17/22] Update Parserv2.cpp --- Parserv2.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Parserv2.cpp b/Parserv2.cpp index 150bab1..427bbdb 100755 --- a/Parserv2.cpp +++ b/Parserv2.cpp @@ -143,6 +143,7 @@ vector closeCMD(vector input){ cout << "\nPassing the following arguments to dbEngine: " << endl; cout << "command :" << input[0] << endl; cout << "relation: " << input[1] << endl; + return input; } vector saveCMD(vector input){ @@ -154,14 +155,26 @@ vector saveCMD(vector input){ cout << "\nPassing the following arguments to dbEngine: " << endl; cout << "command :" << input[0] << endl; cout << "relation: " << input[1] << endl; + return input; } vector 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." < Date: Tue, 22 Sep 2015 21:54:13 -0500 Subject: [PATCH 18/22] Update Parserv2.cpp --- Parserv2.cpp | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/Parserv2.cpp b/Parserv2.cpp index 13486cb..0db1a5a 100755 --- a/Parserv2.cpp +++ b/Parserv2.cpp @@ -62,7 +62,6 @@ void displayTokenList(vector input) } } - vector insertCMD(vector input) { //relation name will be the first element of the vector of data returned by this function @@ -137,6 +136,47 @@ vector exitCMD(vector input) return input; } +vector saveCMD(vector input) +{ + if (input.size() > 3) + { + cout<<"Syntax error!"< closeCMD(vector input) +{ + if (input.size() > 3) + { + cout<<"Syntax error!"< openCMD(vector input) +{ + if (input.size() > 3) + { + cout<<"Syntax error!"< createCMD(vector input) { From 3e7cc47af59d0f55fb827008b66b97ca432f91d4 Mon Sep 17 00:00:00 2001 From: scho4077 Date: Tue, 22 Sep 2015 21:57:52 -0500 Subject: [PATCH 19/22] Update Parserv2.cpp --- Parserv2.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/Parserv2.cpp b/Parserv2.cpp index 427bbdb..4d4b742 100755 --- a/Parserv2.cpp +++ b/Parserv2.cpp @@ -171,22 +171,14 @@ vector deleteCMD(vector input){ cout << "\nPassing the following arguments to dbEngine: " << endl; cout << "command :" << input[0] << endl; - cout << "relation: " << input[1] << endl; + cout << "relation: " << input[2] << endl; for (int i = 0; i < input.size(); ++i) { cout << input[i] << "\n"; } } int main () { - string ss = "INSERT INTO animals VALUES FROM ( Joe , cat , 4 ) ;"; - string ss2 = "SHOW Dogs ;"; - string ss3 = "EXIT ; "; + string ss = "DELETE FROM animals WHERE (age == 12);"; - vector listOfTokens = tokenize(ss); - vector listOfTokens2 = tokenize(ss2); - vector listOfTokens3 = tokenize(ss3); - - par_line(listOfTokens); - par_line(listOfTokens2); - par_line(listOfTokens3); + vector listOfTokens = tokenize(s); } From 0cb05ed10a69f1cf01e6a9ab3523b972fb36f7ef Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 22 Sep 2015 22:16:39 -0500 Subject: [PATCH 20/22] almost done with commands --- Parser.cpp | 44 -------------------------------------------- Parserv2.cpp | 10 +++++----- a.out | Bin 0 -> 38917 bytes 3 files changed, 5 insertions(+), 49 deletions(-) delete mode 100644 Parser.cpp create mode 100755 a.out diff --git a/Parser.cpp b/Parser.cpp deleted file mode 100644 index 4a9092f..0000000 --- a/Parser.cpp +++ /dev/null @@ -1,44 +0,0 @@ - -#include // std::string -#include // std::cout -#include // std::stringstream -#include -#include - -using namespace std; - -/* - as of now, this parser can take a string and break it into tokens -*/ - - -vector tokenize(string ss) -{ - string tempString; - stringstream lineStream(ss); - vector output; - - while (lineStream >> tempString) - { - output.push_back(tempString); - } - - return output; - -} - -int main () { - - - string ss = "INSERT INTO animals VALUES FROM ( Joe , cat , 4 ) ;"; - - - vector listOfTokens = tokenize(ss); - - - for (int i = 0; i < listOfTokens.size(); ++i) - { - cout<<" slot "< deleteCMD(vector input){ cout << "\nPassing the following arguments to dbEngine: " << endl; cout << "command :" << input[0] << endl; cout << "relation: " << input[2] << endl; - for (int i = 0; i < input.size(); ++i) { - cout << input[i] << "\n"; - } + cout << "condition: " << input[5] << input[6] << input[7] << endl; + + return input; } int main () { - string ss = "DELETE FROM animals WHERE (age == 12);"; + string s = "DELETE FROM animals WHERE ( age == 12 ) ;"; vector listOfTokens = tokenize(s); - deleteCMD(listofTokens); + deleteCMD(listOfTokens); } diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..6a77a3df2bea8473f5f60940f721d90c854fadc5 GIT binary patch literal 38917 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 ZKX7r$9%5-6L>Eeo#$bJu!9R%^{|#1L+kyZ9 literal 0 HcmV?d00001 From a7463a1e89b51868250e3a77ec223f617ae84e2d Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 22 Sep 2015 22:49:17 -0500 Subject: [PATCH 21/22] output.txt --- OUTPUT.txt | 90 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 38 deletions(-) diff --git a/OUTPUT.txt b/OUTPUT.txt index 2d883ab..3e44c42 100755 --- a/OUTPUT.txt +++ b/OUTPUT.txt @@ -1,70 +1,84 @@ -Assuming previously defined Attribute, compiled in a vector known as 'vec' and with subsequent numbers added +show incorrect/correct example for each cmd/query -To create a table: +--------------- +Queries +--------------- - engine.createTable("table1", vec); +Selection: +correct: select ( age == 12 ) people ; +incorrect: select ( age ))))) people ; -This creates a Relation object with the appropriate Attribute objects. It displays nothing. +Projection: -To display the table: +correct: project ( age ) people ; +incorrect: x - engine.showTables(engine.getTableFromName("table1")); +Renaming: +correct: rename ( age, years old ) ; +incorrect: x -This results in such output: +Set Union: - Display of relation-------------------------------- - Relation name: table1 +correct: x +incorrect: x - Attribute name: name - Elements: Fry Bender Leela Zoidberg - Attribute name: age - Elements: 22 5 22 50 +Set Difference: +correct: x +incorrect: x -With table3 having an equal domain to table1, this: +Cross Product: - cout << engine.unionComp(engine.getTableFromName("table1"), engine.getTableFromName("table3")); +correct: x +incorrect: x +------------------- +Commands +------------------- -This will display: +Open: - 1 +correct: OPEN people ; +incorrect: OPEN ; +Close: -To project a table's column: - - engine.project((engine.getTableFromName("table1")), "name"); +correct: CLOSE people ; +incorrect: CLOSE ; +Save: -This will display: +correct: SAVE people ; +incorrect: SAVE ; - -----------Initiated Query Projection--------- - Column Title: name - Fry - Bender - Leela - Zoidberg +Exit: +correct: EXIT ; +incorrect: EXIT people ; -With an arbitrary vector of strings as cmds (until we are able to parse effectively): +Show: - engine.saveToFile(cmds); +correct: SHOW people ; +incorrect: SHOW ; +Create: -This will result in a db file with the contents: +correct: CREATE TABLE people ( age INTEGER, name VARCHAR ( 20 ) ) PRIMARY KEY ( name ) ; +incorrect: CREATE TABLE people age name ; - CREATE TABLE animals (name VARCHAR(20), kind VARCHAR(8), years INTEGER) PRIMARY KEY (name, kind); - -SHOW animals; +Update: +correct: x +incorrect: x +Insert: -//insert +correct: INSERT INTO people VALUES FROM ( 12, "Benny" ) ; +incorrect: INSERT INTO people 12 "Benny" ; -//delete +Delete: -//select - -//product \ No newline at end of file +correct: x +incorrect: x From 6fe791a41fac371eb816a61a074250bade01778a Mon Sep 17 00:00:00 2001 From: Rebecca Schofield Date: Tue, 22 Sep 2015 23:03:50 -0500 Subject: [PATCH 22/22] parser OUTPUT.txt finished --- OUTPUT.txt | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/OUTPUT.txt b/OUTPUT.txt index 3e44c42..09bc7f9 100755 --- a/OUTPUT.txt +++ b/OUTPUT.txt @@ -1,5 +1,3 @@ -show incorrect/correct example for each cmd/query - --------------- Queries --------------- @@ -12,27 +10,27 @@ incorrect: select ( age ))))) people ; Projection: correct: project ( age ) people ; -incorrect: x +incorrect: project age people ; Renaming: correct: rename ( age, years old ) ; -incorrect: x +incorrect: rename age years ; Set Union: -correct: x -incorrect: x +correct: union ( people + animals ) ; +incorrect: union people animals ; Set Difference: -correct: x -incorrect: x +correct: difference ( people - animals ) ; +incorrect: difference people animals ; Cross Product: -correct: x -incorrect: x +correct: product ( people * animals ) ; +incorrect: product people animals ; ------------------- Commands @@ -70,8 +68,8 @@ incorrect: CREATE TABLE people age name ; Update: -correct: x -incorrect: x +correct: UPDATE people SET ( age = 10 ) WHERE ( name == "Bob" ) ; +incorrect: UPDATE ( age = 10 ) WHERE people ; Insert: @@ -80,5 +78,5 @@ incorrect: INSERT INTO people 12 "Benny" ; Delete: -correct: x -incorrect: x +correct: DELETE FROM people WHERE ( name == "John" ) ; +incorrect: DELETE IN people WHEN (name=John) ;