| 2679 | // |
| 2680 | |
| 2681 | static 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); |
no test coverage detected