Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

providing arel with column information when possible [#5392 state:res…

…olved]
  • Loading branch information...
commit a0fc2f7b74e5637b37c66571afe7ca67069d0dda 1 parent 9d36e2a
@tenderlove tenderlove authored
View
13 activerecord/lib/active_record/associations.rb
@@ -2110,8 +2110,13 @@ def with_join_class(join_class)
def association_join
return @join if @join
- aliased_table = Arel::Table.new(table_name, :as => @aliased_table_name, :engine => arel_engine)
- parent_table = Arel::Table.new(parent.table_name, :as => parent.aliased_table_name, :engine => arel_engine)
+ aliased_table = Arel::Table.new(table_name, :as => @aliased_table_name,
+ :engine => arel_engine,
+ :columns => klass.columns)
+
+ parent_table = Arel::Table.new(parent.table_name, :as => parent.aliased_table_name,
+ :engine => arel_engine,
+ :columns => parent.active_record.columns)
@join = case reflection.macro
when :has_and_belongs_to_many
@@ -2194,7 +2199,9 @@ def association_join
end
def relation
- aliased = Arel::Table.new(table_name, :as => @aliased_table_name, :engine => arel_engine)
+ aliased = Arel::Table.new(table_name, :as => @aliased_table_name,
+ :engine => arel_engine,
+ :columns => klass.columns)
if reflection.macro == :has_and_belongs_to_many
[Arel::Table.new(options[:join_table], :as => aliased_join_table_name, :engine => arel_engine), aliased]
View
10 activerecord/test/cases/associations/join_model_test.rb
@@ -44,6 +44,16 @@ def test_has_many_uniq_through_count
assert !authors(:mary).unique_categorized_posts.loaded?
end
+ def test_column_caching
+ # pre-heat our cache
+ Post.arel_table.columns
+ Comment.columns
+
+ Post.connection.column_calls = 0
+ 2.times { Post.joins(:comments).to_a }
+ assert_equal 0, Post.connection.column_calls
+ end
+
def test_has_many_uniq_through_find
assert_equal 1, authors(:mary).unique_categorized_posts.find(:all).size
end
View
9 activerecord/test/cases/helper.rb
@@ -43,6 +43,15 @@ def execute_with_query_record(sql, name = nil, &block)
alias_method_chain :execute, :query_record
end
+ActiveRecord::Base.connection.extend Module.new {
+ attr_accessor :column_calls
+ def columns(*args)
+ @column_calls += 1
+ super
+ end
+}
+ActiveRecord::Base.connection.column_calls = 0
+
unless ENV['FIXTURE_DEBUG']
module ActiveRecord::TestFixtures::ClassMethods
def try_to_load_dependency_with_silence(*args)
Please sign in to comment.
Something went wrong with that request. Please try again.