summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2016-12-01 16:24:17 +0000
committerStan Hu <stanhu@gmail.com>2016-12-01 16:24:17 +0000
commit14545f46afb2372da248274ad11232c6e42a3c74 (patch)
tree8ac3f3f936bf453d2343ed806615cb0b0dd1fe79 /config
parent8b25392f368ce56af1470c35465d016a79b12307 (diff)
parent7839aa55f57e5eb22141ed068cf43a29aac847f6 (diff)
downloadgitlab-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.rb17
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