#ifndef PACKAGES_DB_H
#define PACKAGES_DB_H
#ifdef PACKAGE_DB
#ifdef USE_MSQL
/* MSQL v2 requires this so that it knows the right prototypes */
#define _OS_UNIX
#ifdef INCL_LOCAL_MSQL_H
#include "/usr/local/include/msql.h"
#endif
#ifdef INCL_LOCAL_MSQL_MSQL_H
#include "/usr/local/msql/include/msql.h"
#endif
#ifdef INCL_LOCAL_MINERVA_MSQL_H
#include "/usr/local/Minerva/include/msql.h"
#endif
#ifdef INCL_LIB_HUGHES_MSQL_H
#include "/usr/lib/Hughes/include/msql.h"
#endif
#endif
#ifdef USE_MYSQL
#ifndef TCC
#ifdef INCL_LOCAL_MYSQL_H
#include "/usr/local/include/mysql.h"
#endif
#ifdef INCL_LOCAL_INCLUDE_MYSQL_MYSQL_H
#include "/usr/local/include/mysql/mysql.h"
#endif
#ifdef INCL_LOCAL_MYSQL_MYSQL_H
#include "/usr/local/mysql/include/mysql.h"
#endif
#ifdef INCL_MYSQL_MYSQL_H
#include "/usr/include/mysql/mysql.h"
#endif
#else
#ifdef INCL_LOCAL_MYSQL_H
#include <mysql.h>
#endif
#ifdef INCL_LOCAL_INCLUDE_MYSQL_MYSQL_H
#include <mysql/mysql.h>
#endif
#ifdef INCL_LOCAL_MYSQL_MYSQL_H
#include "/usr/local/mysql/include/mysql.h"
#endif
#ifdef INCL_MYSQL_MYSQL_H
#include <mysql/mysql.h>
#endif
#endif
#endif
typedef union dbconn_u {
#ifdef USE_MSQL
struct tmp_msql {
int handle;
m_result * result_set;
} msql;
#endif
#ifdef USE_MYSQL
struct tmp_mysql {
char errormsg[256];
MYSQL *handle;
MYSQL_RES *results;
} mysql;
#endif
} dbconn_t;
/*
* Structure so we can have a lookup table for the specific database
*/
typedef struct db_defn_s {
const char *name;
int (*connect)(dbconn_t *, const char *, const char *, const char *, const char *);
int (*close)(dbconn_t *);
int (*execute)(dbconn_t *, const char *);
array_t * (*fetch)(dbconn_t *, int);
int (*commit)(dbconn_t *);
int (*rollback)(dbconn_t *);
void (*cleanup)(dbconn_t *);
void (*status)(dbconn_t *, outbuffer_t *);
char * (*error)(dbconn_t *);
} db_defn_t;
#define DB_FLAG_EMPTY 0x1
typedef struct _db {
int flags;
db_defn_t *type;
dbconn_t c;
} db_t;
void db_cleanup (void);
#endif /* PACKAGES_DB */
#endif /* PACKAGES_DB_H */