X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fcats%2Fcats.h;h=9e0e5060c3241185d3d13a1814f61d32b105cc7f;hb=4c0d3aa12e80a948c8b1722910307011d75c8e48;hp=18790508757914f146ece987261ca582091bc61c;hpb=bcfa8efda1940e20d62f85409287ba78e0fef0d6;p=bacula%2Fbacula diff --git a/bacula/src/cats/cats.h b/bacula/src/cats/cats.h index 1879050875..9e0e5060c3 100644 --- a/bacula/src/cats/cats.h +++ b/bacula/src/cats/cats.h @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2010 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. @@ -38,7 +38,6 @@ * for the external world. This is control with * the define __SQL_C, which is defined only in sql.c * - * Version $Id$ */ /* @@ -73,7 +72,8 @@ enum { SQL_TYPE_MYSQL = 0, SQL_TYPE_POSTGRESQL = 1, SQL_TYPE_SQLITE = 2, - SQL_TYPE_SQLITE3 + SQL_TYPE_SQLITE3 = 3, + SQL_TYPE_INGRES = 4 }; @@ -87,8 +87,9 @@ typedef int (DB_RESULT_HANDLER)(void *, int, char **); #if defined(BUILDING_CATS) #ifdef HAVE_SQLITE +#error "SQLite2 is now deprecated, use SQLite3 instead." -#define BDB_VERSION 11 +#define BDB_VERSION 12 #include @@ -115,7 +116,7 @@ typedef struct s_sql_field { * S Q L I T E */ struct B_DB { - BQUEUE bq; /* queue control */ + dlink link; /* queue control */ brwlock_t lock; /* transaction lock */ struct sqlite *db; char **result; @@ -134,7 +135,6 @@ struct B_DB { char *db_password; int db_port; /* port for host name address */ bool connected; /* connection made to db */ - bool have_insert_id; /* do not have insert id */ bool fields_defined; /* set when fields defined */ char *sqlite_errmsg; /* error message returned by sqlite */ POOLMEM *errmsg; /* nicely edited error message */ @@ -159,27 +159,26 @@ struct B_DB { * * S Q L I T E */ -#define sql_store_result(x) (x)->result -#define sql_free_result(x) my_sqlite_free_table(x) -#define sql_fetch_row(x) my_sqlite_fetch_row(x) -#define sql_query(x, y) my_sqlite_query((x), (y)) +#define sql_store_result(x) (x)->result +#define sql_free_result(x) my_sqlite_free_table(x) +#define sql_fetch_row(x) my_sqlite_fetch_row(x) +#define sql_query(x, y) my_sqlite_query((x), (y)) +#define sql_insert_autokey_record(x, y, z) my_sqlite_insert_autokey_record((x), (y), (z)) #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) +#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 +#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_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_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_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) @@ -196,6 +195,7 @@ SQL_ROW my_sqlite_fetch_row(B_DB *mdb); int my_sqlite_query(B_DB *mdb, const char *cmd); void my_sqlite_field_seek(B_DB *mdb, int field); SQL_FIELD *my_sqlite_fetch_field(B_DB *mdb); +int my_sqlite_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name); extern const char* my_sqlite_batch_lock_query; extern const char* my_sqlite_batch_unlock_query; extern const char* my_sqlite_batch_fill_filename_query; @@ -210,7 +210,7 @@ extern const char* my_sqlite_batch_fill_path_query; #ifdef HAVE_SQLITE3 -#define BDB_VERSION 11 +#define BDB_VERSION 12 #include @@ -237,7 +237,7 @@ typedef struct s_sql_field { * S Q L I T E */ struct B_DB { - BQUEUE bq; /* queue control */ + dlink link; /* queue control */ brwlock_t lock; /* transaction lock */ struct sqlite3 *db; char **result; @@ -256,7 +256,6 @@ struct B_DB { char *db_password; int db_port; /* port for host name address */ bool connected; /* connection made to db */ - bool have_insert_id; /* do not have insert id */ bool fields_defined; /* set when fields defined */ char *sqlite_errmsg; /* error message returned by sqlite */ POOLMEM *errmsg; /* nicely edited error message */ @@ -292,24 +291,23 @@ struct B_DB { * * S Q L I T E 3 */ -#define sql_store_result(x) (x)->result -#define sql_free_result(x) my_sqlite_free_table(x) -#define sql_fetch_row(x) my_sqlite_fetch_row(x) -#define sql_query(x, y) my_sqlite_query((x), (y)) +#define sql_store_result(x) (x)->result +#define sql_free_result(x) my_sqlite_free_table(x) +#define sql_fetch_row(x) my_sqlite_fetch_row(x) +#define sql_query(x, y) my_sqlite_query((x), (y)) +#define sql_insert_autokey_record(x, y, z) my_sqlite_insert_autokey_record((x), (y), (z)) #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_close(x) sqlite3_close((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_close(x) sqlite_close((x)->db) #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) 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) +#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) 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) #define sql_batch_start(x,y) my_batch_start(x,y) #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) @@ -327,6 +325,7 @@ SQL_ROW my_sqlite_fetch_row(B_DB *mdb); int my_sqlite_query(B_DB *mdb, const char *cmd); void my_sqlite_field_seek(B_DB *mdb, int field); SQL_FIELD *my_sqlite_fetch_field(B_DB *mdb); +int my_sqlite_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name); extern const char* my_sqlite_batch_lock_query; extern const char* my_sqlite_batch_unlock_query; extern const char* my_sqlite_batch_fill_filename_query; @@ -337,7 +336,7 @@ extern const char* my_sqlite_batch_fill_path_query; #ifdef HAVE_MYSQL -#define BDB_VERSION 11 +#define BDB_VERSION 12 #include @@ -349,7 +348,7 @@ extern const char* my_sqlite_batch_fill_path_query; * M Y S Q L */ struct B_DB { - BQUEUE bq; /* queue control */ + dlink link; /* queue control */ brwlock_t lock; /* transaction lock */ MYSQL mysql; MYSQL *db; @@ -363,7 +362,6 @@ struct B_DB { char *db_address; /* host address */ char *db_socket; /* socket for local access */ int db_port; /* port of host address */ - int have_insert_id; /* do have insert_id() */ bool connected; POOLMEM *errmsg; /* nicely edited error message */ POOLMEM *cmd; /* SQL command string */ @@ -383,22 +381,22 @@ struct B_DB { #define DB_STATUS int /* "Generic" names for easier conversion */ -#define sql_store_result(x) mysql_store_result((x)->db) -#define sql_use_result(x) mysql_use_result((x)->db) -#define sql_free_result(x) my_mysql_free_result(x) -#define sql_fetch_row(x) mysql_fetch_row((x)->result) -#define sql_query(x, y) mysql_query((x)->db, (y)) -#define sql_strerror(x) mysql_error((x)->db) -#define sql_num_rows(x) mysql_num_rows((x)->result) -#define sql_data_seek(x, i) mysql_data_seek((x)->result, (i)) -#define sql_affected_rows(x) mysql_affected_rows((x)->db) -#define sql_insert_id(x,y) mysql_insert_id((x)->db) -#define sql_field_seek(x, y) mysql_field_seek((x)->result, (y)) -#define sql_fetch_field(x) mysql_fetch_field((x)->result) -#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_store_result(x) mysql_store_result((x)->db) +#define sql_use_result(x) mysql_use_result((x)->db) +#define sql_free_result(x) my_mysql_free_result(x) +#define sql_fetch_row(x) mysql_fetch_row((x)->result) +#define sql_query(x, y) mysql_query((x)->db, (y)) +#define sql_strerror(x) mysql_error((x)->db) +#define sql_num_rows(x) mysql_num_rows((x)->result) +#define sql_data_seek(x, i) mysql_data_seek((x)->result, (i)) +#define sql_affected_rows(x) mysql_affected_rows((x)->db) +#define sql_insert_autokey_record(x, y, z) my_mysql_insert_autokey_record((x), (y), (z)) +#define sql_field_seek(x, y) mysql_field_seek((x)->result, (y)) +#define sql_fetch_field(x) mysql_fetch_field((x)->result) +#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) @@ -416,12 +414,13 @@ extern const char* my_mysql_batch_unlock_tables_query; extern const char* my_mysql_batch_fill_filename_query; extern const char* my_mysql_batch_fill_path_query; extern void my_mysql_free_result(B_DB *mdb); +extern int my_mysql_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name); #else #ifdef HAVE_POSTGRESQL -#define BDB_VERSION 11 +#define BDB_VERSION 12 #include @@ -446,7 +445,7 @@ typedef struct pg_field { * P O S T G R E S Q L */ struct B_DB { - BQUEUE bq; /* queue control */ + dlink link; /* queue control */ brwlock_t lock; /* transaction lock */ PGconn *db; PGresult *result; @@ -466,7 +465,6 @@ struct B_DB { char *db_address; /* host address */ char *db_socket; /* socket for local access */ int db_port; /* port of host address */ - int have_insert_id; /* do have insert_id() */ bool connected; POOLMEM *errmsg; /* nicely edited error message */ POOLMEM *cmd; /* SQL command string */ @@ -488,7 +486,7 @@ void my_postgresql_free_result(B_DB *mdb); POSTGRESQL_ROW my_postgresql_fetch_row (B_DB *mdb); int my_postgresql_query (B_DB *mdb, const char *query); void my_postgresql_data_seek (B_DB *mdb, int row); -int my_postgresql_currval (B_DB *mdb, const char *table_name); +int my_postgresql_insert_autokey_record (B_DB *mdb, const char *query, const char *table_name); void my_postgresql_field_seek (B_DB *mdb, int row); POSTGRESQL_FIELD * my_postgresql_fetch_field(B_DB *mdb); @@ -514,7 +512,7 @@ extern const char* my_pg_batch_fill_path_query; #define sql_num_rows(x) ((unsigned) PQntuples((x)->result)) #define sql_data_seek(x, i) my_postgresql_data_seek((x), (i)) #define sql_affected_rows(x) ((unsigned) atoi(PQcmdTuples((x)->result))) -#define sql_insert_id(x,y) my_postgresql_currval((x), (y)) +#define sql_insert_autokey_record(x, y, z) my_postgresql_insert_autokey_record((x), (y), (z)) #define sql_field_seek(x, y) my_postgresql_field_seek((x), (y)) #define sql_fetch_field(x) my_postgresql_fetch_field(x) #define sql_num_fields(x) ((x)->num_fields) @@ -534,9 +532,119 @@ extern const char* my_pg_batch_fill_path_query; #else +#ifdef HAVE_INGRES + +#include "myingres.h" + +#define BDB_VERSION 12 + +/* TEMP: the following is taken from select OID, typname from pg_type; */ /*SRE: huh? */ +#define IS_NUM(x) ((x) == 20 || (x) == 21 || (x) == 23 || (x) == 700 || (x) == 701) +#define IS_NOT_NULL(x) ((x) == 1) + +typedef char **INGRES_ROW; + +/* + * This is the "real" definition that should only be + * used inside sql.c and associated database interface + * subroutines. + * + * I N G R E S + */ +struct B_DB { + dlink link; /* queue control */ + brwlock_t lock; /* transaction lock */ + INGconn *db; + INGresult *result; + int status; + INGRES_ROW row; + INGRES_FIELD *fields; + int num_rows; + int row_size; /* size of malloced rows */ + int num_fields; + int fields_size; /* size of malloced fields */ + int row_number; /* row number from my_ingres_data_seek */ + int field_number; /* field number from my_ingres_field_seek */ + int ref_count; + char *db_name; + char *db_user; + char *db_password; + char *db_address; /* host address */ + char *db_socket; /* socket for local access */ + int db_port; /* port of host address */ + int session_id; /* unique session id */ + bool connected; + POOLMEM *errmsg; /* nicely edited error message */ + POOLMEM *cmd; /* SQL command string */ + POOLMEM *cached_path; + int cached_path_len; /* length of cached path */ + uint32_t cached_path_id; + bool allow_transactions; /* transactions allowed */ + bool transaction; /* transaction started */ + int changes; /* changes made to db */ + POOLMEM *fname; /* Filename only */ + POOLMEM *path; /* Path only */ + POOLMEM *esc_name; /* Escaped file name */ + POOLMEM *esc_path; /* Escaped path name */ + alist *query_filters; /* Filters to convert sql queries into supported Ingres SQL */ + int fnl; /* file name length */ + int pnl; /* path name length */ +}; + +void my_ingres_free_result(B_DB *mdb); +INGRES_ROW my_ingres_fetch_row (B_DB *mdb); +int my_ingres_query (B_DB *mdb, const char *query); +void my_ingres_data_seek (B_DB *mdb, int row); +void my_ingres_field_seek (B_DB *mdb, int row); +INGRES_FIELD * my_ingres_fetch_field(B_DB *mdb); +void my_ingres_close (B_DB *mdb); +int my_ingres_insert_autokey_record (B_DB *mdb, const char *query, const char *table_name); + +bool my_ingres_batch_start(JCR *jcr, B_DB *mdb); +bool my_ingres_batch_end(JCR *jcr, B_DB *mdb, const char *error); +typedef struct ATTR_DBR ATTR_DBR; +bool my_ingres_batch_insert(JCR *jcr, B_DB *mdb, ATTR_DBR *ar); +char *my_ingres_copy_escape(char *dest, char *src, size_t len); + +extern const char* my_ingres_batch_lock_path_query; +extern const char* my_ingres_batch_lock_filename_query; +extern const char* my_ingres_batch_unlock_tables_query; +extern const char* my_ingres_batch_fill_filename_query; +extern const char* my_ingres_batch_fill_path_query; + +/* "Generic" names for easier conversion */ +#define sql_store_result(x) ((x)->result) +#define sql_free_result(x) my_ingres_free_result(x) +#define sql_fetch_row(x) my_ingres_fetch_row(x) +#define sql_query(x, y) my_ingres_query((x), (y)) +#define sql_close(x) my_ingres_close(x) +#define sql_strerror(x) INGerrorMessage((x)->db) +#define sql_num_rows(x) ((unsigned) INGntuples((x)->result)) +#define sql_data_seek(x, i) my_ingres_data_seek((x), (i)) +#define sql_affected_rows(x) ((x)->num_rows) +#define sql_insert_autokey_record(x, y, z) my_ingres_insert_autokey_record((x), (y), (z)) +#define sql_field_seek(x, y) my_ingres_field_seek((x), (y)) +#define sql_fetch_field(x) my_ingres_fetch_field(x) +#define sql_num_fields(x) ((x)->num_fields) + +#define sql_batch_start(x,y) my_ingres_batch_start(x,y) +#define sql_batch_end(x,y,z) my_ingres_batch_end(x,y,z) +#define sql_batch_insert(x,y,z) my_ingres_batch_insert(x,y,z) +#define sql_batch_lock_path_query my_ingres_batch_lock_path_query +#define sql_batch_lock_filename_query my_ingres_batch_lock_filename_query +#define sql_batch_unlock_tables_query my_ingres_batch_unlock_tables_query +#define sql_batch_fill_filename_query my_ingres_batch_fill_filename_query +#define sql_batch_fill_path_query my_ingres_batch_fill_path_query + +#define SQL_ROW INGRES_ROW +#define SQL_FIELD INGRES_FIELD +#define SQL_MATCH "~" + +#else + #ifdef HAVE_DBI -#define BDB_VERSION 11 +#define BDB_VERSION 12 #include @@ -556,7 +664,7 @@ typedef struct dbi_field { } DBI_FIELD; typedef struct dbi_field_get { - BQUEUE bq; + dlink link; char *value; } DBI_FIELD_GET; @@ -568,7 +676,7 @@ typedef struct dbi_field_get { * D B I */ struct B_DB { - BQUEUE bq; /* queue control */ + dlink link; /* queue control */ brwlock_t lock; /* transaction lock */ dbi_conn *db; dbi_result *result; @@ -593,7 +701,6 @@ struct B_DB { char *db_address; /* host address */ char *db_socket; /* socket for local access */ int db_port; /* port of host address */ - int have_insert_id; /* do have insert_id() */ bool connected; POOLMEM *errmsg; /* nicely edited error message */ POOLMEM *cmd; /* SQL command string */ @@ -621,7 +728,7 @@ const char * my_dbi_strerror (B_DB *mdb); int my_dbi_getisnull (dbi_result *result, int row_number, int column_number); char * my_dbi_getvalue (dbi_result *result, int row_number, unsigned int column_number); //int my_dbi_getvalue (dbi_result *result, int row_number, unsigned int column_number, char *value); -int my_dbi_sql_insert_id(B_DB *mdb, char *table_name); +int my_dbi_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name); int my_dbi_batch_start(JCR *jcr, B_DB *mdb); int my_dbi_batch_end(JCR *jcr, B_DB *mdb, const char *error); @@ -633,12 +740,12 @@ typedef int (*custom_function_insert_t)(void*, const char*, int); typedef char* (*custom_function_error_t)(void*); typedef int (*custom_function_end_t)(void*, const char*); -extern const char* my_dbi_batch_lock_path_query[4]; -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]; +extern const char* my_dbi_batch_lock_path_query[5]; +extern const char* my_dbi_batch_lock_filename_query[5]; +extern const char* my_dbi_batch_unlock_tables_query[5]; +extern const char* my_dbi_batch_fill_filename_query[5]; +extern const char* my_dbi_batch_fill_path_query[5]; +extern const char* my_dbi_match[5]; /* "Generic" names for easier conversion */ #define sql_store_result(x) (x)->result @@ -652,10 +759,10 @@ extern const char* my_dbi_match[4]; #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)) -#define sql_field_seek(x, y) my_dbi_field_seek((x), (y)) -#define sql_fetch_field(x) my_dbi_fetch_field(x) -#define sql_num_fields(x) ((x)->num_fields) +#define sql_insert_autokey_record(x, y, z) my_dbi_insert_autokey_record((x), (y), (z)) +#define sql_field_seek(x, y) my_dbi_field_seek((x), (y)) +#define sql_fetch_field(x) my_dbi_fetch_field(x) +#define sql_num_fields(x) ((x)->num_fields) #define sql_batch_start(x,y) my_dbi_batch_start(x,y) #define sql_batch_end(x,y,z) my_dbi_batch_end(x,y,z) #define sql_batch_insert(x,y,z) my_dbi_batch_insert(x,y,z) @@ -668,56 +775,11 @@ extern const char* my_dbi_match[4]; #define SQL_ROW DBI_ROW #define SQL_FIELD DBI_FIELD - -#else /* USE BACULA DB routines */ - -#define HAVE_BACULA_DB 1 - -/* Change this each time there is some incompatible - * file format change!!!! - */ -#define BDB_VERSION 13 /* file version number */ - -struct s_control { - int bdb_version; /* Version number */ - uint32_t JobId; /* next Job Id */ - uint32_t PoolId; /* next Pool Id */ - uint32_t MediaId; /* next Media Id */ - uint32_t JobMediaId; /* next JobMedia Id */ - uint32_t ClientId; /* next Client Id */ - uint32_t FileSetId; /* nest FileSet Id */ - time_t time; /* time file written */ -}; - - -/* This is the REAL definition for using the - * Bacula internal DB - */ -struct B_DB { - BQUEUE bq; /* queue control */ -/* pthread_mutex_t mutex; */ /* single thread lock */ - brwlock_t lock; /* transaction lock */ - int ref_count; /* number of times opened */ - struct s_control control; /* control file structure */ - int cfd; /* control file device */ - FILE *jobfd; /* Jobs records file descriptor */ - FILE *poolfd; /* Pool records fd */ - FILE *mediafd; /* Media records fd */ - FILE *jobmediafd; /* JobMedia records fd */ - FILE *clientfd; /* Client records fd */ - FILE *filesetfd; /* FileSet records fd */ - char *db_name; /* name of database */ - POOLMEM *errmsg; /* nicely edited error message */ - POOLMEM *cmd; /* Command string */ - POOLMEM *cached_path; - int cached_path_len; /* length of cached path */ - uint32_t cached_path_id; -}; - #endif /* HAVE_SQLITE3 */ #endif /* HAVE_MYSQL */ #endif /* HAVE_SQLITE */ #endif /* HAVE_POSTGRESQL */ +#endif /* HAVE_INGRES */ #endif /* HAVE_DBI */ #endif @@ -835,7 +897,7 @@ struct JOBMEDIA_DBR { uint32_t EndFile; /* End file on Volume */ uint32_t StartBlock; /* start block on tape */ uint32_t EndBlock; /* last block */ - uint32_t Copy; /* identical copy */ +// uint32_t Copy; /* identical copy */ }; @@ -866,6 +928,7 @@ struct ATTR_DBR { char *attr; /* attributes statp */ uint32_t FileIndex; uint32_t Stream; + uint32_t FileType; JobId_t JobId; DBId_t ClientId; DBId_t PathId; @@ -875,6 +938,20 @@ struct ATTR_DBR { int DigestType; }; +struct ROBJECT_DBR { + char *object_name; + char *object; + char *plugin_name; + uint32_t object_len; + uint32_t object_index; + int32_t object_compression; + uint32_t FileIndex; + uint32_t Stream; + uint32_t FileType; + JobId_t JobId; + DBId_t RestoreObjectId; +}; + /* File record -- same format as database */ struct FILE_DBR { @@ -1070,7 +1147,7 @@ private: /* * Exported globals from sql.c */ -extern int DLL_IMP_EXP db_type; /* SQL engine type index */ +extern int CATS_IMP_EXP db_type; /* SQL engine type index */ /* * Some functions exported by sql.c for use within the @@ -1080,6 +1157,7 @@ void list_result(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_t void list_dashes(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx); int get_sql_record_max(JCR *jcr, B_DB *mdb); bool check_tables_version(JCR *jcr, B_DB *mdb); +bool db_check_max_connections(JCR *jcr, B_DB *mdb, uint32_t nb); void _db_unlock(const char *file, int line, B_DB *mdb); void _db_lock(const char *file, int line, B_DB *mdb); const char *db_get_type(void);