summaryrefslogtreecommitdiff
path: root/www/wiki/maintenance/mssql/archives/patch-recentchanges-drop-fks.sql
blob: 24f78f68bb5b31fb626fbbdaa5649c6fc83b0f0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
DECLARE @base nvarchar(max),
	@SQL nvarchar(max),
	@id sysname;--

SET @base = 'ALTER TABLE /*_*/recentchanges DROP CONSTRAINT ';--

SELECT @id = fk.name
FROM sys.foreign_keys fk
JOIN sys.foreign_key_columns fkc
	ON fkc.constraint_object_id = fk.object_id
JOIN sys.columns c
	ON c.column_id = fkc.parent_column_id
	AND c.object_id = fkc.parent_object_id
WHERE
	fk.parent_object_id = OBJECT_ID('/*_*/recentchanges')
	AND fk.referenced_object_id = OBJECT_ID('/*_*/page')
	AND c.name = 'rc_cur_id';--

SET @SQL = @base + @id;--

EXEC sp_executesql @SQL;--

SELECT @id = fk.name
FROM sys.foreign_keys fk
JOIN sys.foreign_key_columns fkc
	ON fkc.constraint_object_id = fk.object_id
JOIN sys.columns c
	ON c.column_id = fkc.parent_column_id
	AND c.object_id = fkc.parent_object_id
WHERE
	fk.parent_object_id = OBJECT_ID('/*_*/recentchanges')
	AND fk.referenced_object_id = OBJECT_ID('/*_*/revision')
	AND c.name = 'rc_this_oldid';--

SET @SQL = @base + @id;--

EXEC sp_executesql @SQL;--

SELECT @id = fk.name
FROM sys.foreign_keys fk
JOIN sys.foreign_key_columns fkc
	ON fkc.constraint_object_id = fk.object_id
JOIN sys.columns c
	ON c.column_id = fkc.parent_column_id
	AND c.object_id = fkc.parent_object_id
WHERE
	fk.parent_object_id = OBJECT_ID('/*_*/recentchanges')
	AND fk.referenced_object_id = OBJECT_ID('/*_*/revision')
	AND c.name = 'rc_last_oldid';--

SET @SQL = @base + @id;--

EXEC sp_executesql @SQL;--

-- while we're at it, let's fix up the other foreign key constraints on recentchanges
-- as future patches touch constraints on other tables, they'll take the time to update constraint names there as well
ALTER TABLE /*_*/recentchanges DROP CONSTRAINT FK_rc_logid_log_id;--
ALTER TABLE /*_*/recentchanges ADD CONSTRAINT rc_logid__log_id__fk FOREIGN KEY (rc_logid) REFERENCES /*_*/logging(log_id) ON DELETE CASCADE;--

SELECT @id = fk.name
FROM sys.foreign_keys fk
JOIN sys.foreign_key_columns fkc
	ON fkc.constraint_object_id = fk.object_id
JOIN sys.columns c
	ON c.column_id = fkc.parent_column_id
	AND c.object_id = fkc.parent_object_id
WHERE
	fk.parent_object_id = OBJECT_ID('/*_*/recentchanges')
	AND fk.referenced_object_id = OBJECT_ID('/*_*/mwuser')
	AND c.name = 'rc_user';--

SET @SQL = @base + @id;--

EXEC sp_executesql @SQL;--

ALTER TABLE /*_*/recentchanges ADD CONSTRAINT rc_user__user_id__fk FOREIGN KEY (rc_user) REFERENCES /*_*/mwuser(user_id);