]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Add db_get_jobmedia_record() function
authorEric Bollengier <eric@baculasystems.com>
Tue, 12 Feb 2019 14:33:18 +0000 (15:33 +0100)
committerKern Sibbald <kern@sibbald.com>
Sat, 18 May 2019 14:06:02 +0000 (16:06 +0200)
bacula/src/cats/bdb.h
bacula/src/cats/cats.h
bacula/src/cats/protos.h
bacula/src/cats/sql_get.c

index 8761b746312051f1fefd332437d16056542a4c64..546fa6568056ddccab55c1ef9e68a8265cc4a306 100644 (file)
@@ -221,6 +221,7 @@ public:
    bool bdb_get_pool_record(JCR *jcr, POOL_DBR *pdbr);
    bool bdb_get_pool_numvols(JCR *jcr, POOL_DBR *pdbr);
    int bdb_get_client_record(JCR *jcr, CLIENT_DBR *cr);
+   bool bdb_get_jobmedia_record(JCR *jcr, JOBMEDIA_DBR *jmr);
    bool bdb_get_job_record(JCR *jcr, JOB_DBR *jr);
    int bdb_get_job_volume_names(JCR *jcr, JobId_t JobId, POOLMEM **VolumeNames);
    bool bdb_get_file_attributes_record(JCR *jcr, char *fname, JOB_DBR *jr, FILE_DBR *fdbr);
index 9801082f31e4338608628e9f1c12d14136b7202b..3e37918b7dc59cb736cdf224dc7d385838df095b 100644 (file)
@@ -183,6 +183,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 VolIndex;                 /* Volume seqence no. */
 };
 
 
index 3a541476b7b6eacd19b28839c135426291c3c25f..899b9197734ed2f8f3e6c8d3a7f0b965216d529c 100644 (file)
@@ -195,6 +195,8 @@ void bdb_free_restoreobject_record(JCR *jcr, ROBJECT_DBR *rr);
            mdb->bdb_get_pool_numvols(jcr, pdbr)
 #define db_get_client_record(jcr, mdb, cr) \
            mdb->bdb_get_client_record(jcr, cr)
+#define db_get_jobmedia_record(jcr, mdb, jmr)   \
+           mdb->bdb_get_jobmedia_record(jcr, jmr)
 #define db_get_job_record(jcr, mdb, jr) \
            mdb->bdb_get_job_record(jcr, jr)
 #define db_get_job_volume_names(jcr, mdb, JobId, VolumeNames) \
index 377f46b6f5e01fe64565c2c71bc671c7ac35367a..dfa014af3d395e436396e5e8a3e0427cb6b95622 100644 (file)
@@ -482,6 +482,59 @@ int BDB::bdb_get_job_volume_parameters(JCR *jcr, JobId_t JobId, VOL_PARAMS **Vol
 }
 
 
+/**
+ * Get JobMedia record
+ *  Returns: false on error or no JobMedia found
+ *           JobMedia in argument, use JobMediaId to find it
+ *
+ *  Returns: true on success
+ */
+bool BDB::bdb_get_jobmedia_record(JCR *jcr, JOBMEDIA_DBR *jmr)
+{
+   SQL_ROW row;
+   char ed1[50];
+
+   bdb_lock();
+   Mmsg(cmd,
+        "SELECT FirstIndex,LastIndex,StartFile,"
+        "EndFile,StartBlock,EndBlock,VolIndex, JobId, MediaId"
+        " FROM JobMedia WHERE JobMedia.JobMediaId=%s",
+        edit_int64(jmr->JobMediaId, ed1));
+
+   if (QueryDB(jcr, cmd)) {
+      Dmsg1(200, "Num rows=%d\n", sql_num_rows());
+      if (sql_num_rows() != 1) {
+         Mmsg1(errmsg, _("No JobMedia found for JobMediaId=%d\n"), jmr->JobMediaId);
+         sql_free_result();
+         bdb_unlock();
+         return false;
+      }
+
+      if ((row = sql_fetch_row()) == NULL) {
+         Mmsg1(errmsg, _("No JobMedia found for JobMediaId %d\n"),
+               edit_int64(jmr->JobMediaId, ed1));
+         sql_free_result();
+         bdb_unlock();
+         return false;                   /* failed */
+      }
+
+      jmr->FirstIndex = str_to_uint64(row[0]);
+      jmr->LastIndex = str_to_uint64(row[1]);
+      jmr->StartFile = str_to_int64(row[2]);
+      jmr->EndFile = str_to_int64(row[3]);
+      jmr->StartBlock = str_to_int64(row[4]);
+      jmr->EndBlock = str_to_int64(row[5]);
+      jmr->VolIndex = str_to_int64(row[6]);
+      jmr->JobId = str_to_int64(row[7]);
+      jmr->MediaId = str_to_int64(row[8]);
+      sql_free_result();
+      bdb_unlock();
+      return true;
+   }
+   return false;
+}
+
+
 
 /**
  * Get the number of pool records