]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sql_list.c
don't use add_event() when flag "l" is not set
[bacula/bacula] / bacula / src / cats / sql_list.c
index 309e0db6b5709ec4c48d4ba8274c3a929b18a892..0090a25490602a0ddeb85ef19c6a895dd2206b7a 100644 (file)
@@ -81,21 +81,21 @@ void BDB::bdb_list_pool_records(JCR *jcr, POOL_DBR *pdbr,
          Mmsg(cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,"
             "AcceptAnyVolume,VolRetention,VolUseDuration,MaxVolJobs,MaxVolBytes,"
             "AutoPrune,Recycle,PoolType,LabelFormat,Enabled,ScratchPoolId,"
-            "RecyclePoolId,LabelType "
+            "RecyclePoolId,LabelType,ActionOnPurge,CacheRetention "
             " FROM Pool WHERE Name='%s'", esc);
       } else {
          Mmsg(cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,"
             "AcceptAnyVolume,VolRetention,VolUseDuration,MaxVolJobs,MaxVolBytes,"
             "AutoPrune,Recycle,PoolType,LabelFormat,Enabled,ScratchPoolId,"
-            "RecyclePoolId,LabelType "
+            "RecyclePoolId,LabelType,ActionOnPurge,CacheRetention "
             " FROM Pool ORDER BY PoolId");
       }
    } else {
       if (pdbr->Name[0] != 0) {
-         Mmsg(cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat "
+         Mmsg(cmd, "SELECT PoolId,Name,NumVols,MaxVols,MaxVolBytes,VolRetention,Enabled,PoolType,LabelFormat "
            "FROM Pool WHERE Name='%s'", esc);
       } else {
-         Mmsg(cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat "
+         Mmsg(cmd, "SELECT PoolId,Name,NumVols,MaxVols,MaxVolBytes,VolRetention,Enabled,PoolType,LabelFormat "
            "FROM Pool ORDER BY PoolId");
       }
    }
@@ -199,47 +199,71 @@ void BDB::bdb_list_media_records(JCR *jcr, MEDIA_DBR *mdbr,
 
    bdb_lock();
    bdb_escape_string(jcr, esc, mdbr->VolumeName, strlen(mdbr->VolumeName));
+   const char *join = "";
+   const char *where = "";
 
    if (type == VERT_LIST) {
       if (mdbr->VolumeName[0] != 0) {
          Mmsg(cmd, "SELECT MediaId,VolumeName,Slot,PoolId,"
             "MediaType,MediaTypeId,FirstWritten,LastWritten,LabelDate,VolJobs,"
-            "VolFiles,VolBlocks,VolMounts,VolBytes,VolABytes,VolAPadding,"
-            "VolHoleBytes,VolHoles,VolErrors,VolWrites,"
-            "VolCapacityBytes,VolStatus,Enabled,Recycle,VolRetention,"
-            "VolUseDuration,MaxVolJobs,MaxVolFiles,MaxVolBytes,InChanger,"
-            "EndFile,EndBlock,VolParts,LabelType,StorageId,DeviceId,"
+            "VolFiles,VolBlocks,VolParts,VolCloudParts,Media.CacheRetention,VolMounts,VolBytes,"
+            "VolABytes,VolAPadding,"
+            "VolHoleBytes,VolHoles,LastPartBytes,VolErrors,VolWrites,"
+            "VolCapacityBytes,VolStatus,Media.Enabled,Media.Recycle,Media.VolRetention,"
+            "Media.VolUseDuration,Media.MaxVolJobs,Media.MaxVolFiles,Media.MaxVolBytes,InChanger,"
+            "EndFile,EndBlock,VolType,Media.LabelType,StorageId,DeviceId,"
             "MediaAddressing,VolReadTime,VolWriteTime,"
-            "LocationId,RecycleCount,InitialWrite,ScratchPoolId,RecyclePoolId, "
-            "ActionOnPurge,%s AS ExpiresIn, Comment"
-            " FROM Media WHERE Media.VolumeName='%s'", expiresin, esc);
+            "LocationId,RecycleCount,InitialWrite,Media.ScratchPoolId,Media.RecyclePoolId, "
+            "Media.ActionOnPurge,%s AS ExpiresIn, Comment"
+           " FROM Media %s WHERE Media.VolumeName='%s' %s",
+              expiresin,
+              join,
+              esc,
+              where
+            );
       } else {
          Mmsg(cmd, "SELECT MediaId,VolumeName,Slot,PoolId,"
             "MediaType,MediaTypeId,FirstWritten,LastWritten,LabelDate,VolJobs,"
-            "VolFiles,VolBlocks,VolMounts,VolBytes,VolABytes,VolAPadding,"
-            "VolHoleBytes,VolHoles,VolErrors,VolWrites,"
-            "VolCapacityBytes,VolStatus,Enabled,Recycle,VolRetention,"
-            "VolUseDuration,MaxVolJobs,MaxVolFiles,MaxVolBytes,InChanger,"
-            "EndFile,EndBlock,VolParts,LabelType,StorageId,DeviceId,"
+            "VolFiles,VolBlocks,VolParts,VolCloudParts,Media.CacheRetention,VolMounts,VolBytes,"
+            "VolABytes,VolAPadding,"
+            "VolHoleBytes,VolHoles,LastPartBytes,VolErrors,VolWrites,"
+            "VolCapacityBytes,VolStatus,Media.Enabled,Media.Recycle,Media.VolRetention,"
+            "Media.VolUseDuration,Media.MaxVolJobs,Media.MaxVolFiles,Media.MaxVolBytes,InChanger,"
+            "EndFile,EndBlock,VolType,Media.LabelType,StorageId,DeviceId,"
             "MediaAddressing,VolReadTime,VolWriteTime,"
-            "LocationId,RecycleCount,InitialWrite,ScratchPoolId,RecyclePoolId, "
-            "ActionOnPurge,%s AS ExpiresIn, Comment"
-            " FROM Media WHERE Media.PoolId=%s ORDER BY MediaId",
-              expiresin, edit_int64(mdbr->PoolId, ed1));
+            "LocationId,RecycleCount,InitialWrite,Media.ScratchPoolId,Media.RecyclePoolId, "
+            "Media.ActionOnPurge,%s AS ExpiresIn, Comment"
+            " FROM Media %s WHERE Media.PoolId=%s %s ORDER BY MediaId",
+              expiresin,
+              join,
+              edit_int64(mdbr->PoolId, ed1),
+              where
+            );
       }
    } else {
       if (mdbr->VolumeName[0] != 0) {
-         Mmsg(cmd, "SELECT MediaId,VolumeName,VolStatus,Enabled,"
-            "VolBytes,VolFiles,VolRetention,Recycle,Slot,InChanger,MediaType,LastWritten,%s AS ExpiresIn "
-              "FROM Media WHERE Media.VolumeName='%s'", expiresin, esc);
+         Mmsg(cmd, "SELECT MediaId,VolumeName,VolStatus,Media.Enabled,"
+            "VolBytes,VolFiles,Media.VolRetention,Media.Recycle,Slot,InChanger,MediaType,VolType,"
+              "VolParts,%s AS ExpiresIn "
+              "FROM Media %s WHERE Media.VolumeName='%s' %s",
+              expiresin,
+              join,
+              esc,
+              where
+            );
       } else {
-         Mmsg(cmd, "SELECT MediaId,VolumeName,VolStatus,Enabled,"
-            "VolBytes,VolFiles,VolRetention,Recycle,Slot,InChanger,MediaType,LastWritten,%s AS ExpiresIn "
-            "FROM Media WHERE Media.PoolId=%s ORDER BY MediaId",
-              expiresin, edit_int64(mdbr->PoolId, ed1));
+         Mmsg(cmd, "SELECT MediaId,VolumeName,VolStatus,Media.Enabled,"
+            "VolBytes,VolFiles,Media.VolRetention,Media.Recycle,Slot,InChanger,MediaType,VolType,"
+            "VolParts,LastWritten,%s AS ExpiresIn "
+            "FROM Media %s WHERE Media.PoolId=%s %s ORDER BY MediaId",
+              expiresin,
+              join,
+              edit_int64(mdbr->PoolId, ed1),
+              where
+            );
       }
    }
-
+   Dmsg1(DT_SQL|50, "q=%s\n", cmd);
    if (!QueryDB(jcr, cmd)) {
       bdb_unlock();
       return;
@@ -257,30 +281,45 @@ void BDB::bdb_list_jobmedia_records(JCR *jcr, uint32_t JobId,
    char ed1[50];
 
    bdb_lock();
+   const char *join = "";
+   const char *where = "";
+
    if (type == VERT_LIST) {
       if (JobId > 0) {                   /* do by JobId */
          Mmsg(cmd, "SELECT JobMediaId,JobId,Media.MediaId,Media.VolumeName,"
             "FirstIndex,LastIndex,StartFile,JobMedia.EndFile,StartBlock,"
             "JobMedia.EndBlock "
-            "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId "
-            "AND JobMedia.JobId=%s", edit_int64(JobId, ed1));
+            "FROM JobMedia JOIN Media USING (MediaId) %s "
+            "WHERE JobMedia.JobId=%s %s",
+              join,
+              edit_int64(JobId, ed1),
+              where);
       } else {
          Mmsg(cmd, "SELECT JobMediaId,JobId,Media.MediaId,Media.VolumeName,"
             "FirstIndex,LastIndex,StartFile,JobMedia.EndFile,StartBlock,"
             "JobMedia.EndBlock "
-            "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId");
+            "FROM JobMedia JOIN Media USING (MediaId) %s %s",
+              join,
+              where);
       }
 
    } else {
       if (JobId > 0) {                   /* do by JobId */
          Mmsg(cmd, "SELECT JobId,Media.VolumeName,FirstIndex,LastIndex "
-            "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId "
-            "AND JobMedia.JobId=%s", edit_int64(JobId, ed1));
+            "FROM JobMedia JOIN Media USING (MediaId) %s WHERE "
+            "JobMedia.JobId=%s %s",
+              join,
+              edit_int64(JobId, ed1),
+              where);
       } else {
          Mmsg(cmd, "SELECT JobId,Media.VolumeName,FirstIndex,LastIndex "
-            "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId");
+              "FROM JobMedia JOIN Media USING (MediaId) %s %s",
+              join,
+              where);
       }
    }
+   Dmsg1(DT_SQL|50, "q=%s\n", cmd);
+
    if (!QueryDB(jcr, cmd)) {
       bdb_unlock();
       return;
@@ -396,40 +435,40 @@ alist *BDB::bdb_list_job_records(JCR *jcr, JOB_DBR *jr, DB_LIST_HANDLER *sendit,
    }
    if (jr->Name[0]) {
       bdb_escape_string(jcr, esc, jr->Name, strlen(jr->Name));
-      Mmsg(tmp, " Name='%s' ", esc);
+      Mmsg(tmp, " Job.Name='%s' ", esc);
       append_filter(where, tmp);
 
    } else if (jr->JobId != 0) {
-      Mmsg(tmp, " JobId=%s ", edit_int64(jr->JobId, ed1));
+      Mmsg(tmp, " Job.JobId=%s ", edit_int64(jr->JobId, ed1));
       append_filter(where, tmp);
 
    } else if (jr->Job[0] != 0) {
       bdb_escape_string(jcr, esc, jr->Job, strlen(jr->Job));
-      Mmsg(tmp, " Job='%s' ", esc);
+      Mmsg(tmp, " Job.Job='%s' ", esc);
       append_filter(where, tmp);
    }
 
    if (type == INCOMPLETE_JOBS && jr->JobStatus == JS_FatalError) {
-      Mmsg(tmp, " JobStatus IN ('E', 'f') ");
+      Mmsg(tmp, " Job.JobStatus IN ('E', 'f') ");
       append_filter(where, tmp);
 
    } else if (jr->JobStatus) {
-      Mmsg(tmp, " JobStatus='%c' ", jr->JobStatus);
+      Mmsg(tmp, " Job.JobStatus='%c' ", jr->JobStatus);
       append_filter(where, tmp);
    }
 
    if (jr->JobType) {
-      Mmsg(tmp, " Type='%c' ", jr->JobType);
+      Mmsg(tmp, " Job.Type='%c' ", jr->JobType);
       append_filter(where, tmp);
    }
 
    if (jr->JobErrors > 0) {
-      Mmsg(tmp, " JobErrors > 0 ");
+      Mmsg(tmp, " Job.JobErrors > 0 ");
       append_filter(where, tmp);
    }
 
    if (jr->ClientId > 0) {
-      Mmsg(tmp, " ClientId=%s ", edit_int64(jr->ClientId, ed1));
+      Mmsg(tmp, " Job.ClientId=%s ", edit_int64(jr->ClientId, ed1));
       append_filter(where, tmp);
    }
 
@@ -440,7 +479,7 @@ alist *BDB::bdb_list_job_records(JCR *jcr, JOB_DBR *jr, DB_LIST_HANDLER *sendit,
            "Job.ClientId,Client.Name as ClientName,JobStatus,SchedTime,"
            "StartTime,EndTime,RealEndTime,JobTDate,"
            "VolSessionId,VolSessionTime,JobFiles,JobBytes,ReadBytes,JobErrors,"
-           "JobMissingFiles,Job.PoolId,Pool.Name as PooLname,PriorJobId,"
+           "JobMissingFiles,Job.PoolId,Pool.Name as PoolName,PriorJobId,"
            "Job.FileSetId,FileSet.FileSet,Job.HasBase,Job.HasCache,Job.Comment "
            "FROM Job JOIN Client USING (ClientId) LEFT JOIN Pool USING (PoolId) "
            "LEFT JOIN FileSet USING (FileSetId) %s "
@@ -460,12 +499,11 @@ alist *BDB::bdb_list_job_records(JCR *jcr, JOB_DBR *jr, DB_LIST_HANDLER *sendit,
    default:
       break;
    }
-   Dmsg1(100, "SQL: %s\n", cmd);
 
    free_pool_memory(tmp);
    free_pool_memory(where);
 
-   Dmsg1(000, "cmd: %s\n", cmd);
+   Dmsg1(100, "SQL: %s\n", cmd);
    if (!QueryDB(jcr, cmd)) {
       bdb_unlock();
       return NULL;
@@ -521,11 +559,27 @@ void BDB::bdb_list_job_totals(JCR *jcr, JOB_DBR *jr, DB_LIST_HANDLER *sendit, vo
    bdb_unlock();
 }
 
-void BDB::bdb_list_files_for_job(JCR *jcr, JobId_t jobid, DB_LIST_HANDLER *sendit, void *ctx)
+/* List all file records from a job
+ * "deleted" values are described just below
+ */
+void BDB::bdb_list_files_for_job(JCR *jcr, JobId_t jobid, int deleted, DB_LIST_HANDLER *sendit, void *ctx)
 {
    char ed1[50];
+   const char *opt;
    LIST_CTX lctx(jcr, this, sendit, ctx, HORZ_LIST);
 
+   switch (deleted) {
+   case 0:                      /* Show only actual files */
+      opt = " AND FileIndex <> 0 ";
+      break;
+   case 1:                      /* Show only deleted files */
+      opt = " AND FileIndex = 0 ";
+      break;
+   default:                     /* Show everything */
+      opt = "";
+      break;
+   }
+
    bdb_lock();
 
    /*
@@ -533,7 +587,7 @@ void BDB::bdb_list_files_for_job(JCR *jcr, JobId_t jobid, DB_LIST_HANDLER *sendi
     */
    if (bdb_get_type_index() == SQL_TYPE_MYSQL) {
       Mmsg(cmd, "SELECT CONCAT(Path.Path,Filename.Name) AS Filename "
-           "FROM (SELECT PathId, FilenameId FROM File WHERE JobId=%s "
+           "FROM (SELECT PathId, FilenameId FROM File WHERE JobId=%s %s "
                   "UNION ALL "
                  "SELECT PathId, FilenameId "
                    "FROM BaseFiles JOIN File "
@@ -542,10 +596,10 @@ void BDB::bdb_list_files_for_job(JCR *jcr, JobId_t jobid, DB_LIST_HANDLER *sendi
            ") AS F, Filename,Path "
            "WHERE Filename.FilenameId=F.FilenameId "
            "AND Path.PathId=F.PathId",
-           edit_int64(jobid, ed1), ed1);
+           edit_int64(jobid, ed1), opt, ed1);
    } else {
       Mmsg(cmd, "SELECT Path.Path||Filename.Name AS Filename "
-           "FROM (SELECT PathId, FilenameId FROM File WHERE JobId=%s "
+           "FROM (SELECT PathId, FilenameId FROM File WHERE JobId=%s %s "
                   "UNION ALL "
                  "SELECT PathId, FilenameId "
                    "FROM BaseFiles JOIN File "
@@ -554,9 +608,9 @@ void BDB::bdb_list_files_for_job(JCR *jcr, JobId_t jobid, DB_LIST_HANDLER *sendi
            ") AS F, Filename,Path "
            "WHERE Filename.FilenameId=F.FilenameId "
            "AND Path.PathId=F.PathId",
-           edit_int64(jobid, ed1), ed1);
+           edit_int64(jobid, ed1), opt, ed1);
    }
-
+   Dmsg1(100, "q=%s\n", cmd);
    if (!bdb_big_sql_query(cmd, list_result, &lctx)) {
        bdb_unlock();
        return;
@@ -579,17 +633,19 @@ void BDB::bdb_list_base_files_for_job(JCR *jcr, JobId_t jobid, DB_LIST_HANDLER *
     * Stupid MySQL is NON-STANDARD !
     */
    if (bdb_get_type_index() == SQL_TYPE_MYSQL) {
-      Mmsg(cmd, "SELECT CONCAT(Path.Path,File.Filename) AS Filename "
-           "FROM BaseFiles, File, Path "
+      Mmsg(cmd, "SELECT CONCAT(Path.Path,Filename.Name) AS Filename "
+           "FROM BaseFiles, File, Filename, Path "
            "WHERE BaseFiles.JobId=%s AND BaseFiles.BaseJobId = File.JobId "
            "AND BaseFiles.FileId = File.FileId "
+           "AND Filename.FilenameId=File.FilenameId "
            "AND Path.PathId=File.PathId",
          edit_int64(jobid, ed1));
    } else {
-      Mmsg(cmd, "SELECT Path.Path||File.Filename AS Filename "
-           "FROM BaseFiles, File, Path "
+      Mmsg(cmd, "SELECT Path.Path||Filename.Name AS Filename "
+           "FROM BaseFiles, File, Filename, Path "
            "WHERE BaseFiles.JobId=%s AND BaseFiles.BaseJobId = File.JobId "
            "AND BaseFiles.FileId = File.FileId "
+           "AND Filename.FilenameId=File.FilenameId "
            "AND Path.PathId=File.PathId",
            edit_int64(jobid, ed1));
    }