Module: ActiveRecord::Associations::ClassMethods

Defined in:
lib/eload_select.rb

Defined Under Namespace

Classes: JoinDependency

Instance Method Summary collapse

Instance Method Details

#columns_for_eager_loading(select_options, join_dependency) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/eload_select.rb', line 71

def columns_for_eager_loading(select_options, join_dependency) 
  additional_columns = [] 
  selected_column_map = select_options.split(',').inject({}) {|selected_column_map, column|  
    column.scan(/^\s*((\S+)\.)?(\S+)(\s+AS\s+(\S+))?\s*$/i) do  
      if ($5 || $2.nil?)  
        additional_columns << [$3, $5, column.strip] 
      else 
        selected_column_map[$2]||= [] 
        selected_column_map[$2] << $3 
      end 
    end 
    selected_column_map 
  } 
           
  join_dependency.joins.each{|join| 
    join.column_names_with_alias(selected_column_map.delete(join.aliased_table_name) || []) 
  } 
           
  standard_columns = column_aliases(join_dependency) 
  additional_columns.concat(selected_column_map.values) unless selected_column_map.blank? 
   
  join_dependency.join_base.additional_aliased_columns(additional_columns) 

  additional_columns << [standard_columns] unless standard_columns.blank? 
  additional_columns.collect{|column_name| column_name.last}.join(', ') 
end

#construct_finder_sql_with_included_associations_with_eager_select(options, join_dependency) ⇒ Object Also known as: construct_finder_sql_with_included_associations



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/eload_select.rb', line 49

def construct_finder_sql_with_included_associations_with_eager_select(options, join_dependency)
  scope = scope(:find)
  sql = "SELECT "
  sql << construct_select_sql((scope && scope[:select]) || options[:select], join_dependency) 
	    sql << " FROM #{(scope && scope[:from]) || options[:from] || table_name} " 
  sql << join_dependency.join_associations.collect{|join| join.association_join }.join

  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])

  sql << "GROUP BY #{options[:group]} " if options[:group]
 
  add_order!(sql, options[:order], scope)
  add_limit!(sql, options, scope) if using_limitable_reflections?(join_dependency.reflections)
  add_lock!(sql, options, scope)
 
  return sanitize_sql(sql)
end

#construct_select_sql(selected, join_dependency) ⇒ Object



98
99
100
101
102
# File 'lib/eload_select.rb', line 98

def construct_select_sql(selected, join_dependency) 
  select_sql = (selected && selected.strip != '*' ?  
  columns_for_eager_loading(selected, join_dependency) :  
  column_aliases(join_dependency)) 
end