| 605 | // |
| 606 | |
| 607 | static 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 |
no test coverage detected