Patch #21608 » project_query_speedup.patch
| app/models/custom_field.rb | ||
|---|---|---|
| 219 | 219 | |
| 220 | 220 |
# to move in project_custom_field |
| 221 | 221 |
def self.for_all |
| 222 |
where(:is_for_all => true).order('position').to_a
|
|
| 222 |
RequestStore.store["#{self.class.name}_for_all"] ||= where(:is_for_all => true).order('position').to_a
|
|
| 223 | 223 |
end |
| 224 | 224 | |
| 225 | 225 |
def type_name |
| plugins/easyproject/easy_plugins/easy_extensions/app/models/easy_entity_custom_attribute.rb | ||
|---|---|---|
| 20 | 20 |
return nil if entity.nil? |
| 21 | 21 | |
| 22 | 22 |
if (entity.respond_to?(:project) && @custom_field.visible_by?(entity.project, User.current)) || !entity.respond_to?(:project) |
| 23 |
cv = entity.custom_values.enabled.select {|v| v.custom_field_id == @custom_field.id}
|
|
| 23 |
cv = entity.custom_values.select {|v| v.custom_field_id == @custom_field.id}
|
|
| 24 | 24 |
cv.size > 1 ? cv.sort {|a,b| a.value.to_s <=> b.value.to_s} : cv.first
|
| 25 | 25 |
else |
| 26 | 26 |
nil |
| plugins/easyproject/easy_plugins/easy_extensions/app/models/easy_queries/easy_project_query.rb | ||
|---|---|---|
| 15 | 15 | |
| 16 | 16 |
def query_after_initialize |
| 17 | 17 |
super |
| 18 |
self.additional_statement = Project.allowed_to_condition(User.current, :view_project) |
|
| 18 |
# self.additional_statement = Project.allowed_to_condition(User.current, :view_project)
|
|
| 19 | 19 |
self.display_filter_sort_on_edit = false |
| 20 | 20 |
end |
| 21 | 21 | |
| ... | ... | |
| 96 | 96 |
EasyQueryColumn.new(:root), |
| 97 | 97 |
EasyQueryColumn.new(:description, :sortable => "#{Project.table_name}.description"),
|
| 98 | 98 |
EasyQueryColumn.new(:status), |
| 99 |
EasyQueryColumn.new(:author, :groupable => true, :sortable => lambda { User.fields_for_order_statement('authors') }),
|
|
| 99 |
EasyQueryColumn.new(:author, :groupable => true, :sortable => lambda { User.fields_for_order_statement('authors') }, preload: [:author]),
|
|
| 100 | 100 |
EasyQueryColumn.new(:users, :caption => :field_member), |
| 101 | 101 |
EasyQueryColumn.new(:start_date), |
| 102 | 102 |
EasyQueryColumn.new(:due_date), |
| ... | ... | |
| 168 | 168 |
[['lft', 'asc']] |
| 169 | 169 |
end |
| 170 | 170 | |
| 171 |
def default_find_preload |
|
| 172 |
preloads = [:parent, :enabled_modules] |
|
| 173 |
preloads << [:project_custom_fields] if has_custom_field_column? |
|
| 174 |
preloads |
|
| 175 |
end |
|
| 176 | ||
| 171 | 177 |
def sortable_columns |
| 172 | 178 |
{'lft' => "#{Project.table_name}.lft"}.merge(super)
|
| 173 | 179 |
end |
| ... | ... | |
| 192 | 198 |
) |
| 193 | 199 |
).join_sources |
| 194 | 200 | |
| 195 |
root_info = merge_scope(Project, options) |
|
| 201 |
root_info = merge_scope(Project.visible, options)
|
|
| 196 | 202 |
.select('projects.id AS root_id, Count(children.id) AS children_count')
|
| 197 | 203 |
.joins(join_sources) |
| 198 | 204 |
.where("( (#{statement}) OR (#{children_statement}) ) AND projects.parent_id IS NULL")
|
| plugins/easyproject/easy_plugins/easy_extensions/app/models/easy_queries/easy_query.rb | ||
|---|---|---|
| 1231 | 1231 |
end |
| 1232 | 1232 | |
| 1233 | 1233 |
def has_custom_field_column? |
| 1234 |
columns.any? { |column| column.is_a? QueryCustomFieldColumn }
|
|
| 1234 |
columns.any? { |column| column.is_a? EasyQueryCustomFieldColumn }
|
|
| 1235 | 1235 |
end |
| 1236 | 1236 | |
| 1237 | 1237 |
def has_default_columns? |