diff options
author | brainopia <brainopia@evilmartians.com> | 2015-01-06 02:25:19 +0300 |
---|---|---|
committer | brainopia <brainopia@evilmartians.com> | 2015-01-06 02:29:03 +0300 |
commit | 42e386173f888c5762130db8db132bc33d739e4f (patch) | |
tree | 1471f20e0bee2a52d937d5a8fbc6f5ff016c4aa2 | |
parent | 1c8192669fd6880041f87ba8ee2aae52b1f7edd8 (diff) | |
download | rails-42e386173f888c5762130db8db132bc33d739e4f.tar.gz rails-42e386173f888c5762130db8db132bc33d739e4f.tar.bz2 rails-42e386173f888c5762130db8db132bc33d739e4f.zip |
Correctly fetch bind_values from join in subquery
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/bind_parameter_test.rb | 10 |
2 files changed, 12 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 6892cc114c..f054e17017 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -745,6 +745,9 @@ module ActiveRecord def from!(value, subquery_name = nil) # :nodoc: self.from_value = [value, subquery_name] + if value.is_a? Relation + self.bind_values = value.arel.bind_values + value.bind_values + bind_values + end self end @@ -999,7 +1002,6 @@ module ActiveRecord case opts when Relation name ||= 'subquery' - self.bind_values = opts.bind_values + self.bind_values opts.arel.as(name.to_s) else opts diff --git a/activerecord/test/cases/bind_parameter_test.rb b/activerecord/test/cases/bind_parameter_test.rb index c4634d11e2..66663b3e0e 100644 --- a/activerecord/test/cases/bind_parameter_test.rb +++ b/activerecord/test/cases/bind_parameter_test.rb @@ -1,9 +1,11 @@ require 'cases/helper' require 'models/topic' +require 'models/author' +require 'models/post' module ActiveRecord class BindParameterTest < ActiveRecord::TestCase - fixtures :topics + fixtures :topics, :authors, :posts class LogListener attr_accessor :calls @@ -30,6 +32,12 @@ module ActiveRecord end if ActiveRecord::Base.connection.supports_statement_cache? + def test_bind_from_join_in_subquery + subquery = Author.joins(:thinking_posts).where(name: 'David') + scope = Author.from(subquery, 'authors').where(id: 1) + assert_equal 1, scope.count + end + def test_binds_are_logged sub = @connection.substitute_at(@pk) binds = [[@pk, 1]] |