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

Function put_view_trigger_blr

src/gpre/cmd.cpp:2681–2745  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2679//
2680
2681static void put_view_trigger_blr(gpre_req* request,
2682 const gpre_rel* relation,
2683 USHORT blr_operator,
2684 gpre_trg* trigger,
2685 gpre_nod* view_boolean, gpre_ctx** contexts)
2686{
2687 gpre_rse* node = (gpre_rse*) trigger->trg_boolean;
2688 request->add_byte(blr_operator);
2689 const USHORT offset = request->req_blr - request->req_base;
2690 request->add_word(0);
2691 if (request->req_flags & REQ_blr_version4)
2692 request->add_byte(blr_version4);
2693 else
2694 request->add_byte(blr_version5);
2695 request->add_byte(blr_begin);
2696
2697 if (trigger->trg_type == PRE_MODIFY_TRIGGER)
2698 {
2699 request->add_byte(blr_for);
2700 CME_rse(node, request);
2701
2702 // For the boolean, replace all fields in the rse and the view, with the
2703 // equivalent view field_name, for remaining fields in rse, leave them
2704 // alone.
2705
2706 replace_field_names(view_boolean, node->rse_fields, relation->rel_fields, false, contexts);
2707
2708 request->add_byte(blr_begin);
2709 request->add_byte(blr_if);
2710 CME_expr(view_boolean, request);
2711
2712 request->add_byte(blr_begin);
2713 request->add_byte(blr_end);
2714
2715 // Generate the action for the trigger to be abort
2716
2717 request->add_byte(blr_abort);
2718 put_short_cstring(request, blr_gds_code, "check_constraint");
2719 request->add_byte(blr_end);
2720 request->add_byte(blr_end);
2721 request->add_byte(blr_eoc);
2722 } // end of PRE_MODIFY_TRIGGER trigger
2723
2724 if (trigger->trg_type == PRE_STORE_TRIGGER)
2725 {
2726 replace_field_names(view_boolean, node->rse_fields, relation->rel_fields, true, contexts);
2727
2728 request->add_byte(blr_if);
2729 CME_expr(view_boolean, request);
2730
2731 request->add_byte(blr_begin);
2732 request->add_byte(blr_end);
2733
2734 // Generate the action for the trigger to be abort
2735
2736 request->add_byte(blr_abort);
2737 put_short_cstring(request, blr_gds_code, "check_constraint");
2738 request->add_byte(blr_end);

Callers 1

create_view_triggerFunction · 0.85

Calls 6

replace_field_namesFunction · 0.85
CME_exprFunction · 0.85
put_short_cstringFunction · 0.85
CME_rseFunction · 0.70
add_byteMethod · 0.45
add_wordMethod · 0.45

Tested by

no test coverage detected