diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-04-04 11:16:45 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-04-04 11:51:36 +0900 |
commit | 7fb2ba5ed85abe210f33eb49e5820cfe8973530d (patch) | |
tree | 20cbfe3e405d6d1aba2c0a01b899e6a622d62665 /activerecord/lib/active_record/relation/query_methods.rb | |
parent | 464d625324accb8486aefa0b4a4b46477462dd08 (diff) | |
download | rails-7fb2ba5ed85abe210f33eb49e5820cfe8973530d.tar.gz rails-7fb2ba5ed85abe210f33eb49e5820cfe8973530d.tar.bz2 rails-7fb2ba5ed85abe210f33eb49e5820cfe8973530d.zip |
Optimizer hints should be applied on Top level query as much as possible
I've experienced this issue in our app, some hints only works on Top
level query (e.g. `MAX_EXECUTION_TIME`).
Diffstat (limited to 'activerecord/lib/active_record/relation/query_methods.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index b0535cfff5..5f728f2263 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -992,6 +992,15 @@ module ActiveRecord @arel ||= build_arel(aliases) end + protected + def build_subquery(subquery_alias, select_value) # :nodoc: + subquery = except(:optimizer_hints).arel.as(subquery_alias) + + Arel::SelectManager.new(subquery).project(select_value).tap do |arel| + arel.optimizer_hints(*optimizer_hints_values) unless optimizer_hints_values.empty? + end + end + private # Returns a relation value with a given name def get_value(name) |