MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / ExtTriggerNode

Class ExtTriggerNode

src/jrd/ExtEngineManager.cpp:456–508  ·  view source on GitHub ↗

External trigger node.

Source from the content-addressed store, hash-verified

454
455 // External trigger node.
456 class ExtTriggerNode final : public TypedNode<StmtNode, StmtNode::TYPE_EXT_TRIGGER>
457 {
458 public:
459 ExtTriggerNode(MemoryPool& pool, const ExtEngineManager::Trigger* aTrigger)
460 : TypedNode<StmtNode, StmtNode::TYPE_EXT_TRIGGER>(pool),
461 trigger(aTrigger)
462 {
463 }
464
465 string internalPrint(NodePrinter& printer) const
466 {
467 StmtNode::internalPrint(printer);
468 return "ExtTriggerNode";
469 }
470
471 void genBlr(DsqlCompilerScratch* /*dsqlScratch*/)
472 {
473 }
474
475 ExtTriggerNode* pass1(thread_db* /*tdbb*/, CompilerScratch* /*csb*/)
476 {
477 return this;
478 }
479
480 ExtTriggerNode* pass2(thread_db* /*tdbb*/, CompilerScratch* /*csb*/)
481 {
482 return this;
483 }
484
485 const StmtNode* execute(thread_db* tdbb, Request* request, ExeState* /*exeState*/) const
486 {
487 if (request->req_operation == Request::req_evaluate)
488 {
489 trigger->execute(tdbb, request, request->req_trigger_action,
490 getRpb(request, 0), getRpb(request, 1));
491
492 request->req_operation = Request::req_return;
493 }
494
495 return parentStmt;
496 }
497
498 private:
499 static record_param* getRpb(Request* request, USHORT n)
500 {
501 return request->req_rpb.getCount() > n && request->req_rpb[n].rpb_number.isValid() ?
502 &request->req_rpb[n] : NULL;
503 }
504
505
506 private:
507 const ExtEngineManager::Trigger* trigger;
508 };
509}
510
511

Callers 1

makeTriggerMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected