Raspberry Pi Weighting Control System
This project serves as a simple weighting control system, that was realized as a Bachelor Thesis
db_driver.h
Go to the documentation of this file.
1 #ifndef DB_DRIVER_H
2 #define DB_DRIVER_H
3 
4 #include <mysql.h>
5 #include <memory>
6 #include <string>
7 
8 #include "user_workspace.h"
9 
10 #define DB_CONF_BUF_SIZE 32
11 
16 typedef struct {
17  std::string host;
18  std::string user;
19  std::string passwd;
20  std::string db;
21  unsigned int port;
22  std::string socket;
23  unsigned long clientflags;
25 
30 typedef struct {
31  char uname[64];
32  // uint8_t passwd[64];
33  char passwd[64];
34  uint8_t status;
35 } user_cred; //user_credentials - container used to verify user credentials before retrieving all data
36 
41 class db_driver {
42  public:
53  db_driver(const char* host = "localhost", const char* user = "pi", const char* passwd = "raspberry",
54  const char* db = "control_system", unsigned int port = 3306, const char* socket = NULL,
55  unsigned long cflags = 0);
56 
58  bool is_open();
64  int query_user_credentials(user_cred* creds, const char* uname);
71  int query_user_data(user_cont* usr, const char* uname = nullptr,
72  uint8_t* rfid_serial = nullptr, uint8_t rfid_ser_len = 0);
74  int query_username(std::string& uname, unsigned long id);
79  /* Selects all measurement data into @m by @id */
80  int query_measurement(measurement* m, unsigned long id);
83  int query_continuous_measurement(std::vector<measurement> &ms, unsigned long m_number,
84  unsigned long measuree_id);
88  int is_measurement_continuous(unsigned long m_number, unsigned long measuree_id);
91  int is_username_available(const char* uname);
94  int is_rfid_serial_available(uint8_t *serial, uint8_t ser_len);
96  int increment_user_measurement_count(unsigned long id);
98  int can_login_subuser(const char* uname);
102  int update_user_rfid(unsigned long user_id, uint8_t* serial, uint8_t ser_len);
105  int insert_user(user_cont *new_usr, const char* password);
108 
113 
114  private:
116  bool db_is_open = true;
118  std::unique_ptr<MYSQL> conn;
119 
120  int test(); // this shouldn't be used anywhere, non prepared satement test
122  void handle_stmt_error(MYSQL_STMT* stmt);
124  void mysql_time_to_tm(MYSQL_TIME* src, std::tm *dest);
125  // int prprd_stmt_executor(const char *sql, const char* fnc_name, MYSQL_BIND *par, int par_cnt,
126  // MYSQL_BIND *res, int res_cnt);
127 };
128 
129 #endif
Handles database querries.
Definition: db_driver.h:41
int can_login_subuser(const char *uname)
Definition: db_driver.cpp:1555
bool is_open()
Definition: db_driver.cpp:71
void test_select_with_binary()
Definition: db_driver.cpp:1957
int insert_measurement(measurement *m)
Definition: db_driver.cpp:1765
int is_username_available(const char *uname)
Definition: db_driver.cpp:1405
int is_rfid_serial_available(uint8_t *serial, uint8_t ser_len)
Definition: db_driver.cpp:1461
int query_username(std::string &uname, unsigned long id)
Definition: db_driver.cpp:498
int is_measurement_continuous(unsigned long m_number, unsigned long measuree_id)
Definition: db_driver.cpp:1314
void test_insert_with_binary()
Definition: db_driver.cpp:1910
db_driver(db_driver_conf *conf)
Construct a new db driver object from configuration.
Definition: db_driver.cpp:24
int insert_user(user_cont *new_usr, const char *password)
Definition: db_driver.cpp:1678
int update_user_rfid(unsigned long user_id, uint8_t *serial, uint8_t ser_len)
Definition: db_driver.cpp:1635
int query_continuous_measurement(std::vector< measurement > &ms, unsigned long m_number, unsigned long measuree_id)
Definition: db_driver.cpp:1054
int query_measurement(measurement *m, unsigned long id)
Definition: db_driver.cpp:720
int query_measurement_headers(user_cont *usr)
Definition: db_driver.cpp:580
int query_user_data(user_cont *usr, const char *uname=nullptr, uint8_t *rfid_serial=nullptr, uint8_t rfid_ser_len=0)
Selects all user data into user container @usr. Data is selected by either username or rfid_serial....
Definition: db_driver.cpp:199
int query_user_credentials(user_cred *creds, const char *uname)
Selects username, password and status into @creds filtered by @uname.
Definition: db_driver.cpp:75
int increment_user_measurement_count(unsigned long id)
Definition: db_driver.cpp:1517
Container for measurement data and (convenience) variables, that are used to show measurement in GUI.
Class used as a container for user data, that are selected from database. (and also for insert,...
#define conf
Container for configuration neccessary to open database connnection.
Definition: db_driver.h:16
std::string socket
Definition: db_driver.h:22
std::string db
Definition: db_driver.h:20
std::string user
Definition: db_driver.h:18
std::string host
Definition: db_driver.h:17
unsigned int port
Definition: db_driver.h:21
std::string passwd
Definition: db_driver.h:19
unsigned long clientflags
Definition: db_driver.h:23
Struct used to contain username, password and user status until credentials are verified.
Definition: db_driver.h:30
uint8_t status
Definition: db_driver.h:34