- Spelling checked
[sip-router] / db / db.h
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2001-2003 FhG Fokus
5  *
6  * This file is part of ser, a free SIP server.
7  *
8  * ser is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version
12  *
13  * For a license to use the ser software under conditions
14  * other than those described here, or to purchase support for this
15  * software, please contact iptel.org by e-mail at the following addresses:
16  *    info@iptel.org
17  *
18  * ser is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License 
24  * along with this program; if not, write to the Free Software 
25  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26  */
27 /*
28  * History:
29  * --------
30  *  2004-06-06  removed db_* macros and global dbf (andrei)
31  */
32
33
34 #ifndef DB_H
35 #define DB_H
36
37 #include "db_key.h"
38 #include "db_op.h"
39 #include "db_val.h"
40 #include "db_con.h"
41 #include "db_row.h"
42 #include "db_res.h"
43
44
45 /*
46  * Specify table name that will be used for
47  * subsequent operations
48  */
49 typedef int (*db_use_table_f)(db_con_t* _h, const char* _t);
50
51
52 /*
53  * Initialize database connection and
54  * obtain the connection handle
55  */
56 typedef db_con_t* (*db_init_f) (const char* _sqlurl);
57
58
59 /*
60  * Close a database connection and free
61  * all memory used
62  */
63 typedef void (*db_close_f) (db_con_t* _h); 
64
65
66 /*
67  * Query table for specified rows
68  * _h: structure representing database connection
69  * _k: key names
70  * _op: conditions
71  * _v: values of the keys that must match
72  * _c: column names to return
73  * _n: nmber of key=values pairs to compare
74  * _nc: number of columns to return
75  * _o: order by the specified column
76  * _r: Result will be stored in this variable
77  *     NULL if there is no result
78  */
79 typedef int (*db_query_f) (db_con_t* _h, db_key_t* _k, 
80                            db_op_t* _op, db_val_t* _v, 
81                            db_key_t* _c, int _n, int _nc,
82                            db_key_t _o, db_res_t** _r);
83
84
85 /*
86  * Raw SQL query, database specific !
87  */
88 typedef int (*db_raw_query_f) (db_con_t* _h, char* _s, db_res_t** _r);
89
90
91 /*
92  * Free a result allocated by db_query
93  * _h: structure representing database connection
94  * _r: db_res structure
95  */
96 typedef int (*db_free_result_f) (db_con_t* _h, db_res_t* _r);
97
98
99 /*
100  * Insert a row into specified table
101  * _h: structure representing database connection
102  * _k: key names
103  * _v: values of the keys
104  * _n: number of key=value pairs
105  */
106 typedef int (*db_insert_f) (db_con_t* _h, db_key_t* _k, db_val_t* _v, int _n);
107
108
109 /*
110  * Delete a row from the specified table
111  * _h: structure representing database connection
112  * _k: key names
113  * _o: operators
114  * _v: values of the keys that must match
115  * _n: number of key=value pairs
116  */
117 typedef int (*db_delete_f) (db_con_t* _h, db_key_t* _k, db_op_t* _o, db_val_t* _v, int _n);
118
119
120 /*
121  * Update some rows in the specified table
122  * _h: structure representing database connection
123  * _k: key names
124  * _o: operators
125  * _v: values of the keys that must match
126  * _uk: updated columns
127  * _uv: updated values of the columns
128  * _n: number of key=value pairs
129  * _un: number of columns to update
130  */
131 typedef int (*db_update_f) (db_con_t* _h, db_key_t* _k, db_op_t* _o, db_val_t* _v,
132                             db_key_t* _uk, db_val_t* _uv, int _n, int _un);
133
134
135
136 typedef struct db_func {
137         db_use_table_f   use_table;    /* Specify table name */
138         db_init_f        init;         /* Initialize database connection */
139         db_close_f       close;        /* Close database connection */
140         db_query_f       query;        /* query a table */
141         db_raw_query_f   raw_query;    /* Raw query - SQL */
142         db_free_result_f free_result;  /* Free a query result */
143         db_insert_f      insert;       /* Insert into table */
144         db_delete_f      delete;       /* Delete from table */ 
145         db_update_f      update;       /* Update table */
146 } db_func_t;
147
148
149
150 /*
151  * Bind database module functions
152  * returns TRUE if everything went OK
153  * FALSE otherwise
154  */
155 int bind_dbmod(char* mod, db_func_t* dbf);
156
157
158 /*
159  * Get the version of the given table. If there is
160  * no row for the table then the function returns
161  * version 0. -1 is returned on error.
162  */
163 int table_version(db_func_t* dbf, db_con_t* con, const str* table);
164
165
166 #endif /* DB_H */