@@ -138,9 +138,6 @@ namespace
138138 { "RDB$TRIGGER_19", (UCHAR) nam_indices,
139139 RDB$TRIGGERS.RDB$TRIGGER_TYPE.PRE_ERASE, sizeof(trigger19), trigger19,
140140 0, ODS_8_0 },
141- { "RDB$TRIGGER_20", (UCHAR) nam_indices,
142- RDB$TRIGGERS.RDB$TRIGGER_TYPE.PRE_MODIFY, sizeof(trigger20),
143- trigger20, 0, ODS_8_0 },
144141 { "RDB$TRIGGER_21", (UCHAR) nam_trgs,
145142 RDB$TRIGGERS.RDB$TRIGGER_TYPE.PRE_ERASE, sizeof(trigger21), trigger21,
146143 0, ODS_8_0 },
@@ -185,9 +182,6 @@ namespace
185182 { "RDB$TRIGGER_23", 1, "cnstrnt_fld_del", ODS_8_0 },
186183 { "RDB$TRIGGER_22", 1, "check_trig_update", ODS_8_0 },
187184 { "RDB$TRIGGER_21", 1, "check_trig_del", ODS_8_0 },
188- { "RDB$TRIGGER_20", 1, "integ_index_mod", ODS_8_0 },
189- { "RDB$TRIGGER_20", 2, "integ_index_deactivate", ODS_8_0 },
190- { "RDB$TRIGGER_20", 3, "integ_deactivate_primary", ODS_8_0 },
191185 { "RDB$TRIGGER_19", 1, "integ_index_del", ODS_8_0 },
192186 { "RDB$TRIGGER_18", 1, "integ_index_seg_mod", ODS_8_0 },
193187 { "RDB$TRIGGER_17", 1, "integ_index_seg_del", ODS_8_0 },
@@ -539,7 +533,7 @@ namespace
539533 const char* users[] = {userName, "PUBLIC"};
540534 int grantOptions[] = {WITH_GRANT_OPTION, 0};
541535
542- for (unsigned i = 0; i < FB_NELEM(users); i++)
536+ for (int i = 0; i < FB_NELEM(users); i++)
543537 {
544538 STORE(REQUEST_HANDLE handle TRANSACTION_HANDLE transaction)
545539 PRIV IN RDB$USER_PRIVILEGES
@@ -1378,6 +1372,32 @@ void INI_upgrade(thread_db* tdbb)
13781372 context = "triggers";
13791373 handle.reset();
13801374
1375+ // To be able to erase system triggers we must deactivate trigger4 first
1376+ jrd_rel* relTriggers = MET_lookup_relation_id(tdbb, rel_triggers, false);
1377+ relTriggers->rel_pre_erase->clear();
1378+
1379+ FOR(REQUEST_HANDLE handle TRANSACTION_HANDLE transaction)
1380+ TRG IN RDB$TRIGGERS
1381+ WITH TRG.RDB$SYSTEM_FLAG EQ 1
1382+ {
1383+ fb_utils::exact_name(TRG.RDB$TRIGGER_NAME);
1384+ bool found = false;
1385+ for (const jrd_trg* trigger = triggers; trigger->trg_name; ++trigger)
1386+ {
1387+ if (strcmp(TRG.RDB$TRIGGER_NAME, trigger->trg_name) == 0)
1388+ {
1389+ found = true;
1390+ break;
1391+ }
1392+ }
1393+ if (!found)
1394+ {
1395+ ERASE TRG;
1396+ }
1397+ }
1398+ END_FOR
1399+ handle.reset();
1400+
13811401 for (const jrd_trg* trigger = triggers; trigger->trg_relation; ++trigger)
13821402 {
13831403 if (trigger->trg_ods_version > odsVersion)
@@ -1387,14 +1407,34 @@ void INI_upgrade(thread_db* tdbb)
13871407 context = "trigger messages";
13881408 handle.reset();
13891409
1410+ FOR(REQUEST_HANDLE handle TRANSACTION_HANDLE transaction)
1411+ MSG IN RDB$TRIGGER_MESSAGES
1412+ {
1413+ fb_utils::exact_name(MSG.RDB$TRIGGER_NAME);
1414+ bool found = false;
1415+ for (const jrd_trg* trigger = triggers; trigger->trg_name; ++trigger)
1416+ {
1417+ if (strcmp(MSG.RDB$TRIGGER_NAME, trigger->trg_name) == 0)
1418+ {
1419+ found = true;
1420+ break;
1421+ }
1422+ }
1423+ if (!found)
1424+ {
1425+ ERASE MSG;
1426+ }
1427+ }
1428+ END_FOR
1429+ handle.reset();
1430+
13901431 for (const trigger_msg* message = trigger_messages; message->trigmsg_name; ++message)
13911432 {
13921433 if (message->trg_ods_version > odsVersion)
13931434 store_message(tdbb, message, handle);
13941435 }
13951436
13961437 // Create new system generators
1397-
13981438 context = "generators";
13991439 handle.reset();
14001440
0 commit comments