diff options
Diffstat (limited to 'app/models/application_record.rb')
-rw-r--r-- | app/models/application_record.rb | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 6ffb9b7642a..3542bb90dc0 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -52,6 +52,16 @@ class ApplicationRecord < ActiveRecord::Base end end + # Start a new transaction with a shorter-than-usual statement timeout. This is + # currently one third of the default 15-second timeout + def self.with_fast_statement_timeout + transaction(requires_new: true) do + connection.exec_query("SET LOCAL statement_timeout = 5000") + + yield + end + end + def self.safe_find_or_create_by(*args, &block) safe_ensure_unique(retries: 1) do find_or_create_by(*args, &block) @@ -61,4 +71,8 @@ class ApplicationRecord < ActiveRecord::Base def self.underscore Gitlab::SafeRequestStore.fetch("model:#{self}:underscore") { self.to_s.underscore } end + + def self.where_exists(query) + where('EXISTS (?)', query.select(1)) + end end |