36 |
36 |
37 sub _build_query_from_search_string { |
37 sub _build_query_from_search_string { |
38 my ($self, $search_str) = @_; |
38 my ($self, $search_str) = @_; |
39 return $self->sql_utils->build_query_from_search_string( |
39 return $self->sql_utils->build_query_from_search_string( |
40 $search_str, |
40 $search_str, |
41 $self->app->config->{WebInterface}->{ExtraColumns}->{Index}, { |
41 $self->app->config->{WebInterface}->{ExtraColumns}->{Search}, { |
42 user_id => { name => 'crash_user.user_id' }, |
42 user_id => { name => 'crash_user.user_id' }, |
43 product => { name => 'product.name' }, |
43 product => { name => 'product.name' }, |
44 version => { name => 'product.version' }, |
44 version => { name => 'product.version' }, |
45 channel => { name => 'product.release_channel' }, |
45 channel => { name => 'product.release_channel' }, |
46 function => { name => 'crash_group.crash_thread_signature_bt', type => "fuzzy" }, |
46 function => { name => 'crash_group.crash_thread_signature_bt', type => "fuzzy" }, |
70 my $pager = Data::Page->new(); |
70 my $pager = Data::Page->new(); |
71 $pager->total_entries($count->{total}); |
71 $pager->total_entries($count->{total}); |
72 $pager->entries_per_page($nperpage); |
72 $pager->entries_per_page($nperpage); |
73 $pager->current_page($pagen); |
73 $pager->current_page($pagen); |
74 |
74 |
|
75 my @extra_cols; |
|
76 foreach my $extra_col(@{$self->app->config->{WebInterface}->{ExtraColumns}->{GroupIndex}}) { |
|
77 push @extra_cols, $extra_col->{db_column} . " AS " . $extra_col->{id}; |
|
78 } |
|
79 my $extra_columns = join(",", @extra_cols); |
|
80 |
75 my $results = $self->db->query(" |
81 my $results = $self->db->query(" |
76 SELECT crash_groups.uuid, title, group_by_count.* |
82 SELECT crash_groups.uuid, title, group_by_count.* |
77 FROM crash_groups, |
83 FROM crash_groups, |
78 ( SELECT crash_group_id AS id, |
84 ( SELECT crash_group_id AS id, |
79 min(version) AS first_version, |
85 min(version) AS first_version, |
80 max(version) AS last_version, |
86 max(version) AS last_version, |
81 string_agg(distinct(name), ', ') AS product_names, |
87 string_agg(distinct(name), ', ') AS product_names, |
82 string_agg(distinct(main_module), ', ') AS program_names, |
88 $extra_columns, |
83 count(*) AS crash_count |
89 count(*) AS crash_count |
84 FROM crash_reports |
90 FROM crash_reports |
85 LEFT JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id |
91 LEFT JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id |
86 LEFT JOIN products AS product ON crash_reports.product_id = product.id |
92 LEFT JOIN products AS product ON crash_reports.product_id = product.id |
87 JOIN crash_groups AS crash_group ON crash_reports.crash_group_id = crash_group.id |
93 JOIN crash_groups AS crash_group ON crash_reports.crash_group_id = crash_group.id |