Skip to content

Commit

Permalink
Merge pull request #243 from red-soft-ru/firebird_master_fix_CORE-5972
Browse files Browse the repository at this point in the history
CORE-5972: Fix working external triggers with computed fields
  • Loading branch information
asfernandes committed Mar 11, 2020
2 parents b472581 + d99b3a7 commit d6a8768
Showing 1 changed file with 3 additions and 12 deletions.
15 changes: 3 additions & 12 deletions src/jrd/ExtEngineManager.cpp
Expand Up @@ -960,6 +960,8 @@ void ExtEngineManager::Trigger::execute(thread_db* tdbb, jrd_req* request, unsig

void ExtEngineManager::Trigger::setupComputedFields(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb)
{
SET_TDBB(tdbb);

USHORT varId = 0;

static_assert(NEW_CONTEXT_VALUE == OLD_CONTEXT_VALUE + 1, "OLD/NEW context assumption.");
Expand Down Expand Up @@ -992,18 +994,7 @@ void ExtEngineManager::Trigger::setupComputedFields(thread_db* tdbb, MemoryPool&
csb->csb_variables = vec<DeclareVariableNode*>::newVector(
*tdbb->getDefaultPool(), csb->csb_variables, varId);

ValueExprNode* exprNode = field->fld_computation;

if (context == NEW_CONTEXT_VALUE)
{
StreamType map[1];
map[OLD_CONTEXT_VALUE] = NEW_CONTEXT_VALUE; // map context 0 (OLD) to 1 (NEW)

AutoSetRestore<USHORT> autoRemapVariable(&csb->csb_remap_variable,
(csb->csb_variables ? csb->csb_variables->count() : 0) + 1);

exprNode = NodeCopier::copy(tdbb, csb, exprNode, map);
}
ValueExprNode* exprNode = FB_NEW_POOL(*tdbb->getDefaultPool()) FieldNode(*tdbb->getDefaultPool(), context, i, true);

VariableNode* varNode = FB_NEW_POOL(pool) VariableNode(pool);
varNode->varId = varId;
Expand Down

0 comments on commit d6a8768

Please sign in to comment.