]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sql_cmds.c
Rework sql queries for update copies
[bacula/bacula] / bacula / src / cats / sql_cmds.c
index 12da0d306b1e19e6830b3da30f443950625461c1..88afd3e024719478f321bc1921712c8c8018c3c2 100644 (file)
@@ -647,7 +647,7 @@ const char *create_temp_basefile[5] = {
    /* Ingres */
    "DECLARE GLOBAL TEMPORARY TABLE basefile%lld ("
    "Path VARBYTE(32000) NOT NULL,"
-   "Name VARBYTE(32000) NOT NULL)"
+   "Name VARBYTE(32000) NOT NULL) "
    "ON COMMIT PRESERVE ROWS WITH NORECOVERY"
 };
 
@@ -696,7 +696,7 @@ const char *create_temp_new_basefile[5] = {
    "FROM ( %s ) AS Temp "
    "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) "
    "JOIN Path ON (Path.PathId = Temp.PathId) "
-   "WHERE Temp.FileIndex > 0"
+   "WHERE Temp.FileIndex > 0 "
    "ON COMMIT PRESERVE ROWS WITH NORECOVERY",
 };
 
@@ -738,7 +738,52 @@ const char *create_deltabs[5] = {
    "PurgedFiles SMALLINT, "
    "FileSetId INTEGER, "
    "JobFiles INTEGER, "
-   "JobStatus CHAR(1))"
+   "JobStatus CHAR(1)) "
+   "ON COMMIT PRESERVE ROWS WITH NORECOVERY"
+};
+
+/* ======= ua_purge.c */
+
+/* Select the first available Copy Job that must be upgraded to a Backup job when the original backup job is expired. */
+
+const char *uap_upgrade_copies_oldest_job_default = 
+"CREATE TEMPORARY TABLE cpy_tmp AS "
+       "SELECT MIN(JobId) AS JobId FROM Job "     /* Choose the oldest job */
+        "WHERE Type='%c' "                        /* JT_JOB_COPY */
+          "AND ( PriorJobId IN (%s) "             /* JobId selection */
+              "OR "
+               " PriorJobId IN ( "
+                  "SELECT PriorJobId "
+                    "FROM Job "
+                   "WHERE JobId IN (%s) "         /* JobId selection */
+                    " AND Type='B' "
+                 ") "
+              ") "
+          "GROUP BY PriorJobId ";           /* one result per copy */
+
+const char *uap_upgrade_copies_oldest_job[5] = {
+   /* Mysql */
+   uap_upgrade_copies_oldest_job_default,
+   /* Postgresql */
+   uap_upgrade_copies_oldest_job_default,
+   /* SQLite */
+   uap_upgrade_copies_oldest_job_default,
+   /* SQLite3 */
+   uap_upgrade_copies_oldest_job_default,
+   /* Ingres */
+   "DECLARE GLOBAL TEMPORARY TABLE cpy_tmp AS "
+       "SELECT MIN(JobId) AS JobId FROM Job "     /* Choose the oldest job */
+        "WHERE Type='%c' "                        /* JT_JOB_COPY */
+          "AND ( PriorJobId IN (%s) "             /* JobId selection */
+              "OR "
+               " PriorJobId IN ( "
+                  "SELECT PriorJobId "
+                    "FROM Job "
+                   "WHERE JobId IN (%s) "         /* JobId selection */
+                    " AND Type='B' "
+                 ") "
+              ") "
+          "GROUP BY PriorJobId "           /* one result per copy */
    "ON COMMIT PRESERVE ROWS WITH NORECOVERY"
 };
 
@@ -854,11 +899,11 @@ const char *uar_create_temp[5] = {
    "Level CHAR(1),"
    "JobFiles INTEGER,"
    "JobBytes BIGINT,"
-   "StartTime VARBYTE(32),"
+   "StartTime TIMESTAMP WITHOUT TIME ZONE,"
    "VolumeName VARBYTE(128),"
    "StartFile INTEGER,"
    "VolSessionId INTEGER,"
-   "VolSessionTime INTEGER)"
+   "VolSessionTime INTEGER) "
    "ON COMMIT PRESERVE ROWS WITH NORECOVERY"
 };
 
@@ -882,7 +927,7 @@ const char *uar_create_temp1[5] = {
    /* Ingres */
    "DECLARE GLOBAL TEMPORARY TABLE temp1 ("
    "JobId INTEGER NOT NULL,"
-   "JobTDate BIGINT)"
+   "JobTDate BIGINT) "
    "ON COMMIT PRESERVE ROWS WITH NORECOVERY"
    };
 
@@ -954,7 +999,7 @@ const char *sql_media_order_most_recently_written[5] = {
    /* SQLite3 */
    "ORDER BY LastWritten IS NULL,LastWritten DESC,MediaId",
    /* Ingres */
-   "ORDER BY IFNULL(LastWritten, '') DESC,MediaId"
+   "ORDER BY IFNULL(LastWritten, '1970-01-01 00:00:00') DESC,MediaId"
 };
 
 const char *sql_get_max_connections[5] = {