@@ -115,7 +115,7 @@ static int blocking_ast_relation(void*);
115115static int partners_ast_relation(void*);
116116static int rescan_ast_relation(void*);
117117static ULONG get_rel_flags_from_FLAGS(USHORT);
118- static void get_trigger(thread_db*, jrd_rel*, bid*, bid*, TrigVector**, const TEXT*, FB_UINT64,
118+ static void get_trigger(thread_db*, jrd_rel*, bid*, bid*, TrigVector**, const TEXT*, FB_UINT64, bool,
119119 USHORT, const MetaName&, const string&, const bid*, TriState ssDefiner);
120120static bool get_type(thread_db*, USHORT*, const UCHAR*, const TEXT*);
121121static void lookup_view_contexts(thread_db*, jrd_rel*);
@@ -124,7 +124,7 @@ static ValueExprNode* parse_field_default_blr(thread_db* tdbb, bid* blob_id);
124124static BoolExprNode* parse_field_validation_blr(thread_db* tdbb, bid* blob_id, const MetaName name);
125125static bool resolve_charset_and_collation(thread_db*, USHORT*, const UCHAR*, const UCHAR*);
126126static void save_trigger_data(thread_db*, TrigVector**, jrd_rel*, Statement*, blb*, blb*,
127- const TEXT*, FB_UINT64, USHORT, const MetaName&, const string&,
127+ const TEXT*, FB_UINT64, bool, USHORT, const MetaName&, const string&,
128128 const bid*, TriState ssDefiner);
129129static void scan_partners(thread_db*, jrd_rel*);
130130static bool verify_TRG_ignore_perm(thread_db*, const MetaName&);
@@ -2003,6 +2003,7 @@ void MET_load_trigger(thread_db* tdbb,
20032003 triggers,
20042004 TRG.RDB$TRIGGER_NAME,
20052005 TRG.RDB$TRIGGER_TYPE,
2006+ (bool) TRG.RDB$SYSTEM_FLAG,
20062007 trig_flags,
20072008 engine,
20082009 entryPoint,
@@ -2023,6 +2024,7 @@ void MET_load_trigger(thread_db* tdbb,
20232024 triggers + trigger_action,
20242025 TRG.RDB$TRIGGER_NAME,
20252026 (UCHAR) trigger_action,
2027+ (bool) TRG.RDB$SYSTEM_FLAG,
20262028 trig_flags,
20272029 engine,
20282030 entryPoint,
@@ -4545,7 +4547,7 @@ ULONG MET_get_rel_flags_from_TYPE(USHORT type)
45454547static void get_trigger(thread_db* tdbb, jrd_rel* relation,
45464548 bid* blob_id, bid* debug_blob_id, TrigVector** ptr,
45474549 const TEXT* name, FB_UINT64 type,
4548- USHORT flags,
4550+ bool sys_trigger, USHORT flags,
45494551 const MetaName& engine, const string& entryPoint,
45504552 const bid* body, TriState ssDefiner)
45514553{
@@ -4575,7 +4577,7 @@ static void get_trigger(thread_db* tdbb, jrd_rel* relation,
45754577 debugInfoBlob = blb::open(tdbb, attachment->getSysTransaction(), debug_blob_id);
45764578
45774579 save_trigger_data(tdbb, ptr, relation, NULL, blrBlob, debugInfoBlob,
4578- name, type, flags, engine, entryPoint, body, ssDefiner);
4580+ name, type, sys_trigger, flags, engine, entryPoint, body, ssDefiner);
45794581}
45804582
45814583
@@ -4927,7 +4929,7 @@ static bool resolve_charset_and_collation(thread_db* tdbb,
49274929static void save_trigger_data(thread_db* tdbb, TrigVector** ptr, jrd_rel* relation,
49284930 Statement* statement, blb* blrBlob, blb* debugInfoBlob,
49294931 const TEXT* name, FB_UINT64 type,
4930- USHORT flags,
4932+ bool sys_trigger, USHORT flags,
49314933 const MetaName& engine, const string& entryPoint,
49324934 const bid* body, TriState ssDefiner)
49334935{
@@ -4984,6 +4986,7 @@ static void save_trigger_data(thread_db* tdbb, TrigVector** ptr, jrd_rel* relati
49844986
49854987 t.type = type;
49864988 t.flags = flags;
4989+ t.sysTrigger = sys_trigger;
49874990 t.statement = statement;
49884991 t.relation = relation;
49894992 t.engine = engine;
@@ -5179,7 +5182,18 @@ void MET_store_dependencies(thread_db* tdbb,
51795182
51805183 SET_TDBB(tdbb);
51815184
5182- const bool checkTableScope = dependency_type == obj_computed;
5185+ const Trigger* t = nullptr;
5186+ const bool checkTableScope =
5187+ (dependency_type == obj_computed) ||
5188+ (dependency_type == obj_trigger) && (dep_rel != 0) &&
5189+ (
5190+ (t = findTrigger(dep_rel->rel_pre_erase, object_name)) ||
5191+ (t = findTrigger(dep_rel->rel_pre_modify, object_name)) ||
5192+ (t = findTrigger(dep_rel->rel_pre_store, object_name)) ||
5193+ (t = findTrigger(dep_rel->rel_post_erase, object_name)) ||
5194+ (t = findTrigger(dep_rel->rel_post_modify, object_name)) ||
5195+ (t = findTrigger(dep_rel->rel_post_store, object_name))
5196+ ) && t && (t->sysTrigger);
51835197
51845198 while (dependencies.hasData())
51855199 {
0 commit comments