2 * Bacula Catalog Database Update record interface routines
4 * Bacula Catalog Database routines written specifically
5 * for Bacula. Note, these routines are VERY dumb and
6 * do not provide all the functionality of an SQL database.
7 * The purpose of these routines is to ensure that Bacula
8 * can limp along if no real database is loaded on the
11 * Kern Sibbald, January MMI
18 Copyright (C) 2001-2006 Kern Sibbald
20 This program is free software; you can redistribute it and/or
21 modify it under the terms of the GNU General Public License
22 version 2 as amended with additional clauses defined in the
23 file LICENSE in the main source directory.
25 This program is distributed in the hope that it will be useful,
26 but WITHOUT ANY WARRANTY; without even the implied warranty of
27 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 the file LICENSE for additional details.
33 /* The following is necessary so that we do not include
34 * the dummy external definition of DB.
36 #define __SQL_C /* indicate that this is sql.c */
44 /* Forward referenced functions */
46 /* -----------------------------------------------------------------------
48 * Bacula specific defines and subroutines
50 * -----------------------------------------------------------------------
55 * This is called at Job start time to add the
56 * most current start fields to the job record.
57 * It is assumed that you did a db_create_job_record() already.
59 bool db_update_job_start_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr)
66 Dmsg0(200, "In db_update_job_start_record\n");
68 memcpy(&ojr, jr, len);
70 if (!db_get_job_record(jcr, mdb, &ojr)) {
76 fseek(mdb->jobfd, ojr.rec_addr, SEEK_SET);
77 if (fwrite(jr, len, 1, mdb->jobfd) != 1) {
78 Mmsg1(mdb->errmsg, _("Error updating DB Job file. ERR=%s\n"), strerror(errno));
88 * This is called at Job termination time to add all the
89 * other fields to the job record.
91 int db_update_job_end_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr)
98 Dmsg0(200, "In db_update_job_start_record\n");
100 memcpy(&ojr, jr, len);
102 if (!db_get_job_record(jcr, mdb, &ojr)) {
107 fseek(mdb->jobfd, ojr.rec_addr, SEEK_SET);
108 if (fwrite(jr, len, 1, mdb->jobfd) != 1) {
109 Mmsg1(&mdb->errmsg, _("Error updating DB Job file. ERR=%s\n"), strerror(errno));
119 int db_update_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr)
126 Dmsg0(200, "In db_update_media_record\n");
129 memcpy(&omr, mr, len);
131 if (!db_get_media_record(jcr, mdb, &omr)) {
137 /* Don't allow some fields to change by copying from master record */
138 strcpy(mr->VolumeName, omr.VolumeName);
139 strcpy(mr->MediaType, omr.MediaType);
140 mr->MediaId = omr.MediaId;
141 mr->PoolId = omr.PoolId;
142 mr->MaxVolBytes = omr.MaxVolBytes;
143 mr->VolCapacityBytes = omr.VolCapacityBytes;
144 mr->Recycle = omr.Recycle;
146 fseek(mdb->mediafd, omr.rec_addr, SEEK_SET);
147 if (fwrite(mr, len, 1, mdb->mediafd) != 1) {
148 Mmsg1(mdb->errmsg, _("Error updating DB Media file. ERR=%s\n"), strerror(errno));
151 fflush(mdb->mediafd);
157 int db_update_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pr)
164 Dmsg0(200, "In db_update_pool_record\n");
166 memcpy(&opr, pr, len);
168 if (!db_get_pool_record(jcr, mdb, &opr)) {
174 /* Update specific fields */
175 opr.NumVols = pr->NumVols;
176 opr.MaxVols = pr->MaxVols;
177 opr.UseOnce = pr->UseOnce;
178 opr.UseCatalog = pr->UseCatalog;
179 opr.AcceptAnyVolume = pr->AcceptAnyVolume;
180 strcpy(opr.LabelFormat, pr->LabelFormat);
182 fseek(mdb->poolfd, opr.rec_addr, SEEK_SET);
183 if (fwrite(&opr, len, 1, mdb->poolfd) != 1) {
184 Mmsg1(mdb->errmsg, _("Error updating DB Media file. ERR=%s\n"), strerror(errno));
187 memcpy(pr, &opr, len); /* return record written */
195 int db_add_digest_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *digest, int type)
200 int db_mark_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, JobId_t JobId)
205 int db_update_client_record(JCR *jcr, B_DB *mdb, CLIENT_DBR *cr)
210 int db_update_counter_record(JCR *jcr, B_DB *mdb, COUNTER_DBR *cr)
215 int db_update_media_defaults(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr)
221 #endif /* HAVE_BACULA_DB */