File: bdb_lib.h

package info (click to toggle)
kamailio 4.2.0-2%2Bdeb8u3
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 56,276 kB
  • sloc: ansic: 552,836; xml: 166,484; sh: 8,659; makefile: 7,676; sql: 6,235; perl: 3,487; yacc: 3,428; python: 1,457; cpp: 1,219; php: 1,047; java: 449; pascal: 194; cs: 40; awk: 27
file content (186 lines) | stat: -rw-r--r-- 5,020 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/*
 * $Id$
 *
 * db_berkeley module, portions of this code were templated using
 * the dbtext and postgres modules.

 * Copyright (C) 2007 Cisco Systems
 *
 * This file is part of SIP-router, a free SIP server.
 *
 * SIP-router is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version
 *
 * SIP-router is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 * History:
 * --------
 * 2007-09-19  genesis (wiquan)
 */

/*! \file
 * Berkeley DB : Library
 *
 * \ingroup database
 */



#ifndef _BDB_LIB_H_
#define _BDB_LIB_H_

#include <time.h>
#include <stdlib.h>
#include <syslog.h>
#include <sys/stat.h>
#include <db.h>

#include "../../str.h"
#include "../../lib/srdb2/db.h"
#include "../../lib/srdb2/db_fld.h"

/*max number of columns in a table*/
#define MAX_NUM_COLS 32

/*max char width of a table row*/
#define MAX_ROW_SIZE 2048

/*max char width of a table name*/
#define MAX_TABLENAME_SIZE 64

#define METADATA_COLUMNS "METADATA_COLUMNS"
#define METADATA_KEY "METADATA_KEY"
#define METADATA_READONLY "METADATA_READONLY"
#define METADATA_LOGFLAGS "METADATA_LOGFLAGS"
#define METADATA_DEFAULTS "METADATA_DEFAULTS"

/*journal logging flag masks */
#define JLOG_NONE   0
#define JLOG_INSERT 1
#define JLOG_DELETE 2
#define JLOG_UPDATE 4
#define JLOG_FILE   8
#define JLOG_STDOUT 16
#define JLOG_SYSLOG 32

#define DELIM "|"
#define DELIM_LEN (sizeof(DELIM)-1)

#define BDB_VALUE 0
#define BDB_KEY   1

typedef enum db_fld_type bdb_type_t;

typedef struct {
	bdb_type_t type; /**< Type of the value                              */
	int nul;		/**< Means that the column in database has no value */
	int free;		/**< Means that the value should be freed */
	/** Column value structure that holds the actual data in a union.  */
	union {
		int           int_val;    /**< integer value              */
		long long     ll_val;     /**< long long value            */
		double        double_val; /**< double value               */
		time_t        time_val;   /**< unix time_t value          */
		const char*   string_val; /**< zero terminated string     */
		str           str_val;    /**< str type string value      */
		str           blob_val;   /**< binary object data         */
		unsigned int  bitmap_val; /**< Bitmap data type           */
	} val;
} bdb_val_t, *bdb_val_p;

// typedef db_val_t bdb_val_t, *bdb_val_p;

typedef struct _bdb_row
{
	bdb_val_p fields;
	struct _bdb_row *prev;
	struct _bdb_row *next;
} bdb_row_t, *bdb_row_p;

typedef struct _bdb_col
{
	str name;
	str dv;     /* default value */
	int type;
	int flag;
} bdb_col_t, *bdb_col_p;

typedef struct _bdb_table
{
	str name;
	DB *db;
	bdb_col_p colp [MAX_NUM_COLS];
	int ncols;
	int nkeys;
	int ro;       /*db readonly flag*/
	int logflags; /*flags indication what-where to journal log */
	FILE* fp;     /*jlog file pointer */
	time_t t;     /*jlog creation time */
	ino_t ino;
} bdb_table_t, *bdb_table_p;

typedef struct _bdb_tcache
{
	bdb_table_p dtp;
	struct _bdb_tcache *prev;
	struct _bdb_tcache *next;
} bdb_tcache_t, *bdb_tcache_p;

typedef struct _bdb_db
{
	str name;
	DB_ENV *dbenv;
	bdb_tcache_p tables;
} bdb_db_t, *bdb_db_p;

typedef struct _bdb_params
{
	u_int32_t cache_size;
	int auto_reload;
	int log_enable;
	int journal_roll_interval;
} bdb_params_t, *bdb_params_p;


int bdblib_init(bdb_params_p _parms);
int bdblib_destroy(void);
int bdblib_close(bdb_db_p _db_p, str* _n);
int bdblib_reopen(bdb_db_p _db_p, str* _n);
int bdblib_recover(bdb_table_p _tp, int error_code);
void bdblib_log(int op, bdb_db_p _db, bdb_table_p _tp, char* _msg, int len);
int bdblib_create_dbenv(DB_ENV **dbenv, char* home);
int bdblib_create_journal(bdb_db_p _db_p, bdb_table_p _tp);
bdb_db_p  	bdblib_get_db(str *_s);
bdb_tcache_p 	bdblib_get_table(bdb_db_t *_db, str *_s);
bdb_table_p 	bdblib_create_table(bdb_db_t *_db, str *_s);

int bdb_db_free(bdb_db_p _dbp);
int bdb_tcache_free(bdb_tcache_p _tbc);
int bdb_table_free(bdb_table_p _tp);

int load_metadata_columns(bdb_table_p _tp);
int load_metadata_keys(bdb_table_p _tp);
int load_metadata_readonly(bdb_table_p _tp);
int load_metadata_logflags(bdb_table_p _tp);
int load_metadata_defaults(bdb_table_p _tp);

int bdblib_valtochar(bdb_table_p tp, db_fld_t *fld, int fld_count, char *kout,
		int *klen, int ktype);

int bdb_is_database(char *dirpath);
int bdb_get_colpos(bdb_table_t *tp, char *name);

int bdb_str2int(char *s, int *v);
int bdb_str2double(char *s, double *v);
int bdb_str2time(char *s, time_t *v);

#endif