]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/cats.h
Merge branch 'master' of ssh://bacula.git.sourceforge.net/gitroot/bacula/bacula
[bacula/bacula] / bacula / src / cats / cats.h
index 3c761d7c9def0e272053e1853c9bdd692d3efc99..18790508757914f146ece987261ca582091bc61c 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2009 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -88,7 +88,7 @@ typedef int (DB_RESULT_HANDLER)(void *, int, char **);
 #if defined(BUILDING_CATS)
 #ifdef HAVE_SQLITE
 
-#define BDB_VERSION 10
+#define BDB_VERSION 11
 
 #include <sqlite.h>
 
@@ -166,18 +166,20 @@ struct B_DB {
 #ifdef HAVE_SQLITE3
 #define sql_insert_id(x,y)    sqlite3_last_insert_rowid((x)->db)
 #define sql_close(x)          sqlite3_close((x)->db)
+#define sql_affected_rows(x)  sqlite3_changes((x)->db)
 #else
 #define sql_insert_id(x,y)    sqlite_last_insert_rowid((x)->db)
 #define sql_close(x)          sqlite_close((x)->db)
+#define sql_affected_rows(x)  1
 #endif
 #define sql_strerror(x)       (x)->sqlite_errmsg?(x)->sqlite_errmsg:"unknown"
 #define sql_num_rows(x)       (x)->nrow
 #define sql_data_seek(x, i)   (x)->row = (i)
-#define sql_affected_rows(x)  1
 #define sql_field_seek(x, y)  my_sqlite_field_seek((x), (y))
 #define sql_fetch_field(x)    my_sqlite_fetch_field(x)
 #define sql_num_fields(x)     ((x)->ncolumn)
 #define SQL_ROW               char**
+#define SQL_MATCH             "MATCH"
 
 #define sql_batch_start(x,y)    my_batch_start(x,y)
 #define sql_batch_end(x,y,z)    my_batch_end(x,y,z)
@@ -208,7 +210,7 @@ extern const char* my_sqlite_batch_fill_path_query;
 #ifdef HAVE_SQLITE3
 
 
-#define BDB_VERSION 10
+#define BDB_VERSION 11
 
 #include <sqlite3.h>
 
@@ -304,7 +306,7 @@ struct B_DB {
 #define sql_strerror(x)       (x)->sqlite_errmsg?(x)->sqlite_errmsg:"unknown"
 #define sql_num_rows(x)       (x)->nrow
 #define sql_data_seek(x, i)   (x)->row = (i)
-#define sql_affected_rows(x)  1
+#define sql_affected_rows(x)  sqlite3_changes((x)->db)
 #define sql_field_seek(x, y)  my_sqlite_field_seek((x), (y))
 #define sql_fetch_field(x)    my_sqlite_fetch_field(x)
 #define sql_num_fields(x)     ((x)->ncolumn)
@@ -312,6 +314,7 @@ struct B_DB {
 #define sql_batch_end(x,y,z)    my_batch_end(x,y,z)
 #define sql_batch_insert(x,y,z) my_batch_insert(x,y,z)
 #define SQL_ROW               char**
+#define SQL_MATCH             "MATCH"
 #define sql_batch_lock_path_query       my_sqlite_batch_lock_query
 #define sql_batch_lock_filename_query   my_sqlite_batch_lock_query
 #define sql_batch_unlock_tables_query   my_sqlite_batch_unlock_query
@@ -334,7 +337,7 @@ extern const char* my_sqlite_batch_fill_path_query;
 
 #ifdef HAVE_MYSQL
 
-#define BDB_VERSION 10
+#define BDB_VERSION 11
 
 #include <mysql.h>
 
@@ -395,6 +398,7 @@ struct B_DB {
 #define sql_num_fields(x)     (int)mysql_num_fields((x)->result)
 #define SQL_ROW               MYSQL_ROW
 #define SQL_FIELD             MYSQL_FIELD
+#define SQL_MATCH             "MATCH"
 
 #define sql_batch_start(x,y)    my_batch_start(x,y)
 #define sql_batch_end(x,y,z)    my_batch_end(x,y,z)
@@ -417,7 +421,7 @@ extern void  my_mysql_free_result(B_DB *mdb);
 
 #ifdef HAVE_POSTGRESQL
 
-#define BDB_VERSION 10
+#define BDB_VERSION 11
 
 #include <libpq-fe.h>
 
@@ -526,12 +530,13 @@ extern const char* my_pg_batch_fill_path_query;
 
 #define SQL_ROW               POSTGRESQL_ROW
 #define SQL_FIELD             POSTGRESQL_FIELD
+#define SQL_MATCH             "~"
 
 #else
 
 #ifdef HAVE_DBI
 
-#define BDB_VERSION 10
+#define BDB_VERSION 11
 
 #include <dbi/dbi.h>
 
@@ -633,6 +638,7 @@ extern const char* my_dbi_batch_lock_filename_query[4];
 extern const char* my_dbi_batch_unlock_tables_query[4];
 extern const char* my_dbi_batch_fill_filename_query[4];
 extern const char* my_dbi_batch_fill_path_query[4];
+extern const char* my_dbi_match[4];
 
 /* "Generic" names for easier conversion */
 #define sql_store_result(x)   (x)->result
@@ -643,6 +649,7 @@ extern const char* my_dbi_batch_fill_path_query[4];
 #define sql_strerror(x)       my_dbi_strerror(x)
 #define sql_num_rows(x)       dbi_result_get_numrows((x)->result)
 #define sql_data_seek(x, i)   my_dbi_data_seek((x), (i))
+#define SQL_MATCH             my_dbi_match[db_type]
 /* #define sql_affected_rows(x)  dbi_result_get_numrows_affected((x)->result) */
 #define sql_affected_rows(x)  1
 #define sql_insert_id(x,y)    my_dbi_sql_insert_id((x), (y))
@@ -740,19 +747,6 @@ struct B_DB {
 
 extern uint32_t bacula_db_version;
 
-/*
- * These are the sizes of the current definitions of database
- *  Ids.  In general, FileId_t can be set to uint64_t and it
- *  *should* work.  Users have reported back that it does work
- *  for PostgreSQL.  For the other types, all places in Bacula
- *  have been converted, but no one has actually tested it.
- * In principle, the only field that really should need to be
- *  64 bits is the FileId_t
- */
-typedef uint32_t FileId_t;
-typedef uint32_t DBId_t;              /* general DB id type */
-typedef uint32_t JobId_t;
-
 #define faddr_t long
 
 /*
@@ -803,6 +797,7 @@ struct JOB_DBR {
    uint32_t JobErrors;
    uint32_t JobMissingFiles;
    uint64_t JobBytes;
+   uint64_t ReadBytes;
    int PurgedFiles;
    int HasBase;
 
@@ -852,11 +847,10 @@ struct VOL_PARAMS {
    uint32_t VolIndex;                 /* Volume seqence no. */
    uint32_t FirstIndex;               /* First index this Volume */
    uint32_t LastIndex;                /* Last index this Volume */
-   uint32_t StartFile;                /* File for start of data */
-   uint32_t EndFile;                  /* End file on Volume */
-   uint32_t StartBlock;               /* start block on tape */
-   uint32_t EndBlock;                 /* last block */
    int32_t Slot;                      /* Slot */
+   uint64_t StartAddr;                /* Start address */
+   uint64_t EndAddr;                  /* End address */
+   int32_t InChanger;                 /* InChanger flag */
 // uint32_t Copy;                     /* identical copy */
 // uint32_t Stripe;                   /* RAIT strip number */
 };
@@ -907,12 +901,14 @@ struct POOL_DBR {
    int32_t AcceptAnyVolume;           /* set to accept any volume sequence */
    int32_t AutoPrune;                 /* set to prune automatically */
    int32_t Recycle;                   /* default Vol recycle flag */
+   uint32_t ActionOnPurge;            /* action on purge, e.g. truncate the disk volume */
    utime_t  VolRetention;             /* retention period in seconds */
    utime_t  VolUseDuration;           /* time in secs volume can be used */
    uint32_t MaxVolJobs;               /* Max Jobs on Volume */
    uint32_t MaxVolFiles;              /* Max files on Volume */
    uint64_t MaxVolBytes;              /* Max bytes on Volume */
    DBId_t RecyclePoolId;              /* RecyclePool destination when media is purged */
+   DBId_t ScratchPoolId;              /* ScratchPool source when media is needed */
    char PoolType[MAX_NAME_LENGTH];
    char LabelFormat[MAX_NAME_LENGTH];
    /* Extra stuff not in DB */
@@ -981,6 +977,7 @@ struct MEDIA_DBR {
    uint64_t VolWriteTime;             /* time spent writing volume */
    utime_t  VolRetention;             /* Volume retention in seconds */
    utime_t  VolUseDuration;           /* time in secs volume can be used */
+   uint32_t ActionOnPurge;            /* action on purge, e.g. truncate the disk volume */
    uint32_t MaxVolJobs;               /* Max Jobs on Volume */
    uint32_t MaxVolFiles;              /* Max files on Volume */
    int32_t  Recycle;                  /* recycle yes/no */
@@ -1049,6 +1046,22 @@ struct db_int64_ctx {
    int count;                         /* number of values seen */
 };
 
+/* Call back context for getting a list of comma separated strings from the
+ * database 
+ */
+class db_list_ctx {
+public:
+   POOLMEM *list;                     /* list */
+   int count;                         /* number of values seen */
+
+   db_list_ctx() { list = get_pool_memory(PM_FNAME); *list = 0; count = 0; }
+   ~db_list_ctx() { free_pool_memory(list); list = NULL; }
+
+private:
+   db_list_ctx(const db_list_ctx&);            /* prohibit pass by value */
+   db_list_ctx &operator=(const db_list_ctx&); /* prohibit class assignment */
+};
+
 
 #include "protos.h"
 #include "jcr.h"