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

Function create_set_default_trg

src/gpre/cmd.cpp:754–1024  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

752//
753
754static void create_set_default_trg(gpre_req* request,
755 const act* action,
756 cnstrt* constraint,
757 bool on_upd_trg)
758{
759 TEXT s[512];
760 TEXT default_val[BLOB_BUFFER_SIZE];
761
762 fb_assert(request->req_actions->act_type == ACT_create_table ||
763 request->req_actions->act_type == ACT_alter_table);
764
765 gpre_lls* for_key_fld = constraint->cnstrt_fields;
766 const gpre_rel* relation = (gpre_rel*) action->act_object;
767
768 // no trigger name. It is generated by the engine
769 put_string(request, isc_dyn_def_trigger, "", (USHORT) 0);
770
771 put_numeric(request, isc_dyn_trg_type,
772 (SSHORT) (on_upd_trg ? POST_MODIFY_TRIGGER : POST_ERASE_TRIGGER));
773
774 request->add_byte(isc_dyn_sql_object);
775 put_numeric(request, isc_dyn_trg_sequence, (SSHORT) 1);
776 put_numeric(request, isc_dyn_trg_inactive, (SSHORT) 0);
777 put_cstring(request, isc_dyn_rel_name, constraint->cnstrt_referred_rel->str_string);
778
779 // the trigger blr
780
781 request->add_byte(isc_dyn_trg_blr);
782 const USHORT offset = request->req_blr - request->req_base;
783
784 request->add_word(0);
785 if (request->req_flags & REQ_blr_version4)
786 request->add_byte(blr_version4);
787 else
788 request->add_byte(blr_version5);
789
790 // for ON UPDATE TRIGGER only: generate the trigger firing condition:
791 // if prim_key.old_value != prim_key.new value.
792 // Note that the key could consist of multiple columns
793
794 if (on_upd_trg)
795 {
796 create_trg_firing_cond(request, constraint);
797 request->add_byte(blr_begin);
798 request->add_byte(blr_begin);
799 }
800
801 request->add_byte(blr_for);
802 request->add_byte(blr_rse);
803
804 // the context for the prim. key relation
805 request->add_byte(1);
806
807 request->add_byte(blr_relation);
808 put_cstring(request, 0, relation->rel_symbol->sym_string);
809 // the context for the foreign key relation
810 request->add_byte(2);
811

Callers 1

create_constraintFunction · 0.85

Calls 12

put_stringFunction · 0.85
put_cstringFunction · 0.85
create_trg_firing_condFunction · 0.85
create_matching_blrFunction · 0.85
CME_exprFunction · 0.85
CPR_errorFunction · 0.85
MET_get_domain_defaultFunction · 0.85
create_default_blrFunction · 0.85
MET_get_column_defaultFunction · 0.85
put_numericFunction · 0.70
add_byteMethod · 0.45
add_wordMethod · 0.45

Tested by

no test coverage detected