2c7fe4263e0fc65049cd599227940e99f19cc69f
[sip-router] / db / db_val.h
1 /* 
2  * $Id$ 
3  */
4
5 #ifndef DB_VAL_H
6 #define DB_VAL_H
7
8 #include <time.h>
9 #include "../str.h"
10
11
12 /*
13  * Accepted column types
14  */
15 typedef enum {
16         DB_INT,
17         DB_DOUBLE,
18         DB_STRING,
19         DB_STR,
20         DB_DATETIME,
21         DB_BLOB
22 } db_type_t;
23
24
25 /*
26  * Column value structure
27  */
28 typedef struct {
29         db_type_t type;                  /* Type of the value */
30         int nul;                         /* Means that the column in database has no value */
31         union {
32                 int          int_val;    /* integer value */
33                 double       double_val; /* double value */
34                 time_t       time_val;   /* unix time value */
35                 const char*  string_val; /* NULL terminated string */
36                 str          str_val;    /* str string value */
37                 str          blob_val;   /* Blob data */
38         } val;                           /* union of all possible types */
39 } db_val_t;
40
41
42 /*
43  * Useful macros for accessing attributes of db_val structure
44  */
45
46 #define VAL_TYPE(dv)   ((dv)->type)
47 #define VAL_NULL(dv)   ((dv)->nul)
48 #define VAL_INT(dv)    ((dv)->val.int_val)
49 #define VAL_DOUBLE(dv) ((dv)->val.double_val)
50 #define VAL_TIME(dv)   ((dv)->val.time_val)
51 #define VAL_STRING(dv) ((dv)->val.string_val)
52 #define VAL_STR(dv)    ((dv)->val.str_val)
53 #define VAL_BLOB(dv)   ((dv)->val.blob_val)
54
55
56 /*
57  * Convert string to given type
58  */
59 int str2val(db_type_t _t, db_val_t* _v, const char* _s, int _l);
60
61
62 /*
63  * Convert given type to string
64  */
65 int val2str(db_val_t* _v, char* _s, int* _len);
66
67
68 #endif /* DB_VAL_H */