Hoel
C Database abstraction library with json based language
hoel.h
Go to the documentation of this file.
1 
25 #ifndef __HOEL_H__
26 #define __HOEL_H__
27 
28 #ifdef __cplusplus
29 extern "C"
30 {
31 #endif
32 
33 #include "hoel-cfg.h"
34 
35 #include <jansson.h>
36 
37 #ifndef __USE_XOPEN
38  #define __USE_XOPEN
39 #endif
40 #include <time.h>
41 #include <pthread.h>
42 
44 #include <yder.h>
45 #include <orcania.h>
46 
52 #define HOEL_DB_TYPE_SQLITE 0
53 #define HOEL_DB_TYPE_MARIADB 1
54 #define HOEL_DB_TYPE_PGSQL 2
55 
56 #define HOEL_COL_TYPE_INT 0
57 #define HOEL_COL_TYPE_DOUBLE 1
58 #define HOEL_COL_TYPE_TEXT 2
59 #define HOEL_COL_TYPE_DATE 3
60 #define HOEL_COL_TYPE_BLOB 4
61 #define HOEL_COL_TYPE_BOOL 5
62 #define HOEL_COL_TYPE_NULL 5
63 
64 #define H_OK 0 /* No error */
65 #define H_ERROR 1 /* Generic error */
66 #define H_ERROR_PARAMS 2 /* Error in input parameters */
67 #define H_ERROR_CONNECTION 3 /* Error in database connection */
68 #define H_ERROR_QUERY 4 /* Error executing query */
69 #define H_ERROR_MEMORY 99 /* Error allocating memory */
70 
71 #define H_OPTION_NONE 0x0000 /* Nothing whatsoever */
72 #define H_OPTION_SELECT 0x0001 /* Execute a SELECT statement */
73 #define H_OPTION_EXEC 0x0010 /* Execute an INSERT, UPDATE or DELETE statement */
74 
87 struct _h_connection {
88  int type;
89  void * connection;
90 };
91 
95 struct _h_type_int {
96  long long int value;
97 };
98 
103  double value;
104 };
105 
110  struct tm value;
111 };
112 
116 struct _h_type_text {
117  size_t length;
118  char * value;
119 };
120 
124 struct _h_type_blob {
125  size_t length;
126  void * value;
127 };
128 
132 struct _h_data {
133  int type;
134  void * t_data;
135 };
136 
140 struct _h_result {
141  unsigned int nb_rows;
142  unsigned int nb_columns;
143  struct _h_data ** data;
144 };
145 
160 int h_close_db(struct _h_connection * conn);
161 
175 void h_free(void * data);
176 
194 char * h_escape_string(const struct _h_connection * conn, const char * unsafe);
195 
204 char * h_escape_string_with_quotes(const struct _h_connection * conn, const char * unsafe);
205 
230 int h_execute_query(const struct _h_connection * conn, const char * query, struct _h_result * result, int options);
231 
239 int h_query_insert(const struct _h_connection * conn, const char * query);
240 
247 struct _h_data * h_query_last_insert_id(const struct _h_connection * conn);
248 
256 int h_query_update(const struct _h_connection * conn, const char * query);
257 
265 int h_query_delete(const struct _h_connection * conn, const char * query);
266 
275 int h_query_select(const struct _h_connection * conn, const char * query, struct _h_result * result);
276 
296 int h_execute_query_json(const struct _h_connection * conn, const char * query, json_t ** j_result);
297 
306 int h_query_select_json(const struct _h_connection * conn, const char * query, json_t ** j_result);
307 
366 int h_select(const struct _h_connection * conn, const json_t * j_query, json_t ** j_result, char ** generated_query);
367 
378 int h_insert(const struct _h_connection * conn, const json_t * j_query, char ** generated_query);
379 
388 json_t * h_last_insert_id(const struct _h_connection * conn);
389 
400 int h_update(const struct _h_connection * conn, const json_t * j_query, char ** generated_query);
401 
412 int h_delete(const struct _h_connection * conn, const json_t * j_query, char ** generated_query);
413 
430 int h_clean_result(struct _h_result * result);
431 
438 int h_clean_data(struct _h_data * data);
439 
446 int h_clean_data_full(struct _h_data * data);
447 
463 int h_clean_connection(struct _h_connection * conn);
464 
471 struct _h_connection * h_connect_sqlite(const char * db_path);
472 
477 void h_close_sqlite(struct _h_connection * conn);
478 
496 char * h_escape_string_sqlite(const struct _h_connection * conn, const char * unsafe);
497 
506 char * h_escape_string_with_quotes_sqlite(const struct _h_connection * conn, const char * unsafe);
507 
524 long long int h_last_insert_id_sqlite(const struct _h_connection * conn);
525 
534 #define h_exec_query_sqlite(conn, query) h_execute_query_sqlite(conn, query)
535 
546 int h_execute_query_sqlite(const struct _h_connection * conn, const char * query);
547 
558 int h_execute_query_json_sqlite(const struct _h_connection * conn, const char * query, json_t ** j_result);
559 
582 int h_select_query_sqlite(const struct _h_connection * conn, const char * query, struct _h_result * result);
583 
604 struct _h_connection * h_connect_mariadb(const char * host, const char * user, const char * passwd, const char * db, const unsigned int port, const char * unix_socket);
605 
609 void h_close_mariadb(struct _h_connection * conn);
610 
628 char * h_escape_string_mariadb(const struct _h_connection * conn, const char * unsafe);
629 
638 char * h_escape_string_with_quotes_mariadb(const struct _h_connection * conn, const char * unsafe);
639 
656 long long int h_last_insert_id_mariadb(const struct _h_connection * conn);
657 
667 int h_execute_query_json_mariadb(const struct _h_connection * conn, const char * query, json_t ** j_result);
668 
691 int h_execute_query_mariadb(const struct _h_connection * conn, const char * query, struct _h_result * result);
692 
703 struct _h_data * h_get_mariadb_value(const char * value, const unsigned long length, const int m_type);
704 
720 struct _h_connection * h_connect_pgsql(const char * conninfo);
721 
726 void h_close_pgsql(struct _h_connection * conn);
727 
745 char * h_escape_string_pgsql(const struct _h_connection * conn, const char * unsafe);
746 
755 char * h_escape_string_with_quotes_pgsql(const struct _h_connection * conn, const char * unsafe);
756 
777 int h_execute_query_json_pgsql(const struct _h_connection * conn, const char * query, json_t ** j_result);
778 
785 long long int h_last_insert_id_pgsql(const struct _h_connection * conn);
786 
809 int h_execute_query_pgsql(const struct _h_connection * conn, const char * query, struct _h_result * result);
810 
815 #ifdef __cplusplus
816 }
817 #endif
818 
819 #endif /* __HOEL_H__ */
char * h_escape_string_with_quotes_pgsql(const struct _h_connection *conn, const char *unsafe)
Definition: hoel-pgsql.c:421
char * h_escape_string_with_quotes_sqlite(const struct _h_connection *conn, const char *unsafe)
Definition: hoel-sqlite.c:330
char * h_escape_string(const struct _h_connection *conn, const char *unsafe)
Definition: hoel.c:72
char * h_escape_string_mariadb(const struct _h_connection *conn, const char *unsafe)
Definition: hoel-mariadb.c:444
char * h_escape_string_with_quotes(const struct _h_connection *conn, const char *unsafe)
Definition: hoel.c:101
char * h_escape_string_with_quotes_mariadb(const struct _h_connection *conn, const char *unsafe)
Definition: hoel-mariadb.c:451
char * h_escape_string_pgsql(const struct _h_connection *conn, const char *unsafe)
Definition: hoel-pgsql.c:414
char * h_escape_string_sqlite(const struct _h_connection *conn, const char *unsafe)
Definition: hoel-sqlite.c:323
int h_query_insert(const struct _h_connection *conn, const char *query)
Definition: hoel.c:309
int h_query_update(const struct _h_connection *conn, const char *query)
Definition: hoel.c:366
int h_clean_data_full(struct _h_data *data)
Definition: hoel.c:461
int h_query_select(const struct _h_connection *conn, const char *query, struct _h_result *result)
Definition: hoel.c:392
int h_clean_data(struct _h_data *data)
Definition: hoel.c:440
int h_clean_result(struct _h_result *result)
Definition: hoel.c:417
struct _h_data * h_get_mariadb_value(const char *value, const unsigned long length, const int m_type)
Definition: hoel-mariadb.c:480
int h_execute_query_pgsql(const struct _h_connection *conn, const char *query, struct _h_result *result)
Definition: hoel-pgsql.c:434
int h_execute_query(const struct _h_connection *conn, const char *query, struct _h_result *result, int options)
Definition: hoel.c:135
int h_query_delete(const struct _h_connection *conn, const char *query)
Definition: hoel.c:379
int h_select_query_sqlite(const struct _h_connection *conn, const char *query, struct _h_result *result)
struct _h_data * h_query_last_insert_id(const struct _h_connection *conn)
Definition: hoel.c:322
int h_execute_query_mariadb(const struct _h_connection *conn, const char *query, struct _h_result *result)
Definition: hoel-mariadb.c:464
void h_close_mariadb(struct _h_connection *conn)
Definition: hoel-mariadb.c:439
int h_clean_connection(struct _h_connection *conn)
Definition: hoel.c:623
struct _h_connection * h_connect_pgsql(const char *conninfo)
Definition: hoel-pgsql.c:403
struct _h_connection * h_connect_sqlite(const char *db_path)
Definition: hoel-sqlite.c:312
void h_close_sqlite(struct _h_connection *conn)
Definition: hoel-sqlite.c:318
int h_close_db(struct _h_connection *conn)
Definition: hoel.c:40
struct _h_connection * h_connect_mariadb(const char *host, const char *user, const char *passwd, const char *db, const unsigned int port, const char *unix_socket)
Definition: hoel-mariadb.c:428
void h_close_pgsql(struct _h_connection *conn)
Definition: hoel-pgsql.c:409
int h_execute_query_json_mariadb(const struct _h_connection *conn, const char *query, json_t **j_result)
Definition: hoel-mariadb.c:472
int h_execute_query_json_pgsql(const struct _h_connection *conn, const char *query, json_t **j_result)
Definition: hoel-pgsql.c:442
long long int h_last_insert_id_sqlite(const struct _h_connection *conn)
Definition: hoel-sqlite.c:337
int h_execute_query_sqlite(const struct _h_connection *conn, const char *query)
Definition: hoel-sqlite.c:343
int h_delete(const struct _h_connection *conn, const json_t *j_query, char **generated_query)
Definition: hoel-simple-json.c:750
long long int h_last_insert_id_pgsql(const struct _h_connection *conn)
Definition: hoel-pgsql.c:428
json_t * h_last_insert_id(const struct _h_connection *conn)
Definition: hoel-simple-json.c:662
int h_select(const struct _h_connection *conn, const json_t *j_query, json_t **j_result, char **generated_query)
Definition: hoel-simple-json.c:458
long long int h_last_insert_id_mariadb(const struct _h_connection *conn)
Definition: hoel-mariadb.c:458
int h_execute_query_json(const struct _h_connection *conn, const char *query, json_t **j_result)
Definition: hoel.c:171
int h_insert(const struct _h_connection *conn, const json_t *j_query, char **generated_query)
Definition: hoel-simple-json.c:592
int h_execute_query_json_sqlite(const struct _h_connection *conn, const char *query, json_t **j_result)
Definition: hoel-sqlite.c:350
int h_update(const struct _h_connection *conn, const json_t *j_query, char **generated_query)
Definition: hoel-simple-json.c:700
int h_query_select_json(const struct _h_connection *conn, const char *query, json_t **j_result)
Definition: hoel.c:405
void h_free(void *data)
Definition: hoel.c:32
Definition: hoel.h:87
int type
Definition: hoel.h:88
void * connection
Definition: hoel.h:89
Definition: hoel.h:132
int type
Definition: hoel.h:133
void * t_data
Definition: hoel.h:134
Definition: hoel.h:140
unsigned int nb_rows
Definition: hoel.h:141
struct _h_data ** data
Definition: hoel.h:143
unsigned int nb_columns
Definition: hoel.h:142
Definition: hoel.h:124
size_t length
Definition: hoel.h:125
void * value
Definition: hoel.h:126
Definition: hoel.h:109
struct tm value
Definition: hoel.h:110
Definition: hoel.h:102
double value
Definition: hoel.h:103
Definition: hoel.h:95
long long int value
Definition: hoel.h:96
Definition: hoel.h:116
size_t length
Definition: hoel.h:117
char * value
Definition: hoel.h:118