bugzilla-4intranet/extensions/bugzilla-2-to-3-db-fix.sql

51 lines
3.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

-- SQL скрипт изменений требуемых в нашей боевой базе багзиллы при обновлении с 2.x до 3.х
-- Возможно, добавятся ещё новые кривости, но пока так.
set names utf8;
-- ДО ./checksetup.pl:
alter table components change wiki_url wiki_url1 varchar(255) not null;
-- ПОСЛЕ ./checksetup.pl:
alter table components drop wiki_url;
alter table components change wiki_url1 wiki_url varchar(255) not null;
-- Убираем старые юзерские настройки
create temporary table tmp2 as select user_id, 'post_bug_submit_action' AS setting_name, (case when setting_value='on' then 'next_bug' else 'same_bug' end) as setting_value from profile_setting where setting_name='go_to_next_bug';
replace into profile_setting (user_id, setting_name, setting_value) select * from tmp2;
drop table tmp2;
delete from profile_setting where setting_name in ('go_to_next_bug', 'remind_me_about_flags', 'create_bug_resolved', 'create_bug_assigned');
update profile_setting set setting_name='remind_me_about_flags' where setting_name='remind_me_about_requests';
delete from setting_value where name in ('go_to_next_bug', 'remind_me_about_requests', 'create_bug_resolved', 'create_bug_assigned');
delete from setting where name in ('go_to_next_bug', 'remind_me_about_requests', 'create_bug_resolved', 'create_bug_assigned');
-- Дальше ДОЛЖНО уже быть создано поле cf_agreement (договор) зависимое от продукта
-- Наполняем значениями поле "Договор"
insert into cf_agreement (value, sortkey, isactive, visibility_value_id)
select name, sortkey, act, (case when count(`name`) > 1 then NULL else `vis` end)
from (
select
(case when instr(name,' (') > 0 then substr(`name`,1,instr(name,' (')-1) else `name` end) as `name`,
sortkey,
1 as act,
product_id as vis
from agreements
where name not in ('!Без договора', '--', '---', '--- пусто', 'Unspec')
) as `t0`
group by (case when instr(name,' (') > 0 then substr(`name`,1,instr(name,' (')-1) else `name` end);
-- Устанавливаем правильные sortkey, такие, чтобы ограниченные значения были вверху,
create temporary table tmp1 (id int not null auto_increment primary key, sortkey int not null default 0);
insert into tmp1 (sortkey) select distinct sortkey from cf_agreement where visibility_value_id IS NOT NULL order by sortkey;
update cf_agreement set sortkey=5+5*(select tmp1.id from tmp1 where tmp1.sortkey=cf_agreement.sortkey) where visibility_value_id IS NOT NULL;
drop table tmp1;
-- А неограниченные - внизу
create temporary table tmp1 (id int not null auto_increment primary key, sortkey int not null default 0);
insert into tmp1 (sortkey) select distinct sortkey from cf_agreement where visibility_value_id IS NULL order by sortkey;
update cf_agreement set sortkey=200+5*(select tmp1.id from tmp1 where tmp1.sortkey=cf_agreement.sortkey) where visibility_value_id IS NULL;
drop table tmp1;
-- А --- между ними
update cf_agreement set sortkey=195 where value='---';
-- Записываем значения договора для всех багов
update bugs, agreements, cf_agreement
set bugs.cf_agreement=(case when instr(agreements.name,' (') > 0 then substr(agreements.`name`,1,instr(agreements.name,' (')-1) else agreements.`name` end)
where bugs.agreement_id=agreements.id
and agreements.name not in ('!Без договора', '--', '---', '--- пусто', 'Unspec');
-- Удаляем старое поле "agreement" из fielddefs
update bugs_activity set fieldid=(select fielddefs.id from fielddefs where fielddefs.name='cf_agreement') where fieldid=(select fielddefs.id from fielddefs where fielddefs.name='agreement');
delete from fielddefs where name='agreement';