1 /* 2 Bacula(R) - The Network Backup Solution 3 4 Copyright (C) 2000-2020 Kern Sibbald 5 6 The original author of Bacula is Kern Sibbald, with contributions 7 from many others, a complete list can be found in the file AUTHORS. 8 9 You may use this file and others of this release according to the 10 license defined in the LICENSE file, which includes the Affero General 11 Public License, v3.0 ("AGPLv3") and some additional permissions and 12 terms pursuant to its AGPLv3 Section 7. 13 14 This notice must be preserved when any source code is 15 conveyed and/or propagated. 16 17 Bacula(R) is a registered trademark of Kern Sibbald. 18 */ 19 /* 20 * 21 * Database routines that are exported by the cats library for 22 * use elsewhere in Bacula (mainly the Director). 23 * 24 * Note: the interface that is used by the core Bacula code outside 25 * of the cats directory has names that are: 26 * db_xxx(x, db, y, ...) 27 * usually with a database pointer such as db as an argument. 28 * This simplifies the vast bulk of the code and makes it easier to read. 29 * These are translated into class calls on the db pointer by a #define 30 * in this file. 31 * 32 * The actual class code is named bdb_xxx(x, y, ...) and is called with 33 * the class pointer such as db->bdb_xxx(x, y, ...) The code in this 34 * cats directory can use the db_xxx() calls or the db->bdb_xxx() calls. 35 * In the Bacula core code we prefer using only the db_xxx() calls. 36 * 37 * Written by Kern Sibbald, MM 38 */ 39 40 #ifndef __SQL_PROTOS_H 41 #define __SQL_PROTOS_H 42 43 #include "cats.h" 44 45 BDB *db_init_database(JCR *jcr, const char *db_driver, const char *db_name, 46 const char *db_user, const char *db_password, 47 const char *db_address, int db_port, 48 const char *db_socket, 49 const char *db_ssl_mode, const char *db_ssl_key, 50 const char *db_ssl_cert, const char *db_ssl_ca, 51 const char *db_ssl_capath, const char *db_ssl_cipher, 52 bool mult_db_connections, bool disable_batch_insert); 53 54 /* Database prototypes and defines */ 55 56 /* Misc */ 57 #define db_lock(mdb) \ 58 mdb->bdb_lock(__FILE__, __LINE__) 59 #define db_unlock(mdb) \ 60 mdb->bdb_unlock() 61 62 63 /* Virtual methods */ 64 #define db_escape_string(jcr, mdb, snew, old, len) \ 65 mdb->bdb_escape_string(jcr, snew, old, len) 66 #define db_escape_object(jcr, mdb, old, len) \ 67 mdb->bdb_escape_object(jcr, old, len) 68 #define db_unescape_object(jcr, mdb, from, expected_len, dest, len) \ 69 mdb->bdb_unescape_object(jcr, from, expected_len, dest, len) 70 #define db_open_database(jcr, mdb) \ 71 mdb->bdb_open_database(jcr) 72 #define db_close_database(jcr, mdb) \ 73 mdb->bdb_close_database(jcr) 74 #define db_close_database(jcr, mdb) \ 75 mdb->bdb_close_database(jcr) 76 #define db_start_transaction(jcr, mdb) \ 77 mdb->bdb_start_transaction(jcr) 78 #define db_end_transaction(jcr, mdb) \ 79 if (mdb) mdb->bdb_end_transaction(jcr) 80 #define db_sql_query(mdb, query, result_handler, ctx) \ 81 mdb->bdb_sql_query(query, result_handler, ctx) 82 #define db_thread_cleanup(mdb) \ 83 if (mdb) mdb->bdb_thread_cleanup() 84 85 /* sql.c */ 86 int db_int64_handler(void *ctx, int num_fields, char **row); 87 int db_strtime_handler(void *ctx, int num_fields, char **row); 88 int db_list_handler(void *ctx, int num_fields, char **row); 89 int db_string_list_handler(void *ctx, int num_fields, char **row); 90 int db_int_handler(void *ctx, int num_fields, char **row); 91 void bdb_debug_print(JCR *jcr, FILE *fp); 92 void db_free_restoreobject_record(JCR *jcr, ROBJECT_DBR *rr); 93 94 #define db_open_batch_connexion(jcr, mdb) \ 95 mdb->bdb_open_batch_connexion(jcr) 96 #define db_strerror(mdb) \ 97 mdb->bdb_strerror() 98 #define db_debug_print(jcr, fp) \ 99 bdb_debug_print(jcr, fp) 100 #define db_check_max_connections(jcr, mdb, maxc) \ 101 mdb->bdb_check_max_connections(jcr, maxc) 102 103 /* sql_create.c */ 104 bool bdb_write_batch_file_records(JCR *jcr); 105 void bdb_disable_batch_insert(bool disable); 106 107 /* sql_get.c */ 108 void bdb_free_restoreobject_record(JCR *jcr, ROBJECT_DBR *rr); 109 #define db_get_client_pool(jcr, mdb, results) \ 110 mdb->bdb_get_client_pool(jcr, results) 111 112 /* sql_create.c */ 113 #define db_create_path_record(jcr, mdb, ar) \ 114 mdb->bdb_create_path_record(jcr, ar) 115 #define db_create_file_attributes_record(jcr, mdb, ar) \ 116 mdb->bdb_create_file_attributes_record(jcr, ar) 117 #define db_create_job_record(jcr, mdb, jr) \ 118 mdb->bdb_create_job_record(jcr, jr) 119 #define db_create_media_record(jcr, mdb, media_dbr) \ 120 mdb->bdb_create_media_record(jcr, media_dbr) 121 #define db_create_client_record(jcr, mdb, cr) \ 122 mdb->bdb_create_client_record(jcr, cr) 123 #define db_create_fileset_record(jcr, mdb, fsr) \ 124 mdb->bdb_create_fileset_record(jcr, fsr) 125 #define db_create_pool_record(jcr, mdb, pool_dbr) \ 126 mdb->bdb_create_pool_record(jcr, pool_dbr) 127 #define db_create_jobmedia_record(jcr, mdb, jr) \ 128 mdb->bdb_create_jobmedia_record(jcr, jr) 129 #define db_create_counter_record(jcr, mdb, cr) \ 130 mdb->bdb_create_counter_record(jcr, cr) 131 #define db_create_device_record(jcr, mdb, dr) \ 132 mdb->bdb_create_device_record(jcr, dr) 133 #define db_create_storage_record(jcr, mdb, sr) \ 134 mdb->bdb_create_storage_record(jcr, sr) 135 #define db_create_mediatype_record(jcr, mdb, mr) \ 136 mdb->bdb_create_mediatype_record(jcr, mr) 137 #define db_write_batch_file_records(jcr) \ 138 bdb_write_batch_file_records(jcr) 139 #define db_create_attributes_record(jcr, mdb, ar) \ 140 mdb->bdb_create_attributes_record(jcr, ar) 141 #define db_create_restore_object_record(jcr, mdb, ar) \ 142 mdb->bdb_create_restore_object_record(jcr, ar) 143 #define db_create_base_file_attributes_record(jcr, mdb, ar) \ 144 mdb->bdb_create_base_file_attributes_record(jcr, ar) 145 #define db_commit_base_file_attributes_record(jcr, mdb) \ 146 mdb->bdb_commit_base_file_attributes_record(jcr) 147 #define db_create_base_file_list(jcr, mdb, jobids) \ 148 mdb->bdb_create_base_file_list(jcr, jobids) 149 #define db_disable_batch_insert(disable) \ 150 bdb_disable_batch_insert(disable) 151 #define db_create_snapshot_record(jcr, mdb, sr) \ 152 mdb->bdb_create_snapshot_record(jcr, sr) 153 #define db_get_job_statistics(jcr, mdb, jr) \ 154 mdb->bdb_get_job_statistics(jcr, jr) 155 156 /* sql_delete.c */ 157 #define db_delete_pool_record(jcr, mdb, pool_dbr) \ 158 mdb->bdb_delete_pool_record(jcr, pool_dbr) 159 #define db_delete_media_record(jcr, mdb, mr) \ 160 mdb->bdb_delete_media_record(jcr, mr) 161 #define db_purge_media_record(jcr, mdb, mr) \ 162 mdb->bdb_purge_media_record(jcr, mr) 163 #define db_delete_snapshot_record(jcr, mdb, sr) \ 164 mdb->bdb_delete_snapshot_record(jcr, sr) 165 #define db_delete_client_record(jcr, mdb, cr) \ 166 mdb->bdb_delete_client_record(jcr, cr) 167 168 169 /* sql_find.c */ 170 #define db_find_last_job_end_time(jcr, mdb, jr, etime, job) \ 171 mdb->bdb_find_last_job_end_time(jcr, jr, etime, job) 172 #define db_find_last_job_start_time(jcr, mdb, jr, stime, job, JobLevel) \ 173 mdb->bdb_find_last_job_start_time(jcr, jr, stime, job, JobLevel) 174 #define db_find_job_start_time(jcr, mdb, jr, stime, job) \ 175 mdb->bdb_find_job_start_time(jcr, jr, stime, job) 176 #define db_find_last_jobid(jcr, mdb, Name, jr) \ 177 mdb->bdb_find_last_jobid(jcr, Name, jr) 178 #define db_find_next_volume(jcr, mdb, index, InChanger, mr) \ 179 mdb->bdb_find_next_volume(jcr, index, InChanger, mr) 180 #define db_find_failed_job_since(jcr, mdb, jr, stime, JobLevel) \ 181 mdb->bdb_find_failed_job_since(jcr, jr, stime, JobLevel) 182 183 /* sql_get.c */ 184 #define db_get_volume_jobids(jcr, mdb, mr, lst) \ 185 mdb->bdb_get_volume_jobids(jcr, mr, lst) 186 #define db_get_client_jobids(jcr, mdb, cr, lst) \ 187 mdb->bdb_get_client_jobids(jcr, cr, lst) 188 #define db_get_base_file_list(jcr, mdb, use_md5, result_handler, ctx) \ 189 mdb->bdb_get_base_file_list(jcr, use_md5, result_handler, ctx) 190 #define db_get_path_record(jcr, mdb) \ 191 mdb->bdb_get_path_record(jcr) 192 #define db_get_pool_record(jcr, mdb, pdbr) \ 193 mdb->bdb_get_pool_record(jcr, pdbr) 194 #define db_get_pool_numvols(jcr, mdb, pdbr) \ 195 mdb->bdb_get_pool_numvols(jcr, pdbr) 196 #define db_get_client_record(jcr, mdb, cr) \ 197 mdb->bdb_get_client_record(jcr, cr) 198 #define db_get_jobmedia_record(jcr, mdb, jmr) \ 199 mdb->bdb_get_jobmedia_record(jcr, jmr) 200 #define db_get_job_record(jcr, mdb, jr) \ 201 mdb->bdb_get_job_record(jcr, jr) 202 #define db_get_job_volume_names(jcr, mdb, JobId, VolumeNames) \ 203 mdb->bdb_get_job_volume_names(jcr, JobId, VolumeNames) 204 #define db_get_file_attributes_record(jcr, mdb, fname, jr, fdbr) \ 205 mdb->bdb_get_file_attributes_record(jcr, fname, jr, fdbr) 206 #define db_get_fileset_record(jcr, mdb, fsr) \ 207 mdb->bdb_get_fileset_record(jcr, fsr) 208 #define db_get_media_record(jcr, mdb, mr) \ 209 mdb->bdb_get_media_record(jcr, mr) 210 #define db_get_num_media_records(jcr, mdb) \ 211 mdb->bdb_get_num_media_records(jcr) 212 #define db_get_num_pool_records(jcr, mdb) \ 213 mdb->bdb_get_num_pool_records(jcr) 214 #define db_get_pool_ids(jcr, mdb, num_ids, ids) \ 215 mdb->bdb_get_pool_ids(jcr, num_ids, ids) 216 #define db_get_client_ids(jcr, mdb, num_ids, ids) \ 217 mdb->bdb_get_client_ids(jcr, num_ids, ids) 218 #define db_get_media_ids(jcr, mdb, mr, num_ids, ids) \ 219 mdb->bdb_get_media_ids(jcr, mr, num_ids, ids) 220 #define db_get_job_volume_parameters(jcr, mdb, JobId, VolParams) \ 221 mdb->bdb_get_job_volume_parameters(jcr, JobId, VolParams) 222 #define db_get_counter_record(jcr, mdb, cr) \ 223 mdb->bdb_get_counter_record(jcr, cr) 224 #define db_get_query_dbids(jcr, mdb, query, ids) \ 225 mdb->bdb_get_query_dbids(jcr, query, ids) 226 #define db_get_file_list(jcr, mdb, jobids, opts, result_handler, ctx) \ 227 mdb->bdb_get_file_list(jcr, jobids, opts, result_handler, ctx) 228 #define db_get_base_jobid(jcr, mdb, jr, jobid) \ 229 mdb->bdb_get_base_jobid(jcr, jr, jobid) 230 #define db_get_accurate_jobids(jcr, mdb, jr, jobids) \ 231 mdb->bdb_get_accurate_jobids(jcr, jr, jobids) 232 #define db_get_used_base_jobids(jcr, mdb, jobids, result) \ 233 mdb->bdb_get_used_base_jobids(jcr, jobids, result) 234 #define db_get_restoreobject_record(jcr, mdb, rr) \ 235 mdb->bdb_get_restoreobject_record(jcr, rr) 236 #define db_get_type_index(mdb) \ 237 mdb->bdb_get_type_index() 238 #define db_get_engine_name(mdb) \ 239 mdb->bdb_get_engine_name() 240 #define db_get_snapshot_record(jcr, mdb, sr) \ 241 mdb->bdb_get_snapshot_record(jcr, sr) 242 243 /* sql_list.c */ 244 #define db_list_pool_records(jcr, mdb, pr, sendit, ctx, type) \ 245 mdb->bdb_list_pool_records(jcr, pr, sendit, ctx, type) 246 #define db_list_job_records(jcr, mdb, jr, sendit, ctx, type) \ 247 mdb->bdb_list_job_records(jcr, jr, sendit, ctx, type) 248 #define db_list_job_totals(jcr, mdb, jr, sendit, ctx) \ 249 mdb->bdb_list_job_totals(jcr, jr, sendit, ctx) 250 #define db_list_files_for_job(jcr, mdb, jobid, deleted, sendit, ctx) \ 251 mdb->bdb_list_files_for_job(jcr, jobid, deleted, sendit, ctx) 252 #define db_list_media_records(jcr, mdb, mdbr, sendit, ctx, type) \ 253 mdb->bdb_list_media_records(jcr, mdbr, sendit, ctx, type) 254 #define db_list_jobmedia_records(jcr, mdb, JobId, sendit, ctx, type) \ 255 mdb->bdb_list_jobmedia_records(jcr, JobId, sendit, ctx, type) 256 #define db_list_joblog_records(jcr, mdb, JobId, sendit, ctx, type) \ 257 mdb->bdb_list_joblog_records(jcr, JobId, sendit, ctx, type) 258 #define db_list_sql_query(jcr, mdb, query, sendit, ctx, verbose, type) \ 259 mdb->bdb_list_sql_query(jcr, query, sendit, ctx, verbose, type) 260 #define db_list_client_records(jcr, mdb, sendit, ctx, type) \ 261 mdb->bdb_list_client_records(jcr, sendit, ctx, type) 262 #define db_list_copies_records(jcr, mdb, limit, jobids, sendit, ctx, type) \ 263 mdb->bdb_list_copies_records(jcr, limit, jobids, sendit, ctx, type) 264 #define db_list_base_files_for_job(jcr, mdb, jobid, sendit, ctx) \ 265 mdb->bdb_list_base_files_for_job(jcr, jobid, sendit, ctx) 266 #define db_list_restore_objects(jcr, mdb, rr, sendit, ctx, type) \ 267 mdb->bdb_list_restore_objects(jcr, rr, sendit, ctx, type) 268 #define db_list_snapshot_records(jcr, mdb, snapdbr, sendit, ua, llist) \ 269 mdb->bdb_list_snapshot_records(jcr, snapdbr, sendit, ua, llist) 270 271 272 273 /* sql_update.c */ 274 #define db_update_job_start_record(jcr, mdb, jr) \ 275 mdb->bdb_update_job_start_record(jcr, jr) 276 #define db_update_job_end_record(jcr, mdb, jr) \ 277 mdb->bdb_update_job_end_record(jcr, jr) 278 #define db_update_client_record(jcr, mdb, cr) \ 279 mdb->bdb_update_client_record(jcr, cr) 280 #define db_update_pool_record(jcr, mdb, pr) \ 281 mdb->bdb_update_pool_record(jcr, pr) 282 #define db_update_storage_record(jcr, mdb, sr) \ 283 mdb->bdb_update_storage_record(jcr, sr) 284 #define db_update_media_record(jcr, mdb, mr) \ 285 mdb->bdb_update_media_record(jcr, mr) 286 #define db_update_media_defaults(jcr, mdb, mr) \ 287 mdb->bdb_update_media_defaults(jcr, mr) 288 #define db_update_counter_record(jcr, mdb, cr) \ 289 mdb->bdb_update_counter_record(jcr, cr) 290 #define db_add_digest_to_file_record(jcr, mdb, FileId, digest, type) \ 291 mdb->bdb_add_digest_to_file_record(jcr, FileId, digest, type) 292 #define db_mark_file_record(jcr, mdb, FileId, JobId) \ 293 mdb->bdb_mark_file_record(jcr, FileId, JobId) 294 #define db_make_inchanger_unique(jcr, mdb, mr) \ 295 mdb->bdb_make_inchanger_unique(jcr, mr) 296 #define db_update_stats(jcr, mdb, age) \ 297 mdb->bdb_update_stats(jcr, age) 298 #define db_update_snapshot_record(jcr, mdb, sr) \ 299 mdb->bdb_update_snapshot_record(jcr, sr) 300 301 302 #endif /* __SQL_PROTOS_H */ 303