Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "DataBase.h"
- DataBase::DataBase()
- {
- }
- DataBase::DataBase(const DataBase & other)
- {
- *this = other;
- }
- bool DataBase::isUserExist(string username)
- {
- sqlite3* db;
- if (sqlite3_open(FILE_NAME, &db)) //TRY to open db
- {
- sqlite3_close(db);
- throw std::exception(sqlite3_errmsg(db));
- }
- char* errMsg = 0;
- string query = "select username from t_users";
- vector<vector<string>> values;
- if (sqlite3_exec(db, query.c_str(), DataBase::callbackCount, &values, &errMsg) != SQLITE_OK) //run the query, store output values in values vector
- {
- sqlite3_close(db);
- cout << "SQL ERROR: " << errMsg << endl;
- delete errMsg;
- throw std::exception(errMsg);
- }
- for (unsigned int i = 0; i < values.size(); i++)
- {
- //check if the usename matches any username from the DB
- if (username == string(values[i][USERNAME]))
- {
- sqlite3_close(db);
- delete errMsg;
- return true;
- }
- }
- sqlite3_close(db);
- delete errMsg;
- return false;
- }
- bool DataBase::addNewUser(string name, string pass, string email)
- {
- if (this->isUserExist(name)) return false; //if the user exists return false (failed to add new User)
- sqlite3* db;
- if (sqlite3_open(FILE_NAME, &db)) //TRY to open db
- {
- sqlite3_close(db);
- return false; //return false if failed
- }
- //the SQL query in the right format
- string query = "insert into t_users(username, password, email) values(";
- query += '"' + name + '"' + ", ";
- query += '"' + pass + '"' + ", ";
- query += '"' + email + '"' + ')';
- char* errMsg = 0;
- if (sqlite3_exec(db, query.c_str(), DataBase::callbackCount, 0, &errMsg) != SQLITE_OK) //run the query, store output values in values vector
- {
- sqlite3_close(db);
- cout << "SQL ERROR: " << errMsg << endl;
- delete errMsg;
- return false; //return false if failed
- }
- return true;
- }
- bool DataBase::doUserAndPassMatch(string username, string password)
- {
- sqlite3* db;
- if (sqlite3_open(FILE_NAME, &db)) //TRY to open db
- {
- sqlite3_close(db);
- throw std::exception(sqlite3_errmsg(db));
- }
- char* errMsg = 0;
- string query = "select * from t_users";
- vector<vector<string>> values;
- if (sqlite3_exec(db, query.c_str(), DataBase::callbackCount, &values, &errMsg) != SQLITE_OK) //run the query, store output values in values vector
- {
- sqlite3_close(db);
- cout << "SQL ERROR: " << errMsg << endl;
- delete errMsg;
- throw std::exception(errMsg);
- }
- for (unsigned int i = 0; i < values.size(); i++)
- {
- //check if the usename & password combination matches any username & password combination from the DB
- if (username == string(values[i][USERNAME]) && password == string(values[i][PASSWORD]))
- {
- sqlite3_close(db);
- delete errMsg;
- return true;
- }
- }
- sqlite3_close(db);
- delete errMsg;
- return false;
- }
- vector<Question*> DataBase::initQuestions(int)
- {
- return vector<Question*>();
- }
- vector<string> DataBase::getBestScores()
- {
- return vector<string>();
- }
- vector<string> DataBase::getPersonalStatus(string)
- {
- return vector<string>();
- }
- int DataBase::insertNewGame()
- {
- {
- if (!checkIfColumnExist("t_games"))
- try
- {
- insertToTable("BEGIN TRANSACTION;");
- string addGame = "insert into t_games(status,start_time) values(0,date(" + insertQouteForEscapeCharacters("now") + "));";
- insertToTable(addGame.c_str());
- insertToTable("COMMIT;");
- updateDetails("t_games");
- return stoi(_details["game_id"].back());
- }
- catch (invalid_argument& e)
- {
- std::cout << e.what() << '\n';
- return 0;
- }
- }
- }
- bool DataBase::updateGameStatus(int gameID)
- {
- return false;
- }
- bool DataBase::addAnswerToPlayer(int, string, int, string, bool, int)
- {
- return false;
- }
- int DataBase::callbackCount(void* output, int argc, char** argv, char** azCol)
- {
- vector<string> vals;
- for (int i = 0; i < argc; i++)
- {
- vals.push_back(argv[i]); //save the output from the sql query in a vector of strings
- }
- ((vector<vector<string>>*)output)->push_back(vals); //add only the usernames as we only need the names, nobody cares for the password and email
- return 0;
- }
- int DataBase::callbackQuestions(void* notUsed, int argc, char** argv, char** azCol)
- {
- int i;
- for (i = 0; i < argc; i++)
- {
- auto it = _questions.find(azCol[i]);
- if (it != _questions.end())
- {
- it->second.push_back(argv[i]);
- }
- else
- {
- pair<string, vector<string>> p;
- p.first = azCol[i];
- p.second.push_back(argv[i]);
- _questions.insert(p);
- }
- }
- return 0;
- }
- int DataBase::callbackBestScores(void* notUsed, int argc, char** argv, char** azCol)
- {
- int i;
- for (i = 0; i < argc; i++)
- {
- auto it = _bestScores.find(azCol[i]);
- if (it != _bestScores.end())
- {
- it->second.push_back(argv[i]);
- }
- else
- {
- pair<string, vector<string>> p;
- p.first = azCol[i];
- p.second.push_back(argv[i]);
- _bestScores.insert(p);
- }
- }
- return 0;
- }
- int DataBase::callbackPersonalStatus(void* notUsed, int argc, char** argv, char** azCol)
- {
- int i;
- for (i = 0; i < argc; i++)
- {
- auto it = _status.find(azCol[i]);
- if (it != _status.end())
- {
- it->second.push_back(argv[i]);
- }
- else
- {
- pair<string, vector<string>> p;
- p.first = azCol[i];
- p.second.push_back(argv[i]);
- _status.insert(p);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement