]> git.sur5r.net Git - bacula/bacula/commitdiff
Create table with jobids as a temporary table and move the sql definition to sql_cmds...
authorMarco van Wieringen <mvw@planets.elm.net>
Tue, 1 Jun 2010 19:23:56 +0000 (21:23 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 2 Aug 2010 14:53:51 +0000 (16:53 +0200)
bacula/src/cats/sql_cmds.c
bacula/src/cats/sql_cmds.h
bacula/src/cats/sql_get.c

index 88afd3e024719478f321bc1921712c8c8018c3c2..d48d926d708689a128e87e9ce7292f0853e8fde7 100644 (file)
@@ -627,6 +627,37 @@ const char *select_recent_version[5] = {
       "AND j1.JobId = f1.JobId"
 };
 
+const char *create_temp_accurate_jobids_default =
+   "CREATE TEMPORARY TABLE btemp3%s AS "
+   "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
+   "FROM Job JOIN FileSet USING (FileSetId) "
+   "WHERE ClientId = %s "
+   "AND Level='F' AND JobStatus IN ('T','W') AND Type='B' "
+   "AND StartTime<'%s' "
+   "AND FileSet.FileSet=(SELECT FileSet FROM FileSet WHERE FileSetId = %s) "
+   "ORDER BY Job.JobTDate DESC LIMIT 1";
+
+const char *create_temp_accurate_jobids[5] = {
+   /* Mysql */
+   create_temp_accurate_jobids_default,
+   /* Postgresql */
+   create_temp_accurate_jobids_default,
+   /* SQLite */
+   create_temp_accurate_jobids_default,
+   /* SQLite3 */
+   create_temp_accurate_jobids_default,
+   /* Ingres */
+   "DECLARE GLOBAL TEMPORARY TABLE btemp3%s AS "
+   "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
+   "FROM Job JOIN FileSet USING (FileSetId) "
+   "WHERE ClientId = %s "
+   "AND Level='F' AND JobStatus IN ('T','W') AND Type='B' "
+   "AND StartTime<'%s' "
+   "AND FileSet.FileSet=(SELECT FileSet FROM FileSet WHERE FileSetId = %s) "
+   "ORDER BY Job.JobTDate DESC FETCH FIRST 1 ROW ONLY "
+   "ON COMMIT PRESERVE ROWS WITH NORECOVERY"
+};
+
 const char *create_temp_basefile[5] = {
    /* Mysql */
    "CREATE TEMPORARY TABLE basefile%lld ("
@@ -697,7 +728,7 @@ const char *create_temp_new_basefile[5] = {
    "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) "
    "JOIN Path ON (Path.PathId = Temp.PathId) "
    "WHERE Temp.FileIndex > 0 "
-   "ON COMMIT PRESERVE ROWS WITH NORECOVERY",
+   "ON COMMIT PRESERVE ROWS WITH NORECOVERY"
 };
 
 /* ====== ua_prune.c */
index 5b9b6cb882b389ed9f7d82b1d498aae4ab0d958c..4c525da28ae30e9e7593218061c13a6c806c46b2 100644 (file)
@@ -75,6 +75,7 @@ extern const char CATS_IMP_EXP *uar_sel_jobid_temp;
 
 extern const char CATS_IMP_EXP *select_recent_version[5];
 extern const char CATS_IMP_EXP *select_recent_version_with_basejob[5];
+extern const char CATS_IMP_EXP *create_temp_accurate_jobids[5];
 extern const char CATS_IMP_EXP *create_temp_basefile[5];
 extern const char CATS_IMP_EXP *create_temp_new_basefile[5];
 extern const char CATS_IMP_EXP *create_deltabs[5];
index e44dc47d4e220751151109096243f236c040872a..04f72849c325d50e21c2fbf488e5ad7d0d3912e7 100644 (file)
@@ -1172,15 +1172,7 @@ bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb,
    jobids->count = 0;
 
    /* First, find the last good Full backup for this job/client/fileset */
-   Mmsg(query, 
-"CREATE TABLE btemp3%s AS "
- "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
-   "FROM Job JOIN FileSet USING (FileSetId) "
-  "WHERE ClientId = %s "
-    "AND Level='F' AND JobStatus IN ('T','W') AND Type='B' "
-    "AND StartTime<'%s' "
-    "AND FileSet.FileSet=(SELECT FileSet FROM FileSet WHERE FileSetId = %s) "
-  "ORDER BY Job.JobTDate DESC LIMIT 1",
+   Mmsg(query, create_temp_accurate_jobids[db_type], 
         edit_uint64(jcr->JobId, jobid),
         edit_uint64(jr->ClientId, clientid),
         date,