#ifndef DATABASE_H #define DATABASE_H #include #include #include #include "SQLite/sqlite3.h" #include "model/recipe/ingredients/ingredient.h" #include "resulttable.h" using namespace std; /** * @brief The Database class is responsible for generic abstraction of commonly used database features. */ class Database { public: //Creates and opens a database connection to a file of the given name. If not there, this will generate a database. Database(string filename); ~Database(); //Executes an SQL string statement in a safe way and returns the result. ResultTable executeSQL(string statement); //Inserts into a table. bool insertInto(string tableName, vector columnNames, vector values); bool insertInto(string tableName, string columnName, string value); //Selects from a table. ResultTable selectFrom(string tableName, string columnNames, string conditions); //Deletes from a table. bool deleteFrom(string tableName, string conditions); bool tableExists(string tableName); int getLastInsertedRowId() const; unsigned long getQueryCount() const; void closeConnection(); void beginTransaction(); void commitTransaction(); void rollbackTransaction(); protected: string surroundString(string s, string surround); private: //SQL Instance variables. string filename; sqlite3* db; bool dbIsOpen; int returnCode; string sql; char* errorMsg; //Data tracking. unsigned long queryCount; void openConnection(); std::string combineVector(std::vector strings, std::string mid); }; #endif // DATABASE_H