]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sql_cmds.c
Document FT_DELETED FileIndex=0 special value in database Schema
[bacula/bacula] / bacula / src / cats / sql_cmds.c
index 26b97440512f7276ecead3fd81ba524afd24e16e..476ba63d75821beeba237b79a5b6dfc316aad9b4 100644 (file)
 #include "bacula.h"
 #include "cats.h"
 
+const char *cleanup_created_job =
+   "UPDATE Job SET JobStatus='f', StartTime=SchedTime, EndTime=SchedTime "
+   "WHERE JobStatus = 'C'";
+const char *cleanup_running_job = 
+   "UPDATE Job SET JobStatus='f', EndTime=StartTime WHERE JobStatus = 'R'";
+
+/* For sql_update.c db_update_stats */
+const char *fill_jobhisto =
+        "INSERT INTO JobHisto (" 
+           "JobId, Job, Name, Type, Level, ClientId, JobStatus, "
+           "SchedTime, StartTime, EndTime, RealEndTime, JobTDate, "
+           "VolSessionId, VolSessionTime, JobFiles, JobBytes, ReadBytes, "
+           "JobErrors, JobMissingFiles, PoolId, FileSetId, PriorJobId, "
+           "PurgedFiles, HasBase ) "
+        "SELECT " 
+           "JobId, Job, Name, Type, Level, ClientId, JobStatus, "
+           "SchedTime, StartTime, EndTime, RealEndTime, JobTDate, "
+           "VolSessionId, VolSessionTime, JobFiles, JobBytes, ReadBytes, "
+           "JobErrors, JobMissingFiles, PoolId, FileSetId, PriorJobId, "
+           "PurgedFiles, HasBase "
+          "FROM Job "
+         "WHERE JobStatus IN ('T','W','f','A','E') "
+           "AND JobId NOT IN (SELECT JobId FROM JobHisto) "
+           "AND JobTDate < %s ";
+
 /* For ua_update.c */
 const char *list_pool = "SELECT * FROM Pool WHERE PoolId=%s";
 
@@ -55,7 +80,7 @@ const char *client_backups =
    " WHERE Client.Name='%s'"
    " AND FileSet='%s'"
    " AND Client.ClientId=Job.ClientId"
-   " AND JobStatus='T' AND Type='B'" 
+   " AND JobStatus IN ('T','W') AND Type='B'" 
    " AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId"
    " AND Job.FileSetId=FileSet.FileSetId"
    " ORDER BY Job.StartTime";
@@ -119,10 +144,10 @@ const char *select_backup_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
    "WHERE (Job.JobTDate<%s AND ((DelCandidates.JobFiles=0) OR "
-   "(DelCandidates.JobStatus!='T'))) OR "
+   "(DelCandidates.JobStatus NOT IN ('T','W')))) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
-   "AND Job.Level='F' AND Job.JobStatus='T' AND Job.Type IN ('B','M') "
+   "AND Job.Level='F' AND Job.JobStatus IN ('T','W') AND Job.Type IN ('B','M') "
    "AND Job.FileSetId=DelCandidates.FileSetId)";
 
 /* Select Jobs from the DelCandidates table that have a
@@ -132,10 +157,10 @@ const char *select_backup_del =
 const char *select_verify_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
-   "AND Job.Type='V' AND Job.Level='V' AND Job.JobStatus='T' "
+   "AND Job.Type='V' AND Job.Level='V' AND Job.JobStatus IN ('T','W') "
    "AND Job.FileSetId=DelCandidates.FileSetId)";
 
 
@@ -145,7 +170,7 @@ const char *select_verify_del =
 const char *select_restore_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
    "AND Job.Type='R')";
@@ -156,7 +181,7 @@ const char *select_restore_del =
 const char *select_admin_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
    "AND Job.Type='D')";
@@ -168,7 +193,7 @@ const char *select_admin_del =
 const char *select_migrate_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
    "AND Job.Type='g')";
@@ -180,7 +205,7 @@ const char *select_migrate_del =
 const char *select_copy_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobTdate<%s AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
    "AND Job.Type='C')";
@@ -192,10 +217,10 @@ const char *select_backup_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
    "WHERE (Job.JobId=DelCandidates.JobId AND ((DelCandidates.JobFiles=0) OR "
-   "(DelCandidates.JobStatus!='T'))) OR "
+   "(DelCandidates.JobStatus NOT IN ('T','W')))) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
-   "AND Job.Level='F' AND Job.JobStatus='T' AND Job.Type IN ('B','M') "
+   "AND Job.Level='F' AND Job.JobStatus IN ('T','W') AND Job.Type IN ('B','M') "
    "AND Job.FileSetId=DelCandidates.FileSetId)";
 
 /* Select Jobs from the DelCandidates table that have a
@@ -205,10 +230,10 @@ const char *select_backup_del =
 const char *select_verify_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
-   "AND Job.Type='V' AND Job.Level='V' AND Job.JobStatus='T' "
+   "AND Job.Type='V' AND Job.Level='V' AND Job.JobStatus IN ('T','W') "
    "AND Job.FileSetId=DelCandidates.FileSetId)";
 
 
@@ -218,7 +243,7 @@ const char *select_verify_del =
 const char *select_restore_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
    "AND Job.Type='R')";
@@ -229,7 +254,7 @@ const char *select_restore_del =
 const char *select_admin_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
    "AND Job.Type='D')";
@@ -241,7 +266,7 @@ const char *select_admin_del =
 const char *select_migrate_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
    "AND Job.Type='g')";
@@ -249,7 +274,7 @@ const char *select_migrate_del =
 const char *select_copy_del =
    "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles "
    "FROM Job,DelCandidates "
-   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus!='T') OR "
+   "WHERE (Job.JobId=DelCandidates.JobId AND DelCandidates.JobStatus NOT IN ('T','W')) OR "
    "(Job.JobTDate>%s "
    "AND Job.ClientId=%s "
    "AND Job.Type='C')";
@@ -265,7 +290,7 @@ const char *uar_count_files =
 const char *uar_list_jobs =
    "SELECT JobId,Client.Name as Client,StartTime,Level as "
    "JobLevel,JobFiles,JobBytes "
-   "FROM Client,Job WHERE Client.ClientId=Job.ClientId AND JobStatus='T' "
+   "FROM Client,Job WHERE Client.ClientId=Job.ClientId AND JobStatus IN ('T','W') "
    "AND Type='B' ORDER BY StartTime DESC LIMIT 20";
 
 /*
@@ -286,7 +311,7 @@ const char *uar_last_full =
    "FROM Client,Job,JobMedia,Media,FileSet WHERE Client.ClientId=%s "
    "AND Job.ClientId=%s "
    "AND Job.StartTime<'%s' "
-   "AND Level='F' AND JobStatus='T' "
+   "AND Level='F' AND JobStatus IN ('T','W') AND Type='B' "
    "AND JobMedia.JobId=Job.JobId "
    "AND Media.Enabled=1 "
    "AND JobMedia.MediaId=Media.MediaId "
@@ -297,14 +322,13 @@ const char *uar_last_full =
 
 const char *uar_full =
    "INSERT INTO temp SELECT Job.JobId,Job.JobTDate,"
-     "Job.ClientId,Job.Level,Job.JobFiles,Job.JobBytes,"
-     "StartTime,VolumeName,JobMedia.StartFile,VolSessionId,VolSessionTime "
-    "FROM temp1,Job,JobMedia,Media "
-   "WHERE temp1.JobId=Job.JobId "
-     "AND Level='F' AND JobStatus='T' "
-     "AND Media.Enabled=1 "
-     "AND JobMedia.JobId=Job.JobId "
-     "AND JobMedia.MediaId=Media.MediaId";
+   "Job.ClientId,Job.Level,Job.JobFiles,Job.JobBytes,"
+   "StartTime,VolumeName,JobMedia.StartFile,VolSessionId,VolSessionTime "
+   "FROM temp1,Job,JobMedia,Media WHERE temp1.JobId=Job.JobId "
+   "AND Level='F' AND JobStatus IN ('T','W') AND Type='B' "
+   "AND Media.Enabled=1 "
+   "AND JobMedia.JobId=Job.JobId "
+   "AND JobMedia.MediaId=Media.MediaId";
 
 const char *uar_dif =
    "INSERT INTO temp SELECT Job.JobId,Job.JobTDate,Job.ClientId,"
@@ -317,7 +341,7 @@ const char *uar_dif =
    "AND JobMedia.JobId=Job.JobId "
    "AND Media.Enabled=1 "
    "AND JobMedia.MediaId=Media.MediaId "
-   "AND Job.Level='D' AND JobStatus='T' "
+   "AND Job.Level='D' AND JobStatus IN ('T','W') AND Type='B' "
    "AND Job.FileSetId=FileSet.FileSetId "
    "AND FileSet.FileSet='%s' "
    "%s"
@@ -334,7 +358,7 @@ const char *uar_inc =
    "AND Media.Enabled=1 "
    "AND JobMedia.JobId=Job.JobId "
    "AND JobMedia.MediaId=Media.MediaId "
-   "AND Job.Level='I' AND JobStatus='T' "
+   "AND Job.Level='I' AND JobStatus IN ('T','W') AND Type='B' "
    "AND Job.FileSetId=FileSet.FileSetId "
    "AND FileSet.FileSet='%s' "
    "%s";
@@ -380,6 +404,7 @@ const char *uar_jobid_fileindex =
    "AND Job.ClientId=Client.ClientId "
    "AND Path.PathId=File.PathId "
    "AND Filename.FilenameId=File.FilenameId "
+   "AND JobStatus IN ('T','W') AND Type='B' "
    "ORDER BY Job.StartTime DESC LIMIT 1";
 
 const char *uar_jobids_fileindex =
@@ -462,7 +487,7 @@ const char *uar_file[4] = {
    "StartTime,Type as JobType,JobStatus,JobFiles,JobBytes "
    "FROM Client,Job,File,Filename,Path WHERE Client.Name='%s' "
    "AND Client.ClientId=Job.ClientId "
-   "AND Job.JobId=File.JobId "
+   "AND Job.JobId=File.JobId AND File.FileIndex > 0 "
    "AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId "
    "AND Filename.Name='%s' ORDER BY StartTime DESC LIMIT 20",
    /* Postgresql */
@@ -471,7 +496,7 @@ const char *uar_file[4] = {
    "StartTime,Type as JobType,JobStatus,JobFiles,JobBytes "
    "FROM Client,Job,File,Filename,Path WHERE Client.Name='%s' "
    "AND Client.ClientId=Job.ClientId "
-   "AND Job.JobId=File.JobId "
+   "AND Job.JobId=File.JobId AND File.FileIndex > 0 "
    "AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId "
    "AND Filename.Name='%s' ORDER BY StartTime DESC LIMIT 20",
    /* SQLite */
@@ -480,7 +505,7 @@ const char *uar_file[4] = {
    "StartTime,Type as JobType,JobStatus,JobFiles,JobBytes "
    "FROM Client,Job,File,Filename,Path WHERE Client.Name='%s' "
    "AND Client.ClientId=Job.ClientId "
-   "AND Job.JobId=File.JobId "
+   "AND Job.JobId=File.JobId AND File.FileIndex > 0 "
    "AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId "
    "AND Filename.Name='%s' ORDER BY StartTime DESC LIMIT 20",
    /* SQLite3 */
@@ -489,7 +514,7 @@ const char *uar_file[4] = {
    "StartTime,Type as JobType,JobStatus,JobFiles,JobBytes "
    "FROM Client,Job,File,Filename,Path WHERE Client.Name='%s' "
    "AND Client.ClientId=Job.ClientId "
-   "AND Job.JobId=File.JobId "
+   "AND Job.JobId=File.JobId AND File.FileIndex > 0 "
    "AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId "
    "AND Filename.Name='%s' ORDER BY StartTime DESC LIMIT 20"};