Skip to content

Commit fe0cc14

Browse files
committed
Follow some suggestions by @dyemanov
1 parent 97f703a commit fe0cc14

3 files changed

Lines changed: 15 additions & 9 deletions

File tree

builds/install/misc/firebird.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,10 @@
534534
# If set to 0 (default), trigger changes will be overwritten by the UPDATE.
535535
# If set to 1, error "UPDATE will overwrite changes made by trigger" will be raised.
536536
#
537+
# CAUTION!
538+
# There is no guarantee that this setting will be available in future Firebird
539+
# versions.
540+
#
537541
# Per-database configurable.
538542
#
539543
# Type: integer

src/include/firebird/impl/msg/jrd.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,3 +975,5 @@ FB_IMPL_MSG(JRD, 990, sweep_read_only, -901, "42", "000", "Database in read only
975975
FB_IMPL_MSG(JRD, 991, sweep_attach_no_cleanup, -901, "42", "000", "Attachment has no cleanup flag set")
976976
// Codes 992..997 are used in v6
977977
FB_IMPL_MSG(JRD, 998, no_user_att_while_restore, -901, "HY", "000", "User attachments are not allowed for the database being restored")
978+
// Codes 999..1004 are used in v6
979+
FB_IMPL_MSG(JRD, 1005, update_overwrite_trigger, -901, "27", "000", "UPDATE will overwrite changes made by trigger")

src/jrd/vio.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ static void protect_system_table_delupd(thread_db* tdbb, const jrd_rel* relation
174174
bool force_flag = false);
175175
static void purge(thread_db*, record_param*);
176176
static void replace_record(thread_db*, record_param*, PageStack*, const jrd_tra*);
177-
static void refresh_fk_fields(thread_db*, Record*, record_param*, record_param*);
177+
static void refresh_changed_fields(thread_db*, Record*, record_param*, record_param*);
178178
static SSHORT set_metadata_id(thread_db*, Record*, USHORT, drq_type_t, const char*);
179179
static void set_nbackup_id(thread_db*, Record*, USHORT, drq_type_t, const char*);
180180
static void set_owner_name(thread_db*, Record*, USHORT);
@@ -3329,7 +3329,7 @@ bool VIO_modify(thread_db* tdbb, record_param* org_rpb, record_param* new_rpb, j
33293329
fb_assert(!(org_rpb->rpb_runtime_flags & RPB_undo_read));
33303330

33313331
if (undo_read)
3332-
refresh_fk_fields(tdbb, old_record, org_rpb, new_rpb);
3332+
refresh_changed_fields(tdbb, old_record, org_rpb, new_rpb);
33333333
}
33343334

33353335
// If we're the system transaction, modify stuff in place. This saves
@@ -6605,20 +6605,20 @@ static void replace_record(thread_db* tdbb,
66056605
}
66066606

66076607

6608-
static void refresh_fk_fields(thread_db* tdbb, Record* old_rec, record_param* cur_rpb,
6608+
static void refresh_changed_fields(thread_db* tdbb, Record* old_rec, record_param* cur_rpb,
66096609
record_param* new_rpb)
66106610
{
66116611
/**************************************
66126612
*
6613-
* r e f r e s h _ f k _ f i e l d s
6613+
* r e f r e s h _ c h a n g e d _ f i e l d s
66146614
*
66156615
**************************************
66166616
*
66176617
* Functional description
66186618
* Update new_rpb with foreign key fields values changed by cascade triggers.
66196619
* Consider self-referenced foreign keys only.
6620-
* Also, if UpdateOverwriteMode is set to 1, raise error when foreign key fields
6621-
* were changed by user triggers.
6620+
* Also, if UpdateOverwriteMode is set to 1, raise error when non self-referenced
6621+
* foreign key fields were changed by user triggers.
66226622
*
66236623
* old_rec - old record before modify
66246624
* cur_rpb - just read record with possibly changed fields
@@ -6667,13 +6667,13 @@ static void refresh_fk_fields(thread_db* tdbb, Record* old_rec, record_param* cu
66676667
if (overwriteMode == 0)
66686668
return;
66696669

6670-
if (cur_rpb->rpb_record->getFormat() == old_rec->getFormat())
6670+
if (cur_rpb->rpb_record->getFormat()->fmt_version == old_rec->getFormat()->fmt_version)
66716671
{
66726672
if (memcmp(cur_rpb->rpb_address, old_rec->getData(), cur_rpb->rpb_length) == 0)
66736673
return;
66746674

66756675
fb_assert(overwriteMode == 1);
6676-
ERR_post(Arg::Gds(isc_random) << "UPDATE will overwrite changes made by trigger");
6676+
ERR_post(Arg::Gds(isc_update_overwrite_trigger)); // UPDATE will overwrite changes made by trigger
66776677
}
66786678
// Else compare field-by-field
66796679
}
@@ -6698,7 +6698,7 @@ static void refresh_fk_fields(thread_db* tdbb, Record* old_rec, record_param* cu
66986698
{
66996699
// Record was modified by trigger.
67006700
fb_assert(overwriteMode == 1);
6701-
ERR_post(Arg::Gds(isc_random) << "UPDATE will overwrite changes made by trigger");
6701+
ERR_post(Arg::Gds(isc_update_overwrite_trigger)); // UPDATE will overwrite changes made by trigger
67026702
}
67036703
}
67046704
else

0 commit comments

Comments
 (0)