@@ -1602,19 +1602,26 @@ void afterInsertRelation(thread_db* tdbb, Record* record)
16021602
16031603}
16041604
1605- void afterInsertProcedure(thread_db* tdbb, Record* record)
1605+ template<class CachedType, USHORT Field, class IdType = MetaId>
1606+ void afterInsertCachedObject(thread_db* tdbb, Record* record)
16061607{
1607- if (tdbb->getAttachment()->isRWGbak())
1608- {
1609- dsc desc;
1610- bool idSet = EVL_field(nullptr, record, f_prc_id, &desc);
1611- fb_assert(idSet);
1612- if (!idSet)
1613- return;
1608+ if (!tdbb->getAttachment()->isRWGbak())
1609+ return;
16141610
1615- MetaId id = MetaId(MOV_get_long(tdbb, &desc, 0));
1616- MetadataCache::newVersion<Cached::Procedure>(tdbb, id);
1617- }
1611+ dsc desc;
1612+ bool idSet = EVL_field(nullptr, record, Field, &desc);
1613+ fb_assert(idSet);
1614+ if (!idSet)
1615+ return;
1616+
1617+ const IdType id = IdType(MOV_get_long(tdbb, &desc, 0));
1618+ MetadataCache::newVersion<CachedType>(tdbb, id);
1619+ }
1620+
1621+
1622+ void afterInsertProcedure(thread_db* tdbb, Record* record)
1623+ {
1624+ afterInsertCachedObject<Cached::Procedure, f_prc_id>(tdbb, record);
16181625}
16191626
16201627void afterUpdateProcedure(thread_db* tdbb, Record* orgRecord, Record* newRecord)
@@ -1624,19 +1631,10 @@ void afterUpdateProcedure(thread_db* tdbb, Record* orgRecord, Record* newRecord)
16241631
16251632void afterInsertFunction(thread_db* tdbb, Record* record)
16261633{
1627- if (tdbb->getAttachment()->isRWGbak())
1628- {
1629- dsc desc;
1630- bool idSet = EVL_field(nullptr, record, f_fun_id, &desc);
1631- fb_assert(idSet);
1632- if (!idSet)
1633- return;
1634-
1635- MetaId id = MetaId(MOV_get_long(tdbb, &desc, 0));
1636- MetadataCache::newVersion<Cached::Function>(tdbb, id);
1637- }
1634+ afterInsertCachedObject<Cached::Function, f_fun_id>(tdbb, record);
16381635}
16391636
1637+
16401638void afterUpdateFunction(thread_db* tdbb, Record* orgRecord, Record* newRecord)
16411639{
16421640 afterInsertFunction(tdbb, newRecord);
@@ -1705,17 +1703,12 @@ void beforeInsertCollation(thread_db* tdbb, Record* record, jrd_rel* relation)
17051703
17061704void afterInsertCollation(thread_db* tdbb, Record* record)
17071705{
1708- if (tdbb->getAttachment()->isRWGbak())
1709- {
1710- dsc desc;
1711- bool idSet = EVL_field(nullptr, record, f_coll_cs_id, &desc);
1712- fb_assert(idSet);
1713- if (!idSet)
1714- return;
1706+ afterInsertCachedObject<Cached::CharSet, f_coll_cs_id, CSetId>(tdbb, record);
1707+ }
17151708
1716- CSetId csId = CSetId(MOV_get_long( tdbb, &desc, 0));
1717- MetadataCache::newVersion<Cached::CharSet>(tdbb, csId);
1718- }
1709+ void afterInsertConstant(thread_db* tdbb, Record* record)
1710+ {
1711+ afterInsertCachedObject<Cached::Constant, f_const_id>(tdbb, record);
17191712}
17201713
17211714} // anonymous
@@ -1818,6 +1811,10 @@ void SystemTriggers::executeAfterInsertTriggers(thread_db* tdbb, jrd_rel* relati
18181811 case rel_funs:
18191812 afterInsertFunction(tdbb, record);
18201813 break;
1814+
1815+ case rel_constants:
1816+ afterInsertConstant(tdbb, record);
1817+ break;
18211818 }
18221819}
18231820
0 commit comments