Patch #33431 » time_query_performace.patch
| app/models/query.rb | ||
|---|---|---|
| 692 | 692 |
filters and filters[field] |
| 693 | 693 |
end |
| 694 | 694 | |
| 695 |
def has_filter_with_prefix?(prefix) |
|
| 696 |
filters && filters.map(&:first).count { |f| f.start_with?("#{prefix}.")} > 0
|
|
| 697 |
end |
|
| 698 | ||
| 695 | 699 |
def type_for(field) |
| 696 | 700 |
available_filters[field][:type] if available_filters.has_key?(field) |
| 697 | 701 |
end |
| app/models/time_entry_query.rb | ||
|---|---|---|
| 142 | 142 |
end |
| 143 | 143 | |
| 144 | 144 |
def base_scope |
| 145 |
TimeEntry.visible. |
|
| 146 |
joins(:project, :user). |
|
| 147 |
includes(:activity). |
|
| 148 |
references(:activity). |
|
| 149 |
left_join_issue. |
|
| 150 |
where(statement) |
|
| 145 |
scope = TimeEntry.visible.joins(:project, :user) |
|
| 146 |
scope = scope.joins(:activity) if has_filter?('activity_id')
|
|
| 147 |
scope = scope.left_join_issue if has_filter_with_prefix?('issue')
|
|
| 148 |
scope.where(statement) |
|
| 151 | 149 |
end |
| 152 | 150 | |
| 153 | 151 |
def results_scope(options={})
|
| 154 | 152 |
order_option = [group_by_sort_order, (options[:order] || sort_clause)].flatten.reject(&:blank?) |
| 155 | 153 | |
| 156 | 154 |
order_option << "#{TimeEntry.table_name}.id ASC"
|
| 157 |
base_scope. |
|
| 158 |
order(order_option). |
|
| 159 |
joins(joins_for_order_statement(order_option.join(',')))
|
|
| 155 |
scope = base_scope. |
|
| 156 |
order(order_option). |
|
| 157 |
joins(joins_for_order_statement(order_option.join(',')))
|
|
| 158 | ||
| 159 |
scope = scope.preload(:activity) if has_column?(:activity) |
|
| 160 |
scope |
|
| 160 | 161 |
end |
| 161 | 162 | |
| 162 | 163 |
# Returns sum of all the spent hours |