]> git.sur5r.net Git - bacula/bacula/commitdiff
update db_get_file_list() to use StartTime instead of FileIndex
authorEric Bollengier <eric@eb.homelinux.org>
Wed, 16 Sep 2009 18:40:52 +0000 (20:40 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Wed, 16 Sep 2009 18:40:52 +0000 (20:40 +0200)
bacula/src/cats/sql_cmds.c
bacula/src/cats/sql_cmds.h
bacula/src/cats/sql_get.c

index 4ff0c6e9e4f3f809f15aaaae87fa82805b09e66a..4276fc4897a88bb3ee32c2e7083eeb870fea30ee 100644 (file)
@@ -450,6 +450,52 @@ const char *uar_jobid_fileindex_from_table =
 #include "bacula.h"
 #include "cats.h"
 
+/* Get the list of the last recent version with a given jobid list */
+const char *select_recent_version[4] = {
+   /* MySQL */
+   "SELECT max(StartTime), Job.JobId, FileIndex, PathId, FilenameId, LStat, MD5 "
+     "FROM "
+         "(SELECT JobId, PathId, FilenameId, FileIndex, LStat, MD5 FROM File WHERE JobId IN (%s) "
+           "UNION ALL "
+          "SELECT BaseFiles.JobId, PathId, FilenameId, FileIndex, LStat, MD5 "
+            "FROM BaseFiles JOIN File USING (FileId) "
+           "WHERE BaseFiles.JobId IN (%s) "
+          ") AS T JOIN Job USING (JobId) "
+    "GROUP BY PathId, FilenameId ",
+
+   /* Postgresql */
+   "SELECT DISTINCT ON (FilenameId, PathId) StartTime, JobId, FileId, FileIndex, PathId, FilenameId, LStat, MD5 "
+     "FROM "
+         "(SELECT JobId, PathId, FilenameId, FileIndex, LStat, MD5 FROM File WHERE JobId IN (%s) "
+           "UNION ALL "
+          "SELECT BaseFiles.JobId, PathId, FilenameId, FileIndex, LStat, MD5 "
+            "FROM BaseFiles JOIN File USING (FileId) "
+           "WHERE BaseFiles.JobId IN (%s) "
+          ") AS T JOIN Job USING (JobId) "
+     "ORDER BY FilenameId, PathId, StartTime DESC ",
+
+   /* SQLite */
+   "SELECT max(StartTime), JobId, FileId, FileIndex, PathId, FilenameId, LStat "
+     "FROM "
+         "(SELECT JobId, PathId, FilenameId, FileIndex, LStat, MD5 FROM File WHERE JobId IN (%s) "
+           "UNION ALL "
+          "SELECT BaseFiles.JobId, PathId, FilenameId, FileIndex, LStat, MD5 "
+            "FROM BaseFiles JOIN File USING (FileId) "
+           "WHERE BaseFiles.JobId IN (%s) "
+          ") AS T JOIN Job USING (JobId) "
+     "GROUP BY PathId, FilenameId ",
+
+   /* SQLite3 */
+   "SELECT max(StartTime), JobId, FileId, FileIndex, PathId, FilenameId, LStat "
+        "(SELECT JobId, PathId, FilenameId, FileIndex, LStat, MD5 FROM File WHERE JobId IN (%s) "
+           "UNION ALL "
+          "SELECT BaseFiles.JobId, PathId, FilenameId, FileIndex, LStat, MD5 "
+            "FROM BaseFiles JOIN File USING (FileId) "
+           "WHERE BaseFiles.JobId IN (%s) "
+          ") AS T JOIN Job USING (JobId) "
+    "GROUP BY PathId, FilenameId "
+};
+
 /* ====== ua_prune.c */
 
 /* List of SQL commands to create temp table and indicies  */
index a5d8054e487fcf76f743a36a485c7fa383a56fda..6f1abaefaa686eb08ff5eeecf569da929fac4e86 100644 (file)
@@ -73,6 +73,7 @@ extern const char CATS_IMP_EXP *uar_jobids_fileindex;
 extern const char CATS_IMP_EXP *uar_jobid_fileindex_from_table;
 extern const char CATS_IMP_EXP *uar_sel_jobid_temp;
 
+extern const char CATS_IMP_EXP *select_recent_version[4];
 extern const char CATS_IMP_EXP *create_deltabs[4];
 
 extern const char CATS_IMP_EXP *uar_file[4];
index 2e32882baf0521b89c2141455f12d4d2f83057ee..577f79d3a38271ad1dafa834578a55795e9d219e 100644 (file)
@@ -1067,25 +1067,17 @@ bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids,
          
 #define new_db_get_file_list
 #ifdef new_db_get_file_list
+   POOL_MEM buf2(PM_MESSAGE);
+   Mmsg(buf2, select_recent_version[db_type], jobids, jobids);
    Mmsg(buf,
- "SELECT Path.Path, Filename.Name, File.FileIndex, File.JobId, "
-        "File.LStat, File.MD5 "
- "FROM ( "
-  "SELECT max(FileId) as FileId, PathId, FilenameId "
-    "FROM (SELECT FileId, PathId, FilenameId FROM File WHERE JobId IN (%s) "
-           "UNION ALL "         /* we already sort after */
-          "SELECT File.FileId, PathId, FilenameId "
-            "FROM BaseFiles JOIN File USING (FileId) "
-           "WHERE BaseFiles.JobId IN (%s) "
-          ") AS F "
-   "GROUP BY PathId, FilenameId "
-  ") AS Temp "
+ "SELECT Path.Path, Filename.Name, FileIndex, JobId, "
+        "LStat, MD5 "
+ "FROM ( %s ) AS TEMP "
  "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) "
  "JOIN Path ON (Path.PathId = Temp.PathId) "
- "JOIN File ON (File.FileId = Temp.FileId) "
-"WHERE File.FileIndex > 0 ORDER BY JobId, FileIndex ASC",/* Return sorted by JobId, */
+"WHERE FileIndex > 0 ORDER BY JobId, FileIndex ASC",/* Return sorted by JobId, */
                                                          /* FileIndex for restore code */ 
-        jobids, jobids);
+        buf2.c_str());
 #else
    /*  
     * I am not sure that this works the same as the code in ua_restore.c but it