1 -- SQL script for upgrading the local database to the format expected for LBS
4 -- This script should be loaded after connecting to the database to be
7 -- Database schema changes: the size and mtime columns were added to the
8 -- segments table, and the segments_used table was added. Rather than upgrade
9 -- the segments table in-place, we create a new table and then rename it over
10 -- the old segments table. The intent column was also added to the snapshots
12 create table segments_new (
13 segmentid integer primary key,
14 segment text unique not null,
21 create table segments_used (
22 snapshotid integer not null,
23 segmentid integer not null,
26 create unique index segments_used_index
27 on segments_used(snapshotid, segmentid);
29 alter table snapshots add column intent real;
31 -- Initialize the intent column; set all old snapshots to have intent 1
32 -- (intended to be a daily snapshot).
33 update snapshots set intent = 1;
35 -- Compute the size of each of the segments, if possible, based on our
36 -- knowledge of the objects stored in them.
37 insert into segments_new
38 select segmentid, segment, path, checksum, mtime, size
40 (select segmentid, segment, path, checksum from segments)
42 (select segmentid, sum(size) as size, max(timestamp) as mtime
43 from block_index group by segmentid)
47 alter table segments_new rename to segments;
49 -- Populate the segments_used table based upon data contained in
50 -- snapshot_contents--this is roughly the same calculation that is actually
51 -- done, only now this calculation is done when a snapshot is created.
52 insert into segments_used
53 select snapshotid, segmentid, cast(used as real) / size as utilization
55 (select snapshotid, segmentid, sum(size) as used
56 from snapshot_contents join block_index using (blockid)
57 group by snapshotid, segmentid)
59 (select segmentid, size from segments)
62 -- The snapshot_contents table is obsolete.
63 drop table snapshot_contents;
65 -- Upgrade database views.
66 drop view cleaning_order;
67 drop view segment_info;
69 create view segment_info as
70 select segmentid, mtime, size, cast(size * utilization as integer) as used,
73 (select segmentid, max(utilization) as utilization
74 from segments_used group by segmentid)