From: Eric Bollengier Date: Tue, 12 Feb 2019 14:33:18 +0000 (+0100) Subject: Add db_get_jobmedia_record() function X-Git-Tag: Release-9.4.4~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=831b88a8ab5b029c8d0c6eedfef0547b8e81a82b;p=thirdparty%2Fbacula.git Add db_get_jobmedia_record() function --- diff --git a/bacula/src/cats/bdb.h b/bacula/src/cats/bdb.h index 8761b7463..546fa6568 100644 --- a/bacula/src/cats/bdb.h +++ b/bacula/src/cats/bdb.h @@ -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); diff --git a/bacula/src/cats/cats.h b/bacula/src/cats/cats.h index 9801082f3..3e37918b7 100644 --- a/bacula/src/cats/cats.h +++ b/bacula/src/cats/cats.h @@ -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. */ }; diff --git a/bacula/src/cats/protos.h b/bacula/src/cats/protos.h index 3a541476b..899b91977 100644 --- a/bacula/src/cats/protos.h +++ b/bacula/src/cats/protos.h @@ -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) \ diff --git a/bacula/src/cats/sql_get.c b/bacula/src/cats/sql_get.c index 377f46b6f..dfa014af3 100644 --- a/bacula/src/cats/sql_get.c +++ b/bacula/src/cats/sql_get.c @@ -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