Skip to content

Commit e7e439e

Browse files
author
Artyom Abakumov
committed
Add missing cache population for constants when restoring
1 parent 44b74d7 commit e7e439e

2 files changed

Lines changed: 32 additions & 32 deletions

File tree

src/jrd/SystemTriggers.epp

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

16201627
void afterUpdateProcedure(thread_db* tdbb, Record* orgRecord, Record* newRecord)
@@ -1624,19 +1631,10 @@ void afterUpdateProcedure(thread_db* tdbb, Record* orgRecord, Record* newRecord)
16241631

16251632
void 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+
16401638
void 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

17061704
void 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

src/jrd/dfw.epp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,9 @@ static ISC_STATUS getErrorNotFound(int obj_type)
490490
case obj_udf:
491491
err_code = isc_dyn_func_not_found;
492492
break;
493+
case obj_package_constant:
494+
err_code = isc_dyn_const_not_found;
495+
break;
493496
default:
494497
fb_assert(false);
495498
}

0 commit comments

Comments
 (0)