core, lib, modules: restructured source code tree
[sip-router] / src / lib / srdb2 / db_fld.h
1 /* 
2  * Copyright (C) 2001-2003 FhG Fokus
3  * Copyright (C) 2006-2007 iptelorg GmbH
4  *
5  * This file is part of Kamailio, a free SIP server.
6  *
7  * Kamailio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version
11  *
12  * Kamailio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License 
18  * along with this program; if not, write to the Free Software 
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #ifndef _DB_FLD_H
23 #define _DB_FLD_H  1
24
25 /** \ingroup DB_API 
26  * @{ 
27  */
28
29 #include "db_gen.h"
30 #include "../../str.h"
31 #include <time.h>
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif /* __cplusplus */
36
37
38 enum db_fld_type {
39         DB_NONE = 0,   /* Bumper */
40         DB_INT,        /* 32-bit integer */
41         DB_FLOAT,      /* 32-bit fixed-precision number */
42         DB_DOUBLE,     /* double data type */
43         DB_CSTR,       /* Zero-terminated string */
44         DB_STR,        /* str structure */
45         DB_DATETIME,   /* Date and time in number of seconds since 1-Jan-1970 */
46         DB_BLOB,       /* Generic binary object*/
47         DB_BITMAP      /* Bitmap of flags */
48 };
49
50 extern char* db_fld_str[];
51
52 enum db_fld_op {
53         DB_EQ = 0, /* The value of the field must be equal */
54         DB_NE,     /* The value of the filed must be not equal */
55         DB_LT,     /* The value of the field must be less than */
56         DB_GT,     /* The value of the field must be greater than */
57         DB_LEQ,    /* The value of the field must be less than or equal */
58         DB_GEQ     /* The value of the field must be greater than or equal */
59 };
60
61 enum db_flags {
62         DB_NULL = (1 << 0),  /**< The field is NULL, i.e. no value was provided */
63         DB_NO_TZ = (1 << 1), /**< Inhibit time-zone shifts for timestamp fields */
64 };
65
66 /* union of all possible types */
67 typedef union db_fld_val {
68         int          int4;   /* integer value */
69         float        flt;    /* float value */
70         double       dbl;    /* double value */
71         time_t       time;   /* unix time value */
72         char*        cstr;   /* NULL terminated string */
73         str          lstr;   /* String with known length */
74         str          blob;   /* Blob data */
75         unsigned int bitmap; /* Bitmap data type, 32 flags, should be enough */ 
76         long long    int8;   /* 8-byte integer */
77 } db_fld_val_t;
78
79 typedef struct db_fld {
80         db_gen_t gen;  /* Generic part of the structure */
81         char* name;
82         enum db_fld_type type;
83         unsigned int flags;
84         db_fld_val_t v;
85         enum db_fld_op op;
86 } db_fld_t;
87
88 #define DB_FLD_LAST(fld) ((fld).name == NULL)
89 #define DB_FLD_EMPTY(fld) ((fld) == NULL || (fld)[0].name == NULL)
90
91 struct db_fld* db_fld(size_t n);
92 void db_fld_free(struct db_fld* fld);
93
94 int db_fld_init(struct db_fld* fld);
95 void db_fld_close(struct db_fld* fld);
96
97 db_fld_t* db_fld_copy(db_fld_t* fld);
98
99 #ifdef __cplusplus
100 }
101 #endif /* __cplusplus */
102
103 /** @} */
104
105 #endif /* _DB_FLD_H */