diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 14:18:50 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 14:18:50 +0300 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /config/initializers/kaminari_active_record_relation_methods_with_limit.rb | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'config/initializers/kaminari_active_record_relation_methods_with_limit.rb')
-rw-r--r-- | config/initializers/kaminari_active_record_relation_methods_with_limit.rb | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/config/initializers/kaminari_active_record_relation_methods_with_limit.rb b/config/initializers/kaminari_active_record_relation_methods_with_limit.rb index cc20b83b234..55b98cda520 100644 --- a/config/initializers/kaminari_active_record_relation_methods_with_limit.rb +++ b/config/initializers/kaminari_active_record_relation_methods_with_limit.rb @@ -5,9 +5,10 @@ module Kaminari # This is a modified version of # https://github.com/kaminari/kaminari/blob/c5186f5d9b7f23299d115408e62047447fd3189d/kaminari-activerecord/lib/kaminari/activerecord/active_record_relation_methods.rb#L17-L41 - # that limit the COUNT query to 10,000 to avoid query timeouts. + # that limit the COUNT query to a configurable value to avoid query timeouts. + # The default limit value is 10,000 records # rubocop: disable Gitlab/ModuleWithInstanceVariables - def total_count_with_limit(column_name = :all, _options = nil) #:nodoc: + def total_count_with_limit(column_name = :all, options = {}) #:nodoc: return @total_count if defined?(@total_count) && @total_count # There are some cases that total count can be deduced from loaded records @@ -18,13 +19,14 @@ module Kaminari return @total_count = (current_page - 1) * limit_value + @records.length if @records.any? && (@records.length < limit_value) end + limit = options.fetch(:limit, MAX_COUNT_LIMIT).to_i # #count overrides the #select which could include generated columns referenced in #order, so skip #order here, where it's irrelevant to the result anyway c = except(:offset, :limit, :order) # Remove includes only if they are irrelevant c = c.except(:includes) unless references_eager_loaded_tables? # .group returns an OrderedHash that responds to #count # The following line was modified from `c = c.count(:all)` - c = c.limit(MAX_COUNT_LIMIT + 1).count(column_name) + c = c.limit(limit + 1).count(column_name) @total_count = if c.is_a?(Hash) || c.is_a?(ActiveSupport::OrderedHash) c.count |