· 8 years ago · Aug 23, 2018, 07:44 PM
1#pragma once
2
3#include "Reservation.h"
4#include "Client.h"
5#include "Room.h"
6#include "RSV_Error.h"
7#include <vector>
8
9/* Global Variables */
10static bool ComponentInitialized = false;
11static char const * DatabaseName = "database.db";
12static std::vector<Room> RoomStorage;
13
14/* SQL Queries */
15
16static char const * const CREATE_ROOMS_TABLE_SQL = "CREATE TABLE IF NOT EXISTS Rooms ("
17 "id INTEGER PRIMARY KEY,"
18 "name VARCHAR(255) NOT NULL,"
19 "number_of_beds TINYINT DEFAULT 0,"
20 "notes TEXT"
21 ");";
22
23static char const * const INSERT_INTO_ROOMS_TABLE_SQL = "INSERT INTO Rooms (name, number_of_beds, notes) VALUES ('%s', %d, '%s');";
24static char const * const UPDATE_ROOM_BY_ID_SQL = "UPDATE Rooms SET name = '%s', number_of_beds = %d, notes = '%s' WHERE id = %d;";
25static char const * const DELETE_ROOM_SQL = "DELETE FROM Rooms WHERE id = %d;";
26static char const * const SELECT_ALL_SQL = "SELECT * FROM %s";
27
28/* Exported Functions. */
29
30__declspec(dllexport) RsvError InitializeDatabaseConnection(sqlite3 ** databaseConnection);
31__declspec(dllexport) RsvError CloseDatabaseConnection(sqlite3 ** databaseConnection);
32__declspec(dllexport) RsvError CreateTable(sqlite3 * databaseConnection, const char * sqlQuery);
33template<typename... Values>
34__declspec(dllexport) RsvError InsertIntoTable(sqlite3 * databaseConnection, const char * insertQuery, Values... values);
35
36/* Room */
37__declspec(dllexport) RsvError CreateRoomsTable(sqlite3 * databaseConnection);
38__declspec(dllexport) RsvError InsertRoom(sqlite3 * databaseConnection, char const * name, const unsigned numberOfBeds, char const * notes);
39__declspec(dllexport) RsvError SelectQuery(sqlite3 * databaseConnection, const char * tableName, char * selectQuery, int(*callback)(void*, int, char**, char**), void ** callbackArgument);
40__declspec(dllexport) RsvError SelectAllRooms(sqlite3 * databaseConnection);
41__declspec(dllexport) RsvError UpdateRoomById(sqlite3 * databaseConnection, unsigned id, const char * name, unsigned numberOfBeds, const char * notes);
42__declspec(dllexport) RsvError DeleteRoomById(sqlite3 * databaseConnection, unsigned id);
43__declspec(dllexport) std::vector<Room> GetRoomSelection();
44__declspec(dllexport) RsvError SetDatabaseName(const char * databaseName);
45
46/* Reservation */
47// TODO
48
49
50/* Internal functions. */
51RsvError ExecuteSqlite3Query(sqlite3* databaseConnection, const char * query, int(*callback)(void*, int, char**, char**), void * cbArg);
52int Sqlite3SelectRoomCallback(void * callbackArgument, int columnCount, char **columnValue, char **columnName);