X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fsql_cmds.c;h=6ba94f151c74fff24151f074d3d1b5d9ef9ea1ca;hb=cc4be3a7c0b43ad093d008707277de22ddffc4a3;hp=7dd223fd8796c834e5263c46daa61acbe67e25cc;hpb=e0ccfdebe72875815e48f3588865fe5764ef0feb;p=bacula%2Fbacula diff --git a/bacula/src/dird/sql_cmds.c b/bacula/src/dird/sql_cmds.c index 7dd223fd87..6ba94f151c 100644 --- a/bacula/src/dird/sql_cmds.c +++ b/bacula/src/dird/sql_cmds.c @@ -8,7 +8,7 @@ */ /* - Copyright (C) 2002 Kern Sibbald and John Walker + Copyright (C) 2002-2004 Kern Sibbald and John Walker This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -30,6 +30,9 @@ #include "bacula.h" #include "dird.h" +/* For ua_cmds.c */ +char *list_pool = "SELECT * FROM Pool WHERE PoolId=%u"; + /* ====== ua_prune.c */ char *cnt_File = "SELECT count(*) FROM File WHERE JobId=%u"; @@ -44,7 +47,7 @@ char *sel_JobMedia = "SELECT JobId FROM JobMedia WHERE MediaId=%u"; /* Select JobIds for File deletion. */ char *select_job = "SELECT JobId from Job " - "WHERE JobTDate < %s " + "WHERE JobTDate<%s " "AND ClientId=%u " "AND PurgedFiles=0"; @@ -54,62 +57,89 @@ char *drop_deltabs[] = { "DROP INDEX DelInx1", NULL}; + /* List of SQL commands to create temp table and indicies */ char *create_deltabs[] = { "CREATE TABLE DelCandidates (" +#ifdef HAVE_MYSQL + "JobId INTEGER UNSIGNED NOT NULL, " + "PurgedFiles TINYINT, " + "FileSetId INTEGER UNSIGNED, " + "JobFiles INTEGER UNSIGNED, " + "JobStatus BINARY(1))", +#else +#ifdef HAVE_POSTGRESQL + "JobId INTEGER NOT NULL, " + "PurgedFiles SMALLINT, " + "FileSetId INTEGER, " + "JobFiles INTEGER, " + "JobStatus char(1))", +#else "JobId INTEGER UNSIGNED NOT NULL, " "PurgedFiles TINYINT, " - "FileSetId INTEGER UNSIGNED)", + "FileSetId INTEGER UNSIGNED, " + "JobFiles INTEGER UNSIGNED, " + "JobStatus CHAR)", +#endif +#endif "CREATE INDEX DelInx1 ON DelCandidates (JobId)", NULL}; -/* Fill candidates table with all Files subject to being deleted. +/* Fill candidates table with all Jobs subject to being deleted. * This is used for pruning Jobs (first the files, then the Jobs). */ char *insert_delcand = "INSERT INTO DelCandidates " - "SELECT JobId, PurgedFiles, FileSetId FROM Job " - "WHERE JobTDate < %s " + "SELECT JobId,PurgedFiles,FileSetId,JobFiles,JobStatus FROM Job " + "WHERE Type='%c' " + "AND JobTDate<%s " "AND ClientId=%u"; -/* Select files from the DelCandidates table that have a +/* Select Jobs from the DelCandidates table that have a * more recent backup -- i.e. are not the only backup. - * This is the list of files to delete for a Backup Job. + * This is the list of Jobs to delete for a Backup Job. + * At the same time, we select "orphanned" jobs + * (i.e. no files, ...) for deletion. */ char *select_backup_del = "SELECT DelCandidates.JobId " "FROM Job,DelCandidates " - "WHERE Job.JobTDate >= %s " + "WHERE (JobTDate<%s AND ((DelCandidates.JobFiles=0) OR " + "(DelCandidates.JobStatus!='T'))) OR " + "(Job.JobTDate>%s " "AND Job.ClientId=%u " - "AND Job.JobType='B' " + "AND Job.Type='B' " "AND Job.Level='F' " "AND Job.JobStatus='T' " - "AND Job.FileSetId=DelCandidates.FileSetId"; + "AND Job.FileSetId=DelCandidates.FileSetId) " + "GROUP BY DelCandidates.JobId"; -/* Select files from the DelCandidates table that have a +/* Select Jobs from the DelCandidates table that have a * more recent InitCatalog -- i.e. are not the only InitCatalog - * This is the list of files to delete for a Verify Job. + * This is the list of Jobs to delete for a Verify Job. */ char *select_verify_del = "SELECT DelCandidates.JobId " "FROM Job,DelCandidates " - "WHERE Job.JobTDate >= %s " + "WHERE Job.JobTDate>%s " "AND Job.ClientId=%u " - "AND Job.JobType='V' " + "AND Job.Type='V' " "AND Job.Level='V' " "AND Job.JobStatus='T' " - "AND Job.FileSetId=DelCandidates.FileSetId"; + "AND Job.FileSetId=DelCandidates.FileSetId " + "GROUP BY DelCandidates.JobId"; -/* Select files from the DelCandidates table. - * This is the list of files to delete for a Restore Job. +/* Select Jobs from the DelCandidates table. + * This is the list of Jobs to delete for a Restore Job. */ char *select_restore_del = "SELECT DelCandidates.JobId " "FROM Job,DelCandidates " - "WHERE Job.JobTDate >= %s " + "WHERE Job.JobTDate>%s " "AND Job.ClientId=%u " - "AND Job.JobType='R'"; + "AND Job.Type='R' " + "GROUP BY DelCandidates.JobId"; @@ -117,10 +147,10 @@ char *select_restore_del = /* List last 20 Jobs */ char *uar_list_jobs = - "SELECT JobId,Client.Name as Client,StartTime,Type as " - "JobType,JobFiles,JobBytes " + "SELECT JobId,Client.Name as Client,StartTime,Level as " + "JobLevel,JobFiles,JobBytes " "FROM Client,Job WHERE Client.ClientId=Job.ClientId AND JobStatus='T' " - "AND Type='B' LIMIT 20"; + "AND Type='B' ORDER BY StartTime DESC LIMIT 20"; #ifdef HAVE_MYSQL /* MYSQL IS NOT STANDARD SQL !!!!! */ @@ -147,16 +177,29 @@ char *uar_file = char *uar_sel_files = - "SELECT Path.Path,Filename.Name,FileIndex,JobId " + "SELECT Path.Path,Filename.Name,FileIndex,JobId,LStat " "FROM File,Filename,Path " - "WHERE File.JobId=%d AND Filename.FilenameId=File.FilenameId " + "WHERE File.JobId=%u AND Filename.FilenameId=File.FilenameId " "AND Path.PathId=File.PathId"; char *uar_del_temp = "DROP TABLE temp"; char *uar_del_temp1 = "DROP TABLE temp1"; char *uar_create_temp = - "CREATE TABLE temp (JobId INTEGER UNSIGNED NOT NULL," + "CREATE TABLE temp (" +#ifdef HAVE_POSTGRESQL + "JobId INTEGER NOT NULL," + "JobTDate BIGINT," + "ClientId INTEGER," + "Level CHAR," + "JobFiles INTEGER," + "StartTime TEXT," + "VolumeName TEXT," + "StartFile INTEGER," + "VolSessionId INTEGER," + "VolSessionTime INTEGER)"; +#else + "JobId INTEGER UNSIGNED NOT NULL," "JobTDate BIGINT UNSIGNED," "ClientId INTEGER UNSIGNED," "Level CHAR," @@ -166,19 +209,29 @@ char *uar_create_temp = "StartFile INTEGER UNSIGNED," "VolSessionId INTEGER UNSIGNED," "VolSessionTime INTEGER UNSIGNED)"; +#endif char *uar_create_temp1 = - "CREATE TABLE temp1 (JobId INTEGER UNSIGNED NOT NULL," + "CREATE TABLE temp1 (" +#ifdef HAVE_POSTGRESQL + "JobId INTEGER NOT NULL," + "JobTDate BIGINT)"; +#else + "JobId INTEGER UNSIGNED NOT NULL," "JobTDate BIGINT UNSIGNED)"; +#endif char *uar_last_full = "INSERT INTO temp1 SELECT Job.JobId,JobTdate " - "FROM Client,Job,JobMedia,Media WHERE Client.ClientId=%u " + "FROM Client,Job,JobMedia,Media,FileSet WHERE Client.ClientId=%u " "AND Job.ClientId=%u " + "AND Job.StartTime<'%s' " "AND Level='F' AND JobStatus='T' " "AND JobMedia.JobId=Job.JobId " "AND JobMedia.MediaId=Media.MediaId " - "AND Job.FileSetId=%u " + "AND Job.FileSetId=FileSet.FileSetId " + "AND FileSet.FileSet='%s' " + "%s" "ORDER BY Job.JobTDate DESC LIMIT 1"; char *uar_full = @@ -190,34 +243,70 @@ char *uar_full = "AND JobMedia.JobId=Job.JobId " "AND JobMedia.MediaId=Media.MediaId"; +char *uar_dif = + "INSERT INTO temp SELECT Job.JobId,Job.JobTDate,Job.ClientId," + "Job.Level,Job.JobFiles,Job.StartTime,Media.VolumeName,JobMedia.StartFile," + "Job.VolSessionId,Job.VolSessionTime " + "FROM Job,JobMedia,Media,FileSet " + "WHERE Job.JobTDate>%s AND Job.StartTime<'%s' " + "AND Job.ClientId=%u " + "AND JobMedia.JobId=Job.JobId " + "AND JobMedia.MediaId=Media.MediaId " + "AND Job.Level='D' AND JobStatus='T' " + "AND Job.FileSetId=FileSet.FileSetId " + "AND FileSet.FileSet='%s' " + "%s" + "ORDER BY Job.JobTDate DESC LIMIT 1"; + char *uar_inc = "INSERT INTO temp SELECT Job.JobId,Job.JobTDate,Job.ClientId," "Job.Level,Job.JobFiles,Job.StartTime,Media.VolumeName,JobMedia.StartFile," "Job.VolSessionId,Job.VolSessionTime " - "FROM Job,JobMedia,Media " - "WHERE Job.JobTDate>%s AND Job.ClientId=%u " + "FROM Job,JobMedia,Media,FileSet " + "WHERE Job.JobTDate>%s AND Job.StartTime<'%s' " + "AND Job.ClientId=%u " "AND JobMedia.JobId=Job.JobId " "AND JobMedia.MediaId=Media.MediaId " - "AND Job.Level IN ('I', 'D') AND JobStatus='T' " - "AND Job.FileSetId=%u " - "GROUP BY Job.JobId"; + "AND Job.Level='I' AND JobStatus='T' " + "AND Job.FileSetId=FileSet.FileSetId " + "AND FileSet.FileSet='%s' " + "%s"; char *uar_list_temp = "SELECT JobId,Level,JobFiles,StartTime,VolumeName,StartFile," - "VolSessionId,VolSessionTime FROM temp"; + "VolSessionId,VolSessionTime FROM temp " + "ORDER BY StartTime ASC"; + char *uar_sel_jobid_temp = "SELECT JobId FROM temp"; char *uar_sel_all_temp1 = "SELECT * FROM temp1"; -/* Select filesets for this Client */ +char *uar_sel_all_temp = "SELECT * FROM temp"; + + + +/* Select FileSet names for this Client */ char *uar_sel_fileset = - "SELECT FileSet.FileSetId,FileSet.FileSet,FileSet.MD5 FROM Job," + "SELECT DISTINCT FileSet.FileSet FROM Job," "Client,FileSet WHERE Job.FileSetId=FileSet.FileSetId " "AND Job.ClientId=%u AND Client.ClientId=%u " - "GROUP BY FileSet.FileSetId"; + "ORDER BY FileSet.FileSet"; /* Find MediaType used by this Job */ char *uar_mediatype = "SELECT MediaType FROM JobMedia,Media WHERE JobMedia.JobId=%u " "AND JobMedia.MediaId=Media.MediaId"; + +/* Find JobId, FileIndex for a given path/file and date */ +char *uar_jobid_fileindex = + "SELECT Job.JobId, File.FileIndex FROM Job,File,Path,Filename,Client " + "WHERE Job.JobId=File.JobId " + "AND Job.StartTime<'%s' " + "AND Path.Path='%s' " + "AND Filename.Name='%s' " + "AND Client.Name='%s' " + "AND Path.PathId=File.PathId " + "AND Filename.FilenameId=File.FilenameId " + "ORDER BY Job.StartTime DESC LIMIT 1"; +