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  |