diff options
author | Stan Hu <stanhu@gmail.com> | 2016-12-01 16:24:17 +0000 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2016-12-01 16:24:17 +0000 |
commit | 14545f46afb2372da248274ad11232c6e42a3c74 (patch) | |
tree | 8ac3f3f936bf453d2343ed806615cb0b0dd1fe79 /config | |
parent | 8b25392f368ce56af1470c35465d016a79b12307 (diff) | |
parent | 7839aa55f57e5eb22141ed068cf43a29aac847f6 (diff) | |
download | gitlab-ce-14545f46afb2372da248274ad11232c6e42a3c74.tar.gz |
Merge branch 'fix-optimistic-locking-for-destroy' into 'master'
Make deleting with optimistic locking respect NULL
Make deleting with optimistic locking respect NULL
For now deleting with optimistic locking is broken when
lock_version is still NULL, because Rails would try to
delete with `lock_version = 0` while in the database
the column is still `NULL`.
The monkey patches would force Rails just pass whatever
in the column, and stop Rails from casting `NULL` into `0`
when the value is read from database.
Closes #24766
See merge request !7867
Diffstat (limited to 'config')
-rw-r--r-- | config/initializers/ar_monkey_patch.rb | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/config/initializers/ar_monkey_patch.rb b/config/initializers/ar_monkey_patch.rb index 0da584626ee..6979f4641b0 100644 --- a/config/initializers/ar_monkey_patch.rb +++ b/config/initializers/ar_monkey_patch.rb @@ -52,6 +52,23 @@ module ActiveRecord raise end end + + # This is patched because we need it to query `lock_version IS NULL` + # rather than `lock_version = 0` whenever lock_version is NULL. + def relation_for_destroy + return super unless locking_enabled? + + column_name = self.class.locking_column + super.where(self.class.arel_table[column_name].eq(self[column_name])) + end + end + + # This is patched because we want `lock_version` default to `NULL` + # rather than `0` + class LockingType < SimpleDelegator + def type_cast_from_database(value) + super + end end end end |