-- -- Upgrade script from 4.1 to 4.7 -- -- Changes lang_messages so it uses locale instead of language -- by looking up the default locale in ad_locales. -- -- There two things that could go wrong here: -- -- 1. There could be no locale at all for some language -- in that case the scripts adds a new locale -- 2. There could be no default locale -- the script makes sure that there is one default locale -- pr. language -- -- @author Christian Hvid -- -- Make sure that there is a default for every language UPDATE ad_locales SET default_p = 't' WHERE (SELECT count(*) FROM ad_locales AS a WHERE a.language = ad_locales.language AND default_p='t') = 0; -- Make sure that there is a locale for every language used in lang_messages INSERT INTO ad_locales (language, locale, country, label, nls_language, default_p) SELECT language, language || '_' || UPPER(language) as locale, '??' as country, 'Locale created by upgrade-4.1-4.7 for language ' || language as label, '??' as nls_language, 't' as default_p FROM ((SELECT DISTINCT lang as language FROM lang_messages) EXCEPT (SELECT DISTINCT language FROM ad_locales)) as new_languages; create table temp ( key varchar(200), lang varchar(2), message text, registered_p boolean ); INSERT INTO temp(key, lang, message, registered_p) SELECT key, lang, message, registered_p FROM lang_messages; DROP TABLE lang_messages; create table lang_messages ( key varchar(200), locale varchar(30) constraint lang_messages_locale_fk references ad_locales(locale) constraint lang_messages_locale_nn not null, message text, registered_p boolean, constraint lang_messages_pk primary key (key, locale) ); INSERT INTO lang_messages(key, locale, message, registered_p) SELECT key, ad_locales.locale, message, registered_p FROM temp, ad_locales WHERE cast (ad_locales.language as text) = cast (temp.lang as text) AND ad_locales.default_p = 't'; DROP TABLE temp;