30#define APR_WANT_MEMFUNC
31#define APR_WANT_STRFUNC
40extern module AP_MODULE_DECLARE_DATA dbd_module;
52#define EXPTIME_SET 0x8
88#define DEFAULT_NKEEP 2
89#define DEFAULT_NMAX 10
90#define DEFAULT_EXPTIME 300
92#define DEFAULT_SQL_INIT_ARRAY_SIZE 5
111 sizeof(
const char *));
123 new->server = add->
server;
128 new->nmin = (add->set&
NMIN_SET) ? add->nmin :
base->nmin;
129 new->nkeep = (add->set&
NKEEP_SET) ? add->nkeep :
base->nkeep;
130 new->nmax = (add->set&
NMAX_SET) ? add->nmax :
base->nmax;
169 switch ((
long)
cmd->info) {
183 "Can't load driver file dbd%s.nlm",
185 "Can't load driver file apr_dbd_%s.so",
191 "Failed to load driver apr_dbd_%s_driver",
213 return "Argument must be numeric!";
217 switch ((
long)
cmd->info) {
245 switch ((
long)
cmd->info) {
270 return "You should specify SQL statement";
282 "SQL Driver Params"),
284 "Use persistent connection/pool"),
286 "SQL statement to prepare (or nothing, to override "
287 "statement inherited from main server) and label"),
289 "SQL statement to be executed after connection is created"),
292 "Minimum number of connections"),
295 "Maximum number of sustained connections"),
297 "Maximum number of connections"),
300 "Keepalive time for idle connections"),
331 "conflicting SQL statements with label %s",
label);
498 if (!group->destroyed) {
520 const char *
err =
"";
525 "Failed to create memory pool");
543 "driver for %s not available", cfg->
name);
547 "can't find driver for %s", cfg->
name);
551 "driver for %s is invalid or corrupted",
556 "mod_dbd not compatible with APR in get_driver");
567 "Can't connect to %s: %s", cfg->
name,
err);
571 "mod_dbd not compatible with APR in open");
588 "Failed to create memory pool");
599 "failed to prepare SQL statements: %s",
600 (errmsg ? errmsg :
"[???]"));
618 group->destroyed = 1;
647 cfg->nmin, cfg->nkeep, cfg->nmax,
653 "failed to initialise");
675 "Failed to create reslist cleanup memory pool");
696 "Failed to create thread mutex");
710 "child init failed!");
730 "Failed to acquire thread mutex");
734 if (!group->reslist) {
741 "Failed to release thread mutex");
759 if (!
svr->cfg->persist) {
784 errmsg =
"(unknown)";
789 "DBD [%s] Error: %s",
svr->cfg->name, errmsg);
821 if (!group->reslist) {
830 "Failed to acquire DBD connection from pool!");
895 if (
svr->cfg->persist) {
896 acq->reslist =
svr->group->reslist;
918 if (
svr->cfg->persist) {
919 acq->reslist =
svr->group->reslist;
APR general purpose library routines.
APR-UTIL Resource List Routines.
apr_array_append(apr_pool_t *p, const apr_array_header_t *first, const apr_array_header_t *second)
APR Standard Headers Support.
static apr_pool_t * pconf
#define AP_INIT_TAKE1(directive, func, mconfig, where, help)
#define ap_get_module_config(v, m)
void ap_hook_post_config(ap_HOOK_post_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define AP_DECLARE_MODULE(foo)
#define AP_INIT_FLAG(directive, func, mconfig, where, help)
#define ap_set_module_config(v, m, val)
void ap_hook_pre_config(ap_HOOK_pre_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define AP_INIT_TAKE12(directive, func, mconfig, where, help)
void ap_hook_child_init(ap_HOOK_child_init_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
int ap_is_initial_req(request_rec *r)
#define APR_STATUS_IS_ENOTIMPL(s)
#define APR_STATUS_IS_EDSOOPEN(s)
#define APR_STATUS_IS_ESYMNOTFOUND(s)
apr_pool_t apr_dbd_t const char * query
const char const apr_dbd_driver_t ** driver
struct apr_dbd_prepared_t apr_dbd_prepared_t
apr_pool_t apr_dbd_t const char const char * label
apr_pool_t const char * params
#define APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ns, link, ret, name, args_decl, args_use, ok, decline)
#define APR_OPTIONAL_HOOK(ns, name, pfn, aszPre, aszSucc, nOrder)
#define APR_REGISTER_OPTIONAL_FN(name)
#define DBD_DECLARE_NONSTD(type)
ap_dbd_t * ap_dbd_cacquire(conn_rec *c)
ap_dbd_t * ap_dbd_acquire(request_rec *r)
apr_status_t dbd_run_post_connect(apr_pool_t *pool, dbd_cfg_t *cfg, ap_dbd_t *dbd)
ap_dbd_t * ap_dbd_open(apr_pool_t *pool, server_rec *s)
void ap_dbd_prepare(server_rec *s, const char *query, const char *label)
void ap_dbd_close(server_rec *s, ap_dbd_t *rec)
#define STANDARD20_MODULE_STUFF
const char int apr_pool_t * pool
const char apr_int32_t flag
#define APR_HASH_KEY_STRING
apr_vformatter_buff_t * c
#define apr_pool_create(newpool, parent)
#define apr_pcalloc(p, size)
apr_int32_t apr_int32_t apr_int32_t err
#define apr_time_from_sec(sec)
static void(* dbd_prepare)(server_rec *, const char *, const char *)
static void * merge_dbd_config(apr_pool_t *pool, void *basev, void *addv)
static void dbd_child_init(apr_pool_t *p, server_rec *s)
static apr_status_t dbd_setup_init(apr_pool_t *pool, server_rec *s)
static const char * dbd_param_flag(cmd_parms *cmd, void *dconf, int flag)
static void * create_dbd_config(apr_pool_t *pool, server_rec *s)
static const command_rec dbd_cmds[]
static void dbd_hooks(apr_pool_t *pool)
static apr_pool_t * config_pool
static int dbd_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static apr_status_t dbd_init_sql_init(apr_pool_t *pool, dbd_cfg_t *cfg, ap_dbd_t *rec)
static const char *const no_dbdriver
static const char * dbd_init_sql(cmd_parms *cmd, void *dconf, const char *query)
static apr_status_t dbd_prepared_init(apr_pool_t *pool, dbd_cfg_t *cfg, ap_dbd_t *rec)
static void ap_dbd_sql_init(server_rec *s, const char *query)
#define DEFAULT_SQL_INIT_ARRAY_SIZE
static apr_status_t dbd_check(apr_pool_t *pool, server_rec *s, ap_dbd_t *rec)
static dbd_group_t * group_list
static apr_status_t dbd_construct(void **data_ptr, void *params, apr_pool_t *pool)
static int dbd_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
static apr_status_t dbd_close(void *data)
static const char * dbd_param(cmd_parms *cmd, void *dconf, const char *val)
Database Access Extension Module for Apache.
Structure to store things which are per connection.
apr_array_header_t * init_queries
A structure that represents the current request.
struct ap_conf_vector_t * request_config
A structure to store information for each virtual server.
struct ap_conf_vector_t * module_config