+ * Returns: false on failure
+ * true on success
+ */
+bool db_get_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr)
+{
+ SQL_ROW row;
+ bool ok = false;
+ char ed1[50];
+
+ db_lock(mdb);
+ if (pdbr->PoolId != 0) { /* find by id */
+ Mmsg(mdb->cmd,
+"SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,AcceptAnyVolume,"
+"AutoPrune,Recycle,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,"
+"MaxVolBytes,PoolType,LabelType,LabelFormat,RecyclePoolId FROM Pool WHERE Pool.PoolId=%s",
+ edit_int64(pdbr->PoolId, ed1));
+ } else { /* find by name */
+ Mmsg(mdb->cmd,
+"SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,AcceptAnyVolume,"
+"AutoPrune,Recycle,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,"
+"MaxVolBytes,PoolType,LabelType,LabelFormat,RecyclePoolId FROM Pool WHERE Pool.Name='%s'",
+ pdbr->Name);
+ }
+
+ if (QUERY_DB(jcr, mdb, mdb->cmd)) {
+ mdb->num_rows = sql_num_rows(mdb);
+ if (mdb->num_rows > 1) {
+ char ed1[30];
+ Mmsg1(mdb->errmsg, _("More than one Pool!: %s\n"),
+ edit_uint64(mdb->num_rows, ed1));
+ Jmsg(jcr, M_ERROR, 0, "%s", mdb->errmsg);
+ } else if (mdb->num_rows == 1) {
+ if ((row = sql_fetch_row(mdb)) == NULL) {
+ Mmsg1(mdb->errmsg, _("error fetching row: %s\n"), sql_strerror(mdb));
+ Jmsg(jcr, M_ERROR, 0, "%s", mdb->errmsg);
+ } else {
+ pdbr->PoolId = str_to_int64(row[0]);
+ bstrncpy(pdbr->Name, row[1]!=NULL?row[1]:"", sizeof(pdbr->Name));
+ pdbr->NumVols = str_to_int64(row[2]);
+ pdbr->MaxVols = str_to_int64(row[3]);
+ pdbr->UseOnce = str_to_int64(row[4]);
+ pdbr->UseCatalog = str_to_int64(row[5]);
+ pdbr->AcceptAnyVolume = str_to_int64(row[6]);
+ pdbr->AutoPrune = str_to_int64(row[7]);
+ pdbr->Recycle = str_to_int64(row[8]);
+ pdbr->VolRetention = str_to_int64(row[9]);
+ pdbr->VolUseDuration = str_to_int64(row[10]);
+ pdbr->MaxVolJobs = str_to_int64(row[11]);
+ pdbr->MaxVolFiles = str_to_int64(row[12]);
+ pdbr->MaxVolBytes = str_to_uint64(row[13]);
+ bstrncpy(pdbr->PoolType, row[14]!=NULL?row[14]:"", sizeof(pdbr->PoolType));
+ pdbr->LabelType = str_to_int64(row[15]);
+ bstrncpy(pdbr->LabelFormat, row[16]!=NULL?row[16]:"", sizeof(pdbr->LabelFormat));
+ pdbr->RecyclePoolId = str_to_int64(row[17]);
+ ok = true;
+ }
+ }
+ sql_free_result(mdb);
+ }
+ if (ok) {
+ uint32_t NumVols;
+ Mmsg(mdb->cmd, "SELECT count(*) from Media WHERE PoolId=%s",
+ edit_int64(pdbr->PoolId, ed1));
+ NumVols = get_sql_record_max(jcr, mdb);
+ Dmsg2(400, "Actual NumVols=%d Pool NumVols=%d\n", NumVols, pdbr->NumVols);
+ if (NumVols != pdbr->NumVols) {
+ pdbr->NumVols = NumVols;
+ db_update_pool_record(jcr, mdb, pdbr);
+ }
+ } else {
+ Mmsg(mdb->errmsg, _("Pool record not found in Catalog.\n"));
+ }
+ db_unlock(mdb);
+ return ok;
+}
+
+/* Get Client Record
+ * If the ClientId is non-zero, we get its record,
+ * otherwise, we search on the Client Name
+ *