Module: ActiveRecord::Associations::ClassMethods
- Defined in:
- lib/eload_select.rb
Defined Under Namespace
Classes: JoinDependency
Instance Method Summary collapse
- #columns_for_eager_loading(select_options, join_dependency) ⇒ Object
- #construct_finder_sql_with_included_associations_with_eager_select(options, join_dependency) ⇒ Object (also: #construct_finder_sql_with_included_associations)
- #construct_select_sql(selected, join_dependency) ⇒ Object
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(, join_dependency) additional_columns = [] selected_column_map = .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(, join_dependency) scope = scope(:find) sql = "SELECT " sql << construct_select_sql((scope && scope[:select]) || [:select], join_dependency) sql << " FROM #{(scope && scope[:from]) || [:from] || table_name} " sql << join_dependency.join_associations.collect{|join| join.association_join }.join add_joins!(sql, , scope) add_conditions!(sql, [:conditions], scope) add_limited_ids_condition!(sql, , join_dependency) if !using_limitable_reflections?(join_dependency.reflections) && ((scope && scope[:limit]) || [:limit]) sql << "GROUP BY #{[:group]} " if [:group] add_order!(sql, [:order], scope) add_limit!(sql, , scope) if using_limitable_reflections?(join_dependency.reflections) add_lock!(sql, , 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 |