aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2017-09-07 17:30:55 -0600
committerGitHub <noreply@github.com>2017-09-07 17:30:55 -0600
commit01424eeec4038b57d7380fb81454a9a29c881416 (patch)
treee3566ea074f62300a66d8c2726c6dcea00c516fe /activerecord
parentb442cb0d915f64315e6c43aa19719df74a29fe5e (diff)
parent338127869a4b62ddda5c75647ac1fb928361db70 (diff)
downloadrails-01424eeec4038b57d7380fb81454a9a29c881416.tar.gz
rails-01424eeec4038b57d7380fb81454a9a29c881416.tar.bz2
rails-01424eeec4038b57d7380fb81454a9a29c881416.zip
Merge pull request #30524 from tgxworld/recover_plucK_performance
PERF: Recover `ActiveRecord::pluck` performance.
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/relation/query_methods.rb31
1 files changed, 17 insertions, 14 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index bdc5c27328..c88603fde2 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -1172,21 +1172,24 @@ module ActiveRecord
end
alias having_clause_factory where_clause_factory
+ DEFAULT_VALUES = {
+ create_with: FROZEN_EMPTY_HASH,
+ readonly: false,
+ where: Relation::WhereClause.empty,
+ having: Relation::WhereClause.empty,
+ from: Relation::FromClause.empty
+ }
+
+ Relation::MULTI_VALUE_METHODS.each do |value|
+ DEFAULT_VALUES[value] ||= FROZEN_EMPTY_ARRAY
+ end
+
+ Relation::SINGLE_VALUE_METHODS.each do |value|
+ DEFAULT_VALUES[value] = nil if DEFAULT_VALUES[value].nil?
+ end
+
def default_value_for(name)
- case name
- when :create_with
- FROZEN_EMPTY_HASH
- when :readonly
- false
- when :where, :having
- Relation::WhereClause.empty
- when :from
- Relation::FromClause.empty
- when *Relation::MULTI_VALUE_METHODS
- FROZEN_EMPTY_ARRAY
- when *Relation::SINGLE_VALUE_METHODS
- nil
- else
+ DEFAULT_VALUES.fetch(name) do
raise ArgumentError, "unknown relation value #{name.inspect}"
end
end