/*
* SQL header file
*
+ * by Kern E. Sibbald
+ *
* Anyone who accesses the database will need to include
* this file.
*
* the external world, and definitions destined only
* for the external world. This is control with
* the define __SQL_C, which is defined only in sql.c
+ *
+ * Version $Id$
*/
/*
#ifndef __SQL_H_
#define __SQL_H_ 1
-
+
typedef void (DB_LIST_HANDLER)(void *, char *);
typedef int (DB_RESULT_HANDLER)(void *, int, char **);
+
+#define db_lock(mdb) _db_lock(__FILE__, __LINE__, mdb)
+#define db_unlock(mdb) _db_unlock(__FILE__, __LINE__, mdb)
+
+#ifdef xxxxx_old_way_of_doing_it
+#define db_lock(mdb) P(mdb->mutex)
+#define db_unlock(mdb) V(mdb->mutex)
+#define db_lock(mdb) \
+ do { int errstat; if ((errstat=rwl_writelock(&(mdb->lock)))) \
+ e_msg(__FILE__, __LINE__, M_ABORT, 0, "rwl_writelock failure. ERR=%s\n",\
+ strerror(errstat)); \
+ } while(0)
+
+#define db_unlock(x) \
+ do { int errstat; if ((errstat=rwl_writeunlock(&(mdb->lock)))) \
+ e_msg(__FILE__, __LINE__, M_ABORT, 0, "rwl_writeunlock failure. ERR=%s\n",\
+ strerror(errstat)); \
+ } while(0)
+#endif
+
#ifdef __SQL_C
*/
typedef struct s_db {
BQUEUE bq; /* queue control */
- pthread_mutex_t mutex;
+/* pthread_mutex_t mutex; */
+ rwlock_t lock; /* transaction lock */
struct sqlite *db;
char **result;
int nrow; /* nrow returned from sqlite */
char *db_password;
int connected;
char *sqlite_errmsg; /* error message returned by sqlite */
- char *errmsg; /* nicely edited error message */
- char *cmd; /* SQL command string */
+ POOLMEM *errmsg; /* nicely edited error message */
+ POOLMEM *cmd; /* SQL command string */
+ POOLMEM *cached_path;
+ uint32_t cached_path_id;
} B_DB;
*/
typedef struct s_db {
BQUEUE bq; /* queue control */
- pthread_mutex_t mutex;
+/* pthread_mutex_t mutex; */
+ rwlock_t lock; /* transaction lock */
MYSQL mysql;
MYSQL *db;
MYSQL_RES *result;
char *db_password;
int have_insert_id; /* do have insert_id() */
int connected;
- char *errmsg; /* nicely edited error message */
- char *cmd; /* SQL command string */
+ POOLMEM *errmsg; /* nicely edited error message */
+ POOLMEM *cmd; /* SQL command string */
+ POOLMEM *cached_path;
+ uint32_t cached_path_id;
} B_DB;
/* Change this each time there is some incompatible
* file format change!!!!
*/
-#define BDB_VERSION 8 /* file version number */
+#define BDB_VERSION 9 /* file version number */
struct s_control {
int bdb_version; /* Version number */
*/
typedef struct s_db {
BQUEUE bq; /* queue control */
- pthread_mutex_t mutex; /* single thread lock */
+/* pthread_mutex_t mutex; */ /* single thread lock */
+ rwlock_t lock; /* transaction lock */
int ref_count; /* number of times opened */
struct s_control control; /* control file structure */
int cfd; /* control file device */
FILE *clientfd; /* Client records fd */
FILE *filesetfd; /* FileSet records fd */
char *db_name; /* name of database */
- char *errmsg; /* nicely edited error message */
- char *cmd; /* Command string */
+ POOLMEM *errmsg; /* nicely edited error message */
+ POOLMEM *cmd; /* Command string */
+ POOLMEM *cached_path;
+ uint32_t cached_path_id;
} B_DB;
#endif /* HAVE_MYSQL */
} FILESET_DBR;
-
#include "protos.h"
-
#include "jcr.h"
-
+
#endif /* __SQL_H_ */