ExtEngineManager::Trigger::Trigger(thread_db* tdbb, MemoryPool& pool, ExtEngineManager* aExtManager, ExternalEngine* aEngine, RoutineMetadata* aMetadata, ExternalTrigger* aTrigger, const Jrd::Trigger* aTrg) : extManager(aExtManager), engine(aEngine), metadata(aMetadata), trigger(aTrigger), trg(aTrg), fieldsPos(pool), database(tdbb->getDatabase()) { dsc shortDesc; shortDesc.makeShort(0); jrd_rel* relation = trg->relation; if (relation) { GenericMap<Left<MetaName, USHORT> > fieldsMap; for (FB_SIZE_T i = 0; i < relation->rel_fields->count(); ++i) { jrd_fld* field = (*relation->rel_fields)[i]; if (field) fieldsMap.put(field->fld_name, (USHORT) i); } format = Routine::createFormat(pool, metadata->triggerFields, false); LocalStatus status; for (unsigned i = 0; i < format->fmt_count / 2u; ++i) { const char* fieldName = metadata->triggerFields->getField(&status, i); status.check(); USHORT pos; if (!fieldsMap.get(fieldName, pos)) fb_assert(false); else fieldsPos.add(pos); } } }