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

Function create_upd_cascade_trg

src/gpre/cmd.cpp:607–687  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

605//
606
607static void create_upd_cascade_trg( gpre_req* request, const act* action,
608 cnstrt* constraint)
609{
610 gpre_lls* for_key_fld = constraint->cnstrt_fields;
611 gpre_lls* prim_key_fld = constraint->cnstrt_referred_fields;
612 gpre_rel* relation = (gpre_rel*) action->act_object;
613
614 // no trigger name is generated here. Let the engine make one up
615 put_string(request, isc_dyn_def_trigger, "", (USHORT) 0);
616
617 put_numeric(request, isc_dyn_trg_type, (SSHORT) POST_MODIFY_TRIGGER);
618
619 request->add_byte(isc_dyn_sql_object);
620 put_numeric(request, isc_dyn_trg_sequence, (SSHORT) 1);
621 put_numeric(request, isc_dyn_trg_inactive, (SSHORT) 0);
622 put_cstring(request, isc_dyn_rel_name, constraint->cnstrt_referred_rel->str_string);
623
624 // the trigger blr
625
626 request->add_byte(isc_dyn_trg_blr);
627 const USHORT offset = request->req_blr - request->req_base;
628
629 request->add_word(0);
630 if (request->req_flags & REQ_blr_version4)
631 request->add_byte(blr_version4);
632 else
633 request->add_byte(blr_version5);
634
635 create_trg_firing_cond(request, constraint);
636
637 request->add_byte(blr_begin);
638 request->add_byte(blr_begin);
639
640 request->add_byte(blr_for);
641 request->add_byte(blr_rse);
642
643 // the new context for the prim. key relation
644 request->add_byte(1);
645
646 request->add_byte(blr_relation);
647 put_cstring(request, 0, relation->rel_symbol->sym_string);
648 // the context for the foreign key relation
649 request->add_byte(2);
650
651 // generate the blr for: foreign_key == primary_key
652 create_matching_blr(request, constraint);
653
654 request->add_byte(blr_modify);
655 request->add_byte((SSHORT) 2);
656 request->add_byte((SSHORT) 2);
657 request->add_byte(blr_begin);
658
659 for (; for_key_fld && prim_key_fld;
660 for_key_fld = for_key_fld->lls_next, prim_key_fld = prim_key_fld->lls_next)
661 {
662 const str* for_key_fld_name = (STR) for_key_fld->lls_object;
663 const str* prim_key_fld_name = (STR) prim_key_fld->lls_object;
664

Callers 1

create_constraintFunction · 0.85

Calls 7

put_stringFunction · 0.85
put_cstringFunction · 0.85
create_trg_firing_condFunction · 0.85
create_matching_blrFunction · 0.85
put_numericFunction · 0.70
add_byteMethod · 0.45
add_wordMethod · 0.45

Tested by

no test coverage detected