Project

General

Profile

1 8565 leinfelder
/**
2
 * Restore archived documents
3
 */
4
5 8574 leinfelder
/*
6
 * Gather most recent docids from xml_revisions that
7
 * TODO: hone the criteria for selecting documents to restore
8
 *  1. have systemMetadata.archived=true
9
 * 	2. have non-null obsoleted_by (they were updated by a newer version)
10
 *  3. do not exist in xml_documents (they were incorrectly archived)
11
 *  4. have access_log event='delete' by the CN?
12 8565 leinfelder
 * */
13
CREATE TABLE restore_documents (
14
	docid VARCHAR(250),
15
	rev INT8,
16
	rootnodeid INT8,
17
	guid text
18
);
19
INSERT INTO restore_documents (
20
	docid,
21
	rev,
22
	rootnodeid,
23
	guid
24
)
25
SELECT
26
	x.docid,
27
	x.rev,
28
	x.rootnodeid,
29
	id.guid
30
FROM
31
	xml_revisions x,
32
	identifier id,
33
	systemMetadata sm
34
WHERE x.docid = id.docid
35
AND x.rev = id.rev
36
AND id.guid = sm.guid
37
AND sm.archived = true
38 8572 leinfelder
AND sm.obsoleted_by is not null
39 8574 leinfelder
AND NOT EXISTS (SELECT * FROM xml_documents xd WHERE x.docid = xd.docid)
40
AND x.docid || '.' || x.rev IN
41
(SELECT docid
42
FROM access_log al
43
WHERE al.event = 'delete'
44
AND al.date_logged >= '20140101'
45
AND al.principal LIKE '%CNORC%')
46 8572 leinfelder
ORDER BY id.guid;
47 8565 leinfelder
48 8574 leinfelder
SELECT docid
49
FROM access_log al
50
WHERE al.event = 'delete'
51
AND al.date_logged >= '20140101'
52
AND al.principal LIKE '%CNORC%';
53
54 8565 leinfelder
/* Move xml_revisions back into xml_documents for the affected docids
55
 */
56
INSERT INTO xml_documents
57
	(docid, rootnodeid, docname, doctype,
58
	user_owner, user_updated, date_created, date_updated,
59
	server_location, rev, public_access, catalog_id)
60
SELECT
61
	docid, rootnodeid, docname, doctype,
62
	user_owner, user_updated , date_created, date_updated,
63
	server_location, rev, public_access, catalog_id
64
FROM xml_revisions x, restore_documents rd
65
WHERE x.rootnodeid = rd.rootnodeid;
66
67
/* Move xml_nodes_revisions back into xml_nodes for the affected docids
68
 */
69
INSERT INTO xml_nodes
70
	(nodeid, nodeindex, nodetype, nodename, nodeprefix,
71
	nodedata, parentnodeid, rootnodeid, docid, date_created,
72
	date_updated, nodedatanumerical, nodedatadate)
73
SELECT
74
	nodeid, nodeindex, nodetype, nodename, nodeprefix,
75
	nodedata, parentnodeid, rootnodeid, docid, date_created,
76
	date_updated, nodedatanumerical, nodedatadate
77
FROM xml_nodes_revisions x, restore_documents rd
78
WHERE x.rootnodeid = rd.rootnodeid;
79
80 8574 leinfelder
/* Ensure ALL previous revisions of docids that
81
 * have been obsoleted_by something else
82
 * do not also have archived=true flag set
83 8565 leinfelder
 * (Avoids encountering this issue again)
84
 */
85
UPDATE systemMetadata sm
86
SET sm.archived = false
87 8574 leinfelder
FROM xml_documents x
88
	identifier id
89
WHERE x.docid = id.docid
90
AND id.guid = sm.guid
91
AND sm.obsoleted_by IS NOT null;
92 8565 leinfelder
93
/* Clean up
94
 */
95
DROP TABLE restore_documents;
96
97 8555 leinfelder
/*
98
 * update the database version
99
 */
100
UPDATE db_version SET status=0;
101
102
INSERT INTO db_version (version, status, date_created)
103
  VALUES ('2.4.0', 1, CURRENT_DATE);