aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations.rb
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2006-03-27 23:28:19 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2006-03-27 23:28:19 +0000
commitc9c185200df71c8aaa5ed42e39531191e76690e4 (patch)
treeafa828027a407471ae7687439f935b8094eb91b4 /activerecord/lib/active_record/associations.rb
parent1cc2f5ce9f2e343532cfe2b9554f62d363f37afb (diff)
downloadrails-c9c185200df71c8aaa5ed42e39531191e76690e4.tar.gz
rails-c9c185200df71c8aaa5ed42e39531191e76690e4.tar.bz2
rails-c9c185200df71c8aaa5ed42e39531191e76690e4.zip
Making ActiveRecord faster [skaes]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4069 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/lib/active_record/associations.rb')
-rwxr-xr-xactiverecord/lib/active_record/associations.rb25
1 files changed, 14 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb
index 116e5fb5e2..f0f3288937 100755
--- a/activerecord/lib/active_record/associations.rb
+++ b/activerecord/lib/active_record/associations.rb
@@ -1075,6 +1075,7 @@ module ActiveRecord
end
def construct_counter_sql_with_included_associations(options, join_dependency)
+ scope = scope(:find)
sql = "SELECT COUNT(DISTINCT #{table_name}.#{primary_key})"
# A (slower) workaround if we're using a backend, like sqlite, that doesn't support COUNT DISTINCT.
@@ -1085,11 +1086,11 @@ module ActiveRecord
sql << " FROM #{table_name} "
sql << join_dependency.join_associations.collect{|join| join.association_join }.join
- add_joins!(sql, options)
- add_conditions!(sql, options[:conditions])
- add_limited_ids_condition!(sql, options, join_dependency) if !using_limitable_reflections?(join_dependency.reflections) && (scope(:find, :limit) || options[:limit])
+ add_joins!(sql, options, scope)
+ add_conditions!(sql, options[:conditions], scope)
+ add_limited_ids_condition!(sql, options, join_dependency) if !using_limitable_reflections?(join_dependency.reflections) && ((scope && scope[:limit]) || options[:limit])
- add_limit!(sql, options) if using_limitable_reflections?(join_dependency.reflections)
+ add_limit!(sql, options, scope) if using_limitable_reflections?(join_dependency.reflections)
if !Base.connection.supports_count_distinct?
sql << ")"
@@ -1099,16 +1100,17 @@ module ActiveRecord
end
def construct_finder_sql_with_included_associations(options, join_dependency)
- sql = "SELECT #{column_aliases(join_dependency)} FROM #{scope(:find, :from) || options[:from] || table_name} "
+ scope = scope(:find)
+ sql = "SELECT #{column_aliases(join_dependency)} FROM #{(scope && scope[:from]) || options[:from] || table_name} "
sql << join_dependency.join_associations.collect{|join| join.association_join }.join
- add_joins!(sql, options)
- add_conditions!(sql, options[:conditions])
+ add_joins!(sql, options, scope)
+ add_conditions!(sql, options[:conditions], scope)
add_limited_ids_condition!(sql, options, join_dependency) if !using_limitable_reflections?(join_dependency.reflections) && options[:limit]
sql << "ORDER BY #{options[:order]} " if options[:order]
- add_limit!(sql, options) if using_limitable_reflections?(join_dependency.reflections)
+ add_limit!(sql, options, scope) if using_limitable_reflections?(join_dependency.reflections)
return sanitize_sql(sql)
end
@@ -1127,6 +1129,7 @@ module ActiveRecord
end
def construct_finder_sql_for_association_limiting(options, join_dependency)
+ scope = scope(:find)
#sql = "SELECT DISTINCT #{table_name}.#{primary_key} FROM #{table_name} "
sql = "SELECT "
sql << "DISTINCT #{table_name}." if include_eager_conditions?(options) || include_eager_order?(options)
@@ -1134,12 +1137,12 @@ module ActiveRecord
if include_eager_conditions?(options) || include_eager_order?(options)
sql << join_dependency.join_associations.collect{|join| join.association_join }.join
- add_joins!(sql, options)
+ add_joins!(sql, options, scope)
end
- add_conditions!(sql, options[:conditions])
+ add_conditions!(sql, options[:conditions], scope)
sql << "ORDER BY #{options[:order]} " if options[:order]
- add_limit!(sql, options)
+ add_limit!(sql, options, scope)
return sanitize_sql(sql)
end