aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-10-15 16:03:52 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-10-15 16:03:52 -0700
commit23f35b2fd87b586278b167bb3f614df00811b104 (patch)
tree8949cfcade6e6e05c308176826e02c4c61a864cf /activerecord/lib/active_record
parentc5fe508df19028d9fcb5c958019f61b55b24edb1 (diff)
downloadrails-23f35b2fd87b586278b167bb3f614df00811b104.tar.gz
rails-23f35b2fd87b586278b167bb3f614df00811b104.tar.bz2
rails-23f35b2fd87b586278b167bb3f614df00811b104.zip
use the node as cache so we can avoid accessing the table
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/associations/join_dependency.rb26
1 files changed, 13 insertions, 13 deletions
diff --git a/activerecord/lib/active_record/associations/join_dependency.rb b/activerecord/lib/active_record/associations/join_dependency.rb
index ce1c5e2c5e..2ea8eb69d7 100644
--- a/activerecord/lib/active_record/associations/join_dependency.rb
+++ b/activerecord/lib/active_record/associations/join_dependency.rb
@@ -92,12 +92,12 @@ module ActiveRecord
def initialize(tables)
@tables = tables
@alias_cache = tables.each_with_object({}) { |table,h|
- h[table.name] = table.columns.each_with_object({}) { |column,i|
+ h[table.node] = table.columns.each_with_object({}) { |column,i|
i[column.name] = column.alias
}
}
@name_and_alias_cache = tables.each_with_object({}) { |table,h|
- h[table.name] = table.columns.map { |column|
+ h[table.node] = table.columns.map { |column|
[column.name, column.alias]
}
}
@@ -108,17 +108,17 @@ module ActiveRecord
end
# An array of [column_name, alias] pairs for the table
- def column_aliases(table)
- @name_and_alias_cache[table]
+ def column_aliases(node)
+ @name_and_alias_cache[node]
end
- def column_alias(table, column)
- @alias_cache[table][column]
+ def column_alias(node, column)
+ @alias_cache[node][column]
end
- class Table < Struct.new(:name, :alias, :columns)
+ class Table < Struct.new(:node, :columns)
def table
- Arel::Nodes::TableAlias.new name, self.alias
+ Arel::Nodes::TableAlias.new node.table, node.aliased_table_name
end
def column_aliases
@@ -134,12 +134,12 @@ module ActiveRecord
columns = join_part.column_names.each_with_index.map { |column_name,j|
Aliases::Column.new column_name, "t#{i}_r#{j}"
}
- Aliases::Table.new(join_part.table, join_part.aliased_table_name, columns)
+ Aliases::Table.new(join_part, columns)
}
end
def instantiate(result_set, aliases)
- primary_key = aliases.column_alias(join_root.table, join_root.primary_key)
+ primary_key = aliases.column_alias(join_root, join_root.primary_key)
type_caster = result_set.column_type primary_key
seen = Hash.new { |h,parent_klass|
@@ -150,7 +150,7 @@ module ActiveRecord
model_cache = Hash.new { |h,klass| h[klass] = {} }
parents = model_cache[join_root]
- column_aliases = aliases.column_aliases join_root.table
+ column_aliases = aliases.column_aliases join_root
result_set.each { |row_hash|
primary_id = type_caster.type_cast row_hash[primary_key]
@@ -242,7 +242,7 @@ module ActiveRecord
end
end
- key = aliases.column_alias(node.table, node.primary_key)
+ key = aliases.column_alias(node, node.primary_key)
id = row[key]
next if id.nil?
@@ -260,7 +260,7 @@ module ActiveRecord
def construct_model(record, node, row, model_cache, id, aliases)
model = model_cache[node][id] ||= node.instantiate(row,
- aliases.column_aliases(node.table))
+ aliases.column_aliases(node))
other = record.association(node.reflection.name)
if node.reflection.collection?