]> git.sur5r.net Git - bacula/bacula/blob - bacula/patches/testing/project-accurate-backup.sql
ebl accurate project update
[bacula/bacula] / bacula / patches / testing / project-accurate-backup.sql
1
2 CREATE TABLE CurrentBackupId
3 (
4      BackupId          serial     not null,
5      ClientId          integer    not null,
6      JobName           text       not null,
7      FileSetId         integer    not null,
8      primary key (BackupId)
9 );
10
11 -- Serait bien de prendre la meme table pour
12 -- les File et le CurrentBackup...
13 -- Mais y'a des problemes pour les prunes
14
15 CREATE TABLE CurrentBackup
16 (
17      Id               serial     not null,
18      BackupId         integer    not null,
19      FullMark         char(1)    default 0,
20      PathId           integer    not null,
21      FilenameId       integer    not null,
22      MarkId           integer    not null  default 0,
23      LStat            text       not null,
24      md5              text       not null,
25      primary key (Id)
26 );
27
28 CREATE INDEX currentbackup_fileid on CurrentBackup (BackupId);
29 CREATE INDEX currentbackup_idx on currentbackup (FilenameId, PathId);
30 CREATE INDEX currentbackup_idx1 on currentbackup (FilenameId);
31 CREATE INDEX currentbackup_idx2 on currentbackup (PathId);
32
33
34 CREATE TEMPORARY TABLE batch (path varchar,
35                               name varchar,
36                               lstat varchar,
37                               md5 varchar);
38
39 -- On batch insert dans la table temporaire
40
41 -- il faut trouver les fichiers manquant
42 -- INSERT des nouveaux, UPDATE des anciens, SELECT pour trouver les deletes
43
44 UPDATE CurrentBackup SET MarkId = 1 
45  WHERE CurrentBackup.Id IN (
46        SELECT CurrentBackup.Id 
47          FROM      batch 
48               JOIN Filename USING (Name) 
49               JOIN Path     USING (Path)
50               JOIN CurrentBackup 
51                 ON (Filename.FilenameId = CurrentBackup.FilenameId 
52                     AND
53                     Path.PathId = CurrentBackup.PathId)
54          WHERE CurrentBackup.BackupId = 1
55      )
56
57 INSERT INTO CurrentBackup (BackupId, FullMark, PathId, FilenameId, LStat, MD5)
58   (SELECT CurrentBackup.BackupId, 'F', Path.PathId, Filename.FilenameId, 
59           batch.LStat, batch.MD5
60      FROM batch        
61           JOIN Path     USING (Path) 
62           JOIN Filename USING (Name) 
63           LEFT OUTER JOIN CurrentBackup 
64                 ON (Filename.FilenameId = CurrentBackup.FilenameId 
65                     AND Path.PathId = CurrentBackup.PathId 
66                     AND CurrentBackup.BackupId = 1)
67          WHERE BackupId IS NULL
68              
69   )
70
71 -- il faut trouver les fichiers modifies
72 -- Le champs LStat n'est plus le meme
73 SELECT * 
74   FROM      batch 
75        JOIN Path     USING (Path) 
76        JOIN Filename USING (Name) 
77        JOIN CurrentBackup USING (FilenameId, PathId)
78
79  WHERE CurrentBackup.LStat != batch.LStat
80    AND CurrentBackup.BackupId = 1
81
82 -- il faut mettre a jour la liste des fichiers
83