Switzerland, email:ftf@fsfeurope.org.
*/
/*
- *
* This file contains all the SQL commands that are either issued by the
* Director or which are database backend specific.
*
* Kern Sibbald, July MMII
- *
*/
/*
* Note, PostgreSQL imposes some constraints on using DISTINCT and GROUP BY
"AND j1.JobId = f1.JobId"
};
+const char *create_temp_basefile[5] = {
+ /* Mysql */
+ "CREATE TEMPORARY TABLE basefile%lld ("
+ "Path BLOB NOT NULL,"
+ "Name BLOB NOT NULL)",
+ /* Postgresql */
+ "CREATE TEMPORARY TABLE basefile%lld ("
+ "Path TEXT,"
+ "Name TEXT)",
+ /* SQLite */
+ "CREATE TEMPORARY TABLE basefile%lld ("
+ "Path TEXT,"
+ "Name TEXT)",
+ /* SQLite3 */
+ "CREATE TEMPORARY TABLE basefile%lld ("
+ "Path TEXT,"
+ "Name TEXT)",
+ /* Ingres */
+ "DECLARE GLOBAL TEMPORARY TABLE basefile%lld ("
+ "Path VARBYTE(32000) NOT NULL,"
+ "Name VARBYTE(32000) NOT NULL) "
+ "ON COMMIT PRESERVE ROWS WITH NORECOVERY"
+};
+
+const char *create_temp_new_basefile[5] = {
+ /* Mysql */
+ "CREATE TEMPORARY TABLE new_basefile%lld AS "
+ "SELECT Path.Path AS Path, Filename.Name AS Name, Temp.FileIndex AS FileIndex,"
+ "Temp.JobId AS JobId, Temp.LStat AS LStat, Temp.FileId AS FileId, "
+ "Temp.MD5 AS MD5 "
+ "FROM ( %s ) AS Temp "
+ "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) "
+ "JOIN Path ON (Path.PathId = Temp.PathId) "
+ "WHERE Temp.FileIndex > 0",
+ /* Postgresql */
+ "CREATE TEMPORARY TABLE new_basefile%lld AS "
+ "SELECT Path.Path AS Path, Filename.Name AS Name, Temp.FileIndex AS FileIndex,"
+ "Temp.JobId AS JobId, Temp.LStat AS LStat, Temp.FileId AS FileId, "
+ "Temp.MD5 AS MD5 "
+ "FROM ( %s ) AS Temp "
+ "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) "
+ "JOIN Path ON (Path.PathId = Temp.PathId) "
+ "WHERE Temp.FileIndex > 0",
+ /* SQLite */
+ "CREATE TEMPORARY TABLE new_basefile%lld AS "
+ "SELECT Path.Path AS Path, Filename.Name AS Name, Temp.FileIndex AS FileIndex,"
+ "Temp.JobId AS JobId, Temp.LStat AS LStat, Temp.FileId AS FileId, "
+ "Temp.MD5 AS MD5 "
+ "FROM ( %s ) AS Temp "
+ "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) "
+ "JOIN Path ON (Path.PathId = Temp.PathId) "
+ "WHERE Temp.FileIndex > 0",
+ /* SQLite3 */
+ "CREATE TEMPORARY TABLE new_basefile%lld AS "
+ "SELECT Path.Path AS Path, Filename.Name AS Name, Temp.FileIndex AS FileIndex,"
+ "Temp.JobId AS JobId, Temp.LStat AS LStat, Temp.FileId AS FileId, "
+ "Temp.MD5 AS MD5 "
+ "FROM ( %s ) AS Temp "
+ "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) "
+ "JOIN Path ON (Path.PathId = Temp.PathId) "
+ "WHERE Temp.FileIndex > 0",
+ /* Ingres */
+ "DECLARE GLOBAL TEMPORARY TABLE new_basefile%lld AS "
+ "SELECT Path.Path AS Path, Filename.Name AS Name, Temp.FileIndex AS FileIndex,"
+ "Temp.JobId AS JobId, Temp.LStat AS LStat, Temp.FileId AS FileId, "
+ "Temp.MD5 AS MD5 "
+ "FROM ( %s ) AS Temp "
+ "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) "
+ "JOIN Path ON (Path.PathId = Temp.PathId) "
+ "WHERE Temp.FileIndex > 0 "
+ "ON COMMIT PRESERVE ROWS WITH NORECOVERY",
+};
+
/* ====== ua_prune.c */
/* List of SQL commands to create temp table and indicies */
"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"
};
"JobId INTEGER NOT NULL,"
"JobTDate BIGINT,"
"ClientId INTEGER,"
- "Level CHAR,"
+ "Level CHAR(1),"
"JobFiles INTEGER,"
"JobBytes BIGINT,"
- "StartTime VARCHAR(256),"
- "VolumeName VARCHAR(256),"
+ "StartTime TIMESTAMP WITHOUT TIME ZONE,"
+ "VolumeName VARBYTE(128),"
"StartFile INTEGER,"
"VolSessionId INTEGER,"
- "VolSessionTime INTEGER)"
+ "VolSessionTime INTEGER) "
"ON COMMIT PRESERVE ROWS WITH NORECOVERY"
};
/* Ingres */
"DECLARE GLOBAL TEMPORARY TABLE temp1 ("
"JobId INTEGER NOT NULL,"
- "JobTDate BIGINT)"
+ "JobTDate BIGINT) "
"ON COMMIT PRESERVE ROWS WITH NORECOVERY"
};
/* 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] = {