--- /dev/null
+Index: src/cats/sql.c
+===================================================================
+--- src/cats/sql.c (révision 5461)
++++ src/cats/sql.c (copie de travail)
+@@ -111,7 +111,8 @@
+ /* Check that the tables correspond to the version we want */
+ bool check_tables_version(JCR *jcr, B_DB *mdb)
+ {
+- const char *query = "SELECT VersionId FROM Version";
++ const char *query = "SELECT VersionId FROM Version "
++ " WHERE Product = 'bacula'";
+
+ bacula_db_version = 0;
+ if (!db_sql_query(mdb, query, int_handler, (void *)&bacula_db_version)) {
+Index: src/cats/update_postgresql_tables.in
+===================================================================
+--- src/cats/update_postgresql_tables.in (révision 5461)
++++ src/cats/update_postgresql_tables.in (copie de travail)
+@@ -1,10 +1,10 @@
+ #!/bin/sh
+ #
+-# Shell script to update PostgreSQL tables from version 1.38 to 2.0.0 or higher
++# Shell script to update PostgreSQL tables from version 2.2 to 3 or higher
+ #
+ echo " "
+-echo "This script will update a Bacula PostgreSQL database from version 9 to 10"
+-echo " which is needed to convert from Bacula version 1.38.x to 2.0.0 or higher"
++echo "This script will update a Bacula PostgreSQL database from version 10 to 11"
++echo " which is needed to convert from Bacula version 2.2 to 3 or higher"
+ echo "Depending on the size of your database,"
+ echo "this script may take several minutes to run."
+ echo " "
+@@ -13,65 +13,10 @@
+
+ if $bindir/psql -f - -d ${db_name} $* <<END-OF-DATA
+
+-ALTER TABLE media ADD COLUMN DeviceId integer;
+-UPDATE media SET DeviceId=0;
+-ALTER TABLE media ADD COLUMN MediaTypeId integer;
+-UPDATE media SET MediaTypeId=0;
+-ALTER TABLE media ADD COLUMN LocationId integer;
+-UPDATE media SET LocationId=0;
+-ALTER TABLE media ADD COLUMN RecycleCount integer;
+-UPDATE media SET RecycleCount=0;
+-ALTER TABLE media ADD COLUMN InitialWrite timestamp without time zone;
+-ALTER TABLE media ADD COLUMN scratchpoolid integer;
+-UPDATE media SET scratchpoolid=0;
+-ALTER TABLE media ADD COLUMN recyclepoolid integer;
+-UPDATE media SET recyclepoolid=0;
+-ALTER TABLE media ADD COLUMN enabled integer;
+-UPDATE media SET enabled=1;
+-ALTER TABLE media ADD COLUMN Comment TEXT;
++ALTER TABLE version ADD COLUMN product char(8);
+
+-ALTER TABLE job ADD COLUMN RealEndTime timestamp without time zone;
+-ALTER TABLE job ADD COLUMN PriorJobId integer;
+-UPDATE job SET PriorJobId=0;
+-
+-ALTER TABLE jobmedia DROP COLUMN Stripe;
+-
+-CREATE TABLE Location (
+- LocationId SERIAL NOT NULL,
+- Location TEXT NOT NULL,
+- Cost integer default 0,
+- Enabled integer,
+- PRIMARY KEY (LocationId)
+-);
+-
+-CREATE TABLE LocationLog (
+- LocLogId SERIAL NOT NULL,
+- Date timestamp without time zone,
+- Comment TEXT NOT NULL,
+- MediaId INTEGER DEFAULT 0,
+- LocationId INTEGER DEFAULT 0,
+- newvolstatus text not null
+- check (newvolstatus in ('Full','Archive','Append',
+- 'Recycle','Purged','Read-Only','Disabled',
+- 'Error','Busy','Used','Cleaning','Scratch')),
+- newenabled smallint,
+- PRIMARY KEY(LocLogId)
+-);
+-
+-
+-CREATE TABLE Log
+-(
+- LogId serial not null,
+- JobId integer not null,
+- Time timestamp without time zone,
+- LogText text not null,
+- primary key (LogId)
+-);
+-create index log_name_idx on Log (JobId);
+-
+-
+ DELETE FROM version;
+-INSERT INTO version (versionId) VALUES (10);
++INSERT INTO version (product, versionId) VALUES ('bacula', 11);
+
+ vacuum;
+
+Index: src/cats/make_sqlite3_tables.in
+===================================================================
+--- src/cats/make_sqlite3_tables.in (révision 5461)
++++ src/cats/make_sqlite3_tables.in (copie de travail)
+@@ -283,6 +283,7 @@
+ INSERT INTO NextId (id, TableName) VALUES (1, "Job");
+
+ CREATE TABLE Version (
++ Product CHAR(8),
+ VersionId INTEGER UNSIGNED NOT NULL
+ );
+
+@@ -350,7 +351,7 @@
+
+
+ -- Initialize Version
+-INSERT INTO Version (VersionId) VALUES (10);
++INSERT INTO Version (Product, VersionId) VALUES ('bacula', 11);
+
+
+ PRAGMA default_cache_size = 100000;
+Index: src/cats/update_sqlite3_tables.in
+===================================================================
+--- src/cats/update_sqlite3_tables.in (révision 5461)
++++ src/cats/update_sqlite3_tables.in (copie de travail)
+@@ -1,10 +1,10 @@
+ #!/bin/sh
+ #
+-# shell script to update SQLite from version 1.38 to 2.0
++# shell script to update SQLite from version 2.2 to 3
+ #
+ echo " "
+-echo "This script will update a Bacula SQLite database from version 9 to 10"
+-echo " which is needed to convert from Bacula version 1.38.x to 2.0.x or higher"
++echo "This script will update a Bacula SQLite database from version 10 to 11"
++echo " which is needed to convert from Bacula version 2.2 to 3 or higher"
+ echo "Depending on the size of your database,"
+ echo "this script may take several minutes to run."
+ echo " "
+@@ -17,236 +17,15 @@
+ ${bindir}/${sqlite} $* ${db_name}.db <<END-OF-DATA
+ BEGIN TRANSACTION;
+
+-CREATE TEMPORARY TABLE Media_backup (
+- MediaId INTEGER UNSIGNED AUTOINCREMENT,
+- VolumeName VARCHAR(128) NOT NULL,
+- Slot INTEGER DEFAULT 0,
+- PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- MediaType VARCHAR(128) NOT NULL,
+- MediaTypeId INTEGER UNSIGNED REFERENCES MediaType DEFAULT 0,
+- LabelType TINYINT DEFAULT 0,
+- FirstWritten DATETIME DEFAULT 0,
+- LastWritten DATETIME DEFAULT 0,
+- LabelDate DATETIME DEFAULT 0,
+- VolJobs INTEGER UNSIGNED DEFAULT 0,
+- VolFiles INTEGER UNSIGNED DEFAULT 0,
+- VolBlocks INTEGER UNSIGNED DEFAULT 0,
+- VolMounts INTEGER UNSIGNED DEFAULT 0,
+- VolBytes BIGINT UNSIGNED DEFAULT 0,
+- VolParts INTEGER UNSIGNED DEFAULT 0,
+- VolErrors INTEGER UNSIGNED DEFAULT 0,
+- VolWrites INTEGER UNSIGNED DEFAULT 0,
+- VolCapacityBytes BIGINT UNSIGNED DEFAULT 0,
+- VolStatus VARCHAR(20) NOT NULL,
+- Enabled TINYINT DEFAULT 1,
+- Recycle TINYINT DEFAULT 0,
+- VolRetention BIGINT UNSIGNED DEFAULT 0,
+- VolUseDuration BIGINT UNSIGNED DEFAULT 0,
+- MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
+- MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
+- MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
+- InChanger TINYINT DEFAULT 0,
+- StorageId INTEGER UNSIGNED REFERENCES Storage,
+- DeviceId INTEGER UNSIGNED REFERENCES Device,
+- MediaAddressing TINYINT DEFAULT 0,
+- VolReadTime BIGINT UNSIGNED DEFAULT 0,
+- VolWriteTime BIGINT UNSIGNED DEFAULT 0,
+- EndFile INTEGER UNSIGNED DEFAULT 0,
+- EndBlock INTEGER UNSIGNED DEFAULT 0,
+- LocationId INTEGER UNSIGNED REFERENCES Location,
+- RecycleCount INTEGER UNSIGNED DEFAULT 0,
+- InitialWrite DATETIME DEFAULT 0,
+- ScratchPoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- RecyclePoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- PRIMARY KEY(MediaId)
+- );
++DROP TABLE Version;
+
+-INSERT INTO Media_backup SELECT
+- MediaId, VolumeName, Slot, PoolId,
+- MediaType, LabelType, 0, FirstWritten, LastWritten,
+- LabelDate, VolJobs, VolFiles, VolBlocks,
+- VolMounts, VolBytes, VolParts, VolErrors, VolWrites,
+- VolCapacityBytes, VolStatus, 1, Recycle,
+- VolRetention, VolUseDuration, MaxVolJobs,
+- MaxVolFiles, MaxVolBytes, InChanger,
+- StorageId, 0, MediaAddressing,
+- VolReadTime, VolWriteTime, EndFile, EndBlock, 0, 0, 0, 0, 0
+- FROM Media;
+-
+-
+-DROP TABLE Media;
+-
+-CREATE TABLE Media (
+- MediaId INTEGER,
+- VolumeName VARCHAR(128) NOT NULL,
+- Slot INTEGER DEFAULT 0,
+- PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- MediaType VARCHAR(128) NOT NULL,
+- MediaTypeId INTEGER UNSIGNED REFERENCES MediaType DEFAULT 0,
+- LabelType TINYINT DEFAULT 0,
+- FirstWritten DATETIME DEFAULT 0,
+- LastWritten DATETIME DEFAULT 0,
+- LabelDate DATETIME DEFAULT 0,
+- VolJobs INTEGER UNSIGNED DEFAULT 0,
+- VolFiles INTEGER UNSIGNED DEFAULT 0,
+- VolBlocks INTEGER UNSIGNED DEFAULT 0,
+- VolMounts INTEGER UNSIGNED DEFAULT 0,
+- VolBytes BIGINT UNSIGNED DEFAULT 0,
+- VolParts INTEGER UNSIGNED DEFAULT 0,
+- VolErrors INTEGER UNSIGNED DEFAULT 0,
+- VolWrites INTEGER UNSIGNED DEFAULT 0,
+- VolCapacityBytes BIGINT UNSIGNED DEFAULT 0,
+- VolStatus VARCHAR(20) NOT NULL,
+- Enabled TINYINT DEFAULT 1,
+- Recycle TINYINT DEFAULT 0,
+- VolRetention BIGINT UNSIGNED DEFAULT 0,
+- VolUseDuration BIGINT UNSIGNED DEFAULT 0,
+- MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
+- MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
+- MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
+- InChanger TINYINT DEFAULT 0,
+- StorageId INTEGER UNSIGNED REFERENCES Storage DEFAULT 0,
+- DeviceId INTEGER UNSIGNED REFERENCES Device DEFAULT 0,
+- MediaAddressing TINYINT DEFAULT 0,
+- VolReadTime BIGINT UNSIGNED DEFAULT 0,
+- VolWriteTime BIGINT UNSIGNED DEFAULT 0,
+- EndFile INTEGER UNSIGNED DEFAULT 0,
+- EndBlock INTEGER UNSIGNED DEFAULT 0,
+- LocationId INTEGER UNSIGNED REFERENCES Location DEFAULT 0,
+- RecycleCount INTEGER UNSIGNED DEFAULT 0,
+- InitialWrite DATETIME DEFAULT 0,
+- ScratchPoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- RecyclePoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- Comment TEXT,
+- PRIMARY KEY(MediaId)
++CREATE TABLE Version (
++ Product CHAR(8),
++ VersionId INTEGER UNSIGNED NOT NULL
+ );
+
+-INSERT INTO Media (
+- MediaId, VolumeName, Slot, PoolId,
+- MediaType, MediaTypeId, LabelType, FirstWritten, LastWritten,
+- LabelDate, VolJobs, VolFiles, VolBlocks,
+- VolMounts, VolBytes, VolParts, VolErrors, VolWrites,
+- VolCapacityBytes, VolStatus, Enabled, Recycle,
+- VolRetention, VolUseDuration, MaxVolJobs,
+- MaxVolFiles, MaxVolBytes,
+- InChanger, StorageId, DeviceId, MediaAddressing,
+- VolReadTime, VolWriteTime,
+- EndFile, EndBlock, LocationId, RecycleCount, InitialWrite,
+- ScratchPoolId, RecyclePoolId)
+- SELECT * FROM Media_backup;
++INSERT INTO Version (Product, VersionId) VALUES ('bacula', 11);
+
+-
+-DROP TABLE Media_backup;
+-CREATE INDEX inx8 ON Media (PoolId);
+-
+-CREATE TEMPORARY TABLE job_backup
+-(
+- JobId INTEGER,
+- Job VARCHAR(128) NOT NULL,
+- Name VARCHAR(128) NOT NULL,
+- Type CHAR NOT NULL,
+- Level CHAR NOT NULL,
+- ClientId INTEGER REFERENCES Client DEFAULT 0,
+- JobStatus CHAR NOT NULL,
+- SchedTime DATETIME NOT NULL,
+- StartTime DATETIME DEFAULT 0,
+- EndTime DATETIME DEFAULT 0,
+- RealEndTime DATETIME DEFAULT 0,
+- JobTDate BIGINT UNSIGNED DEFAULT 0,
+- VolSessionId INTEGER UNSIGNED DEFAULT 0,
+- VolSessionTime INTEGER UNSIGNED DEFAULT 0,
+- JobFiles INTEGER UNSIGNED DEFAULT 0,
+- JobBytes BIGINT UNSIGNED DEFAULT 0,
+- JobErrors INTEGER UNSIGNED DEFAULT 0,
+- JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
+- PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- FileSetId INTEGER UNSIGNED REFERENCES FileSet DEFAULT 0,
+- PriorJobId INTEGER UNSIGNED REFERENCES Job DEFAULT 0,
+- PurgedFiles TINYINT DEFAULT 0,
+- HasBase TINYINT DEFAULT 0
+- );
+-
+-INSERT INTO Job_backup SELECT
+- JobId, Job, Name, Type, Level, ClientId, JobStatus,
+- SchedTime, StartTime, EndTime, 0,
+- JobTDate, VolSessionId, VolSessionTime,
+- JobFiles, JobBytes, JobErrors, JobMissingFiles,
+- PoolId, FileSetId, 0, PurgedFiles, HasBase
+- FROM Job;
+-
+-DROP TABLE Job;
+-
+-CREATE TABLE Job
+-(
+- JobId INTEGER,
+- Job VARCHAR(128) NOT NULL,
+- Name VARCHAR(128) NOT NULL,
+- Type CHAR NOT NULL,
+- Level CHAR NOT NULL,
+- ClientId INTEGER REFERENCES Client DEFAULT 0,
+- JobStatus CHAR NOT NULL,
+- SchedTime DATETIME NOT NULL,
+- StartTime DATETIME DEFAULT 0,
+- EndTime DATETIME DEFAULT 0,
+- RealEndTime DATETIME DEFAULT 0,
+- JobTDate BIGINT UNSIGNED DEFAULT 0,
+- VolSessionId INTEGER UNSIGNED DEFAULT 0,
+- VolSessionTime INTEGER UNSIGNED DEFAULT 0,
+- JobFiles INTEGER UNSIGNED DEFAULT 0,
+- JobBytes BIGINT UNSIGNED DEFAULT 0,
+- JobErrors INTEGER UNSIGNED DEFAULT 0,
+- JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
+- PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- FileSetId INTEGER UNSIGNED REFERENCES FileSet DEFAULT 0,
+- PriorJobId INTEGER UNSIGNED REFERENCES Job DEFAULT 0,
+- PurgedFiles TINYINT DEFAULT 0,
+- HasBase TINYINT DEFAULT 0,
+- PRIMARY KEY(JobId)
+- );
+-CREATE INDEX inx6 ON Job (Name);
+-
+-INSERT INTO Job (
+- JobId, Job, Name, Type, Level, ClientId, JobStatus,
+- SchedTime, StartTime, EndTime, RealEndTime,
+- JobTDate, VolSessionId, VolSessionTime,
+- JobFiles, JobBytes, JobErrors, JobMissingFiles,
+- PoolId, FileSetId, PriorJobId, PurgedFiles, HasBase)
+- SELECT * FROM Job_backup;
+-
+-DROP TABLE Job_backup;
+-
+-CREATE TABLE LocationLog (
+- LocLogId INTEGER,
+- Date DATETIME NOT NULL,
+- Comment TEXT NOT NULL,
+- MediaId INTEGER UNSIGNED REFERENCES Media DEFAULT 0,
+- LocationId INTEGER UNSIGNED REFERENCES LocationId DEFAULT 0,
+- NewVolStatus VARCHAR(20) NOT NULL,
+- NewEnabled TINYINT NOT NULL,
+- PRIMARY KEY(LocLogId)
+-);
+-
+-CREATE TABLE Log (
+- LogId INTEGER,
+- JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
+- Time DATETIME NOT NULL,
+- LogText TEXT NOT NULL,
+- PRIMARY KEY(LogId)
+- );
+-CREATE INDEX LogInx1 ON File (JobId);
+-
+-CREATE TABLE Location (
+- LocationId INTEGER,
+- Location TEXT NOT NULL,
+- Cost INTEGER DEFAULT 0,
+- Enabled TINYINT,
+- PRIMARY KEY(LocationId)
+- );
+-
+-
+-DELETE FROM Version;
+-INSERT INTO Version (VersionId) VALUES (10);
+-
+ COMMIT;
+
+ END-OF-DATA
+Index: src/cats/make_postgresql_tables.in
+===================================================================
+--- src/cats/make_postgresql_tables.in (révision 5461)
++++ src/cats/make_postgresql_tables.in (copie de travail)
+@@ -315,6 +315,7 @@
+
+ CREATE TABLE version
+ (
++ product char(8),
+ versionid integer not null
+ );
+
+@@ -364,7 +365,7 @@
+ ('p', 'Waiting on higher priority jobs');
+
+
+-INSERT INTO Version (VersionId) VALUES (10);
++INSERT INTO Version (Product, VersionId) VALUES ('bacula', 11);
+
+ -- Make sure we have appropriate permissions
+
+Index: src/cats/update_sqlite_tables.in
+===================================================================
+--- src/cats/update_sqlite_tables.in (révision 5461)
++++ src/cats/update_sqlite_tables.in (copie de travail)
+@@ -1,10 +1,10 @@
+ #!/bin/sh
+ #
+-# shell script to update SQLite from version 1.38 to 2.0
++# shell script to update SQLite from version 2.2 to 3
+ #
+ echo " "
+-echo "This script will update a Bacula SQLite database from version 9 to 10"
+-echo " which is needed to convert from Bacula version 1.38.x to 2.0.x or higher"
++echo "This script will update a Bacula SQLite database from version 10 to 11"
++echo " which is needed to convert from Bacula version 2.2 to 3 or higher"
+ echo "Depending on the size of your database,"
+ echo "this script may take several minutes to run."
+ echo " "
+@@ -17,236 +17,15 @@
+ ${bindir}/${sqlite} $* ${db_name}.db <<END-OF-DATA
+ BEGIN TRANSACTION;
+
+-CREATE TEMPORARY TABLE Media_backup (
+- MediaId INTEGER UNSIGNED AUTOINCREMENT,
+- VolumeName VARCHAR(128) NOT NULL,
+- Slot INTEGER DEFAULT 0,
+- PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- MediaType VARCHAR(128) NOT NULL,
+- MediaTypeId INTEGER UNSIGNED REFERENCES MediaType DEFAULT 0,
+- LabelType TINYINT DEFAULT 0,
+- FirstWritten DATETIME DEFAULT 0,
+- LastWritten DATETIME DEFAULT 0,
+- LabelDate DATETIME DEFAULT 0,
+- VolJobs INTEGER UNSIGNED DEFAULT 0,
+- VolFiles INTEGER UNSIGNED DEFAULT 0,
+- VolBlocks INTEGER UNSIGNED DEFAULT 0,
+- VolMounts INTEGER UNSIGNED DEFAULT 0,
+- VolBytes BIGINT UNSIGNED DEFAULT 0,
+- VolParts INTEGER UNSIGNED DEFAULT 0,
+- VolErrors INTEGER UNSIGNED DEFAULT 0,
+- VolWrites INTEGER UNSIGNED DEFAULT 0,
+- VolCapacityBytes BIGINT UNSIGNED DEFAULT 0,
+- VolStatus VARCHAR(20) NOT NULL,
+- Enabled TINYINT DEFAULT 1,
+- Recycle TINYINT DEFAULT 0,
+- VolRetention BIGINT UNSIGNED DEFAULT 0,
+- VolUseDuration BIGINT UNSIGNED DEFAULT 0,
+- MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
+- MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
+- MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
+- InChanger TINYINT DEFAULT 0,
+- StorageId INTEGER UNSIGNED REFERENCES Storage,
+- DeviceId INTEGER UNSIGNED REFERENCES Device,
+- MediaAddressing TINYINT DEFAULT 0,
+- VolReadTime BIGINT UNSIGNED DEFAULT 0,
+- VolWriteTime BIGINT UNSIGNED DEFAULT 0,
+- EndFile INTEGER UNSIGNED DEFAULT 0,
+- EndBlock INTEGER UNSIGNED DEFAULT 0,
+- LocationId INTEGER UNSIGNED REFERENCES Location,
+- RecycleCount INTEGER UNSIGNED DEFAULT 0,
+- InitialWrite DATETIME DEFAULT 0,
+- ScratchPoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- RecyclePoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- PRIMARY KEY(MediaId)
+- );
++DROP TABLE Version;
+
+-INSERT INTO Media_backup SELECT
+- MediaId, VolumeName, Slot, PoolId,
+- MediaType, LabelType, 0, FirstWritten, LastWritten,
+- LabelDate, VolJobs, VolFiles, VolBlocks,
+- VolMounts, VolBytes, VolParts, VolErrors, VolWrites,
+- VolCapacityBytes, VolStatus, 1, Recycle,
+- VolRetention, VolUseDuration, MaxVolJobs,
+- MaxVolFiles, MaxVolBytes, InChanger,
+- StorageId, 0, MediaAddressing,
+- VolReadTime, VolWriteTime, EndFile, EndBlock, 0, 0, 0, 0, 0
+- FROM Media;
+-
+-
+-DROP TABLE Media;
+-
+-CREATE TABLE Media (
+- MediaId INTEGER,
+- VolumeName VARCHAR(128) NOT NULL,
+- Slot INTEGER DEFAULT 0,
+- PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- MediaType VARCHAR(128) NOT NULL,
+- MediaTypeId INTEGER UNSIGNED REFERENCES MediaType DEFAULT 0,
+- LabelType TINYINT DEFAULT 0,
+- FirstWritten DATETIME DEFAULT 0,
+- LastWritten DATETIME DEFAULT 0,
+- LabelDate DATETIME DEFAULT 0,
+- VolJobs INTEGER UNSIGNED DEFAULT 0,
+- VolFiles INTEGER UNSIGNED DEFAULT 0,
+- VolBlocks INTEGER UNSIGNED DEFAULT 0,
+- VolMounts INTEGER UNSIGNED DEFAULT 0,
+- VolBytes BIGINT UNSIGNED DEFAULT 0,
+- VolParts INTEGER UNSIGNED DEFAULT 0,
+- VolErrors INTEGER UNSIGNED DEFAULT 0,
+- VolWrites INTEGER UNSIGNED DEFAULT 0,
+- VolCapacityBytes BIGINT UNSIGNED DEFAULT 0,
+- VolStatus VARCHAR(20) NOT NULL,
+- Enabled TINYINT DEFAULT 1,
+- Recycle TINYINT DEFAULT 0,
+- VolRetention BIGINT UNSIGNED DEFAULT 0,
+- VolUseDuration BIGINT UNSIGNED DEFAULT 0,
+- MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
+- MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
+- MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
+- InChanger TINYINT DEFAULT 0,
+- StorageId INTEGER UNSIGNED REFERENCES Storage DEFAULT 0,
+- DeviceId INTEGER UNSIGNED REFERENCES Device DEFAULT 0,
+- MediaAddressing TINYINT DEFAULT 0,
+- VolReadTime BIGINT UNSIGNED DEFAULT 0,
+- VolWriteTime BIGINT UNSIGNED DEFAULT 0,
+- EndFile INTEGER UNSIGNED DEFAULT 0,
+- EndBlock INTEGER UNSIGNED DEFAULT 0,
+- LocationId INTEGER UNSIGNED REFERENCES Location DEFAULT 0,
+- RecycleCount INTEGER UNSIGNED DEFAULT 0,
+- InitialWrite DATETIME DEFAULT 0,
+- ScratchPoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- RecyclePoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- Comment TEXT,
+- PRIMARY KEY(MediaId)
++CREATE TABLE Version (
++ Product CHAR(8),
++ VersionId INTEGER UNSIGNED NOT NULL
+ );
+
+-INSERT INTO Media (
+- MediaId, VolumeName, Slot, PoolId,
+- MediaType, MediaTypeId, LabelType, FirstWritten, LastWritten,
+- LabelDate, VolJobs, VolFiles, VolBlocks,
+- VolMounts, VolBytes, VolParts, VolErrors, VolWrites,
+- VolCapacityBytes, VolStatus, Enabled, Recycle,
+- VolRetention, VolUseDuration, MaxVolJobs,
+- MaxVolFiles, MaxVolBytes,
+- InChanger, StorageId, DeviceId, MediaAddressing,
+- VolReadTime, VolWriteTime,
+- EndFile, EndBlock, LocationId, RecycleCount, InitialWrite,
+- ScratchPoolId, RecyclePoolId)
+- SELECT * FROM Media_backup;
++INSERT INTO Version (Product, VersionId) VALUES ('bacula', 11);
+
+-
+-DROP TABLE Media_backup;
+-CREATE INDEX inx8 ON Media (PoolId);
+-
+-CREATE TEMPORARY TABLE job_backup
+-(
+- JobId INTEGER,
+- Job VARCHAR(128) NOT NULL,
+- Name VARCHAR(128) NOT NULL,
+- Type CHAR NOT NULL,
+- Level CHAR NOT NULL,
+- ClientId INTEGER REFERENCES Client DEFAULT 0,
+- JobStatus CHAR NOT NULL,
+- SchedTime DATETIME NOT NULL,
+- StartTime DATETIME DEFAULT 0,
+- EndTime DATETIME DEFAULT 0,
+- RealEndTime DATETIME DEFAULT 0,
+- JobTDate BIGINT UNSIGNED DEFAULT 0,
+- VolSessionId INTEGER UNSIGNED DEFAULT 0,
+- VolSessionTime INTEGER UNSIGNED DEFAULT 0,
+- JobFiles INTEGER UNSIGNED DEFAULT 0,
+- JobBytes BIGINT UNSIGNED DEFAULT 0,
+- JobErrors INTEGER UNSIGNED DEFAULT 0,
+- JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
+- PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- FileSetId INTEGER UNSIGNED REFERENCES FileSet DEFAULT 0,
+- PriorJobId INTEGER UNSIGNED REFERENCES Job DEFAULT 0,
+- PurgedFiles TINYINT DEFAULT 0,
+- HasBase TINYINT DEFAULT 0
+- );
+-
+-INSERT INTO Job_backup SELECT
+- JobId, Job, Name, Type, Level, ClientId, JobStatus,
+- SchedTime, StartTime, EndTime, 0,
+- JobTDate, VolSessionId, VolSessionTime,
+- JobFiles, JobBytes, JobErrors, JobMissingFiles,
+- PoolId, FileSetId, 0, PurgedFiles, HasBase
+- FROM Job;
+-
+-DROP TABLE Job;
+-
+-CREATE TABLE Job
+-(
+- JobId INTEGER,
+- Job VARCHAR(128) NOT NULL,
+- Name VARCHAR(128) NOT NULL,
+- Type CHAR NOT NULL,
+- Level CHAR NOT NULL,
+- ClientId INTEGER REFERENCES Client DEFAULT 0,
+- JobStatus CHAR NOT NULL,
+- SchedTime DATETIME NOT NULL,
+- StartTime DATETIME DEFAULT 0,
+- EndTime DATETIME DEFAULT 0,
+- RealEndTime DATETIME DEFAULT 0,
+- JobTDate BIGINT UNSIGNED DEFAULT 0,
+- VolSessionId INTEGER UNSIGNED DEFAULT 0,
+- VolSessionTime INTEGER UNSIGNED DEFAULT 0,
+- JobFiles INTEGER UNSIGNED DEFAULT 0,
+- JobBytes BIGINT UNSIGNED DEFAULT 0,
+- JobErrors INTEGER UNSIGNED DEFAULT 0,
+- JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
+- PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
+- FileSetId INTEGER UNSIGNED REFERENCES FileSet DEFAULT 0,
+- PriorJobId INTEGER UNSIGNED REFERENCES Job DEFAULT 0,
+- PurgedFiles TINYINT DEFAULT 0,
+- HasBase TINYINT DEFAULT 0,
+- PRIMARY KEY(JobId)
+- );
+-CREATE INDEX inx6 ON Job (Name);
+-
+-INSERT INTO Job (
+- JobId, Job, Name, Type, Level, ClientId, JobStatus,
+- SchedTime, StartTime, EndTime, RealEndTime,
+- JobTDate, VolSessionId, VolSessionTime,
+- JobFiles, JobBytes, JobErrors, JobMissingFiles,
+- PoolId, FileSetId, PriorJobId, PurgedFiles, HasBase)
+- SELECT * FROM Job_backup;
+-
+-DROP TABLE Job_backup;
+-
+-CREATE TABLE LocationLog (
+- LocLogId INTEGER,
+- Date DATETIME NOT NULL,
+- Comment TEXT NOT NULL,
+- MediaId INTEGER UNSIGNED REFERENCES Media DEFAULT 0,
+- LocationId INTEGER UNSIGNED REFERENCES LocationId DEFAULT 0,
+- NewVolStatus VARCHAR(20) NOT NULL,
+- NewEnabled TINYINT NOT NULL,
+- PRIMARY KEY(LocLogId)
+-);
+-
+-CREATE TABLE Log (
+- LogId INTEGER,
+- JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
+- Time DATETIME NOT NULL,
+- LogText TEXT NOT NULL,
+- PRIMARY KEY(LogId)
+- );
+-CREATE INDEX LogInx1 ON File (JobId);
+-
+-CREATE TABLE Location (
+- LocationId INTEGER,
+- Location TEXT NOT NULL,
+- Cost INTEGER DEFAULT 0,
+- Enabled TINYINT,
+- PRIMARY KEY(LocationId)
+- );
+-
+-
+-DELETE FROM Version;
+-INSERT INTO Version (VersionId) VALUES (10);
+-
+ COMMIT;
+
+ END-OF-DATA
+Index: src/cats/update_mysql_tables.in
+===================================================================
+--- src/cats/update_mysql_tables.in (révision 5461)
++++ src/cats/update_mysql_tables.in (copie de travail)
+@@ -1,10 +1,10 @@
+ #!/bin/sh
+ #
+-# Shell script to update MySQL tables from version 1.38 to 2.0
++# Shell script to update MySQL tables from version 2.2 to 3
+ #
+ echo " "
+-echo "This script will update a Bacula MySQL database from version 9 to 10"
+-echo " which is needed to convert from Bacula version 1.38.x to 2.0.x or higher"
++echo "This script will update a Bacula MySQL database from version 10 to 11"
++echo " which is needed to convert from Bacula version 2.2 to 3 or higher"
+ echo "Depending on the size of your database,"
+ echo "this script may take several minutes to run."
+ echo " "
+@@ -14,59 +14,12 @@
+ if $bindir/mysql $* -f <<END-OF-DATA
+ USE ${db_name};
+
+-DROP TABLE IF EXISTS MAC;
+-DROP TABLE IF EXISTS Log;
+-DROP TABLE IF EXISTS Location;
+-DROP TABLE IF EXISTS LocationLog;
++ALTER TABLE Version ADD COLUMN Product char(8) default '';
+
+-CREATE TABLE Log (
+- LogId INTEGER UNSIGNED AUTO_INCREMENT,
+- JobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job,
+- Time DATETIME DEFAULT 0,
+- LogText BLOB NOT NULL,
+- PRIMARY KEY(LogId),
+- INDEX (JobId)
+- );
+
+-CREATE TABLE Location (
+- LocationId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
+- Location TINYBLOB NOT NULL,
+- Cost INTEGER DEFAULT 0,
+- Enabled TINYINT,
+- PRIMARY KEY(LocationId)
+- );
+
+-CREATE TABLE LocationLog (
+- LocLogId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
+- Date DATETIME DEFAULT 0,
+- Comment BLOB,
+- MediaId INTEGER UNSIGNED DEFAULT 0 REFERENCES Media,
+- LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location,
+- NewVolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged',
+- 'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL,
+- NewEnabled TINYINT,
+- PRIMARY KEY(LocLogId)
+-);
+-
+-ALTER TABLE Media ADD COLUMN MediaTypeId INTEGER UNSIGNED DEFAULT 0 REFERENCES MediaType;
+-ALTER TABLE Media ADD COLUMN DeviceId INTEGER UNSIGNED DEFAULT 0 REFERENCES Device;
+-ALTER TABLE Media ADD COLUMN LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location;
+-ALTER TABLE Media ADD COLUMN RecycleCount INTEGER UNSIGNED DEFAULT 0;
+-ALTER TABLE Media ADD COLUMN InitialWrite DATETIME DEFAULT 0;
+-ALTER TABLE Media ADD COLUMN ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool;
+-ALTER TABLE Media ADD COLUMN RecyclePoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool;
+-ALTER TABLE Media ADD COLUMN Enabled TINYINT DEFAULT 1;
+-ALTER TABLE Media ADD COLUMN Comment BLOB;
+-
+-ALTER TABLE JobMedia DROP COLUMN Stripe;
+-
+-ALTER TABLE Job ADD COLUMN PriorJobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job;
+-ALTER TABLE Job ADD COLUMN RealEndTime DATETIME DEFAULT 0;
+-
+-
+-
+ DELETE FROM Version;
+-INSERT INTO Version (VersionId) VALUES (10);
++INSERT INTO Version (Product, VersionId) VALUES ('bacula', 11);
+
+ END-OF-DATA
+ then
+Index: src/cats/make_sqlite_tables.in
+===================================================================
+--- src/cats/make_sqlite_tables.in (révision 5461)
++++ src/cats/make_sqlite_tables.in (copie de travail)
+@@ -283,6 +283,7 @@
+ INSERT INTO NextId (id, TableName) VALUES (1, "Job");
+
+ CREATE TABLE Version (
++ Product CHAR(8),
+ VersionId INTEGER UNSIGNED NOT NULL
+ );
+
+@@ -350,7 +351,7 @@
+
+
+ -- Initialize Version
+-INSERT INTO Version (VersionId) VALUES (10);
++INSERT INTO Version (Product, VersionId) VALUES ('bacula', 11);
+
+
+ PRAGMA default_synchronous = OFF;
+Index: src/cats/make_mysql_tables.in
+===================================================================
+--- src/cats/make_mysql_tables.in (révision 5461)
++++ src/cats/make_mysql_tables.in (copie de travail)
+@@ -328,11 +328,12 @@
+ ('p', 'Waiting on higher priority jobs');
+
+ CREATE TABLE Version (
+- VersionId INTEGER UNSIGNED NOT NULL
++ Product CHAR(8),
++ VersionId INTEGER UNSIGNED NOT NULL,
+ );
+
+ -- Initialize Version
+-INSERT INTO Version (VersionId) VALUES (10);
++INSERT INTO Version (Product, VersionId) VALUES ('bacula', 11);
+
+ END-OF-DATA
+ then