Commit ac3fc463 authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 638518: Make all boolean chart operators work with attach_data.thedata

r=mkanat, a=mkanat (module owner)
parent 9785bd9b
...@@ -267,11 +267,9 @@ use constant OPERATOR_FIELD_OVERRIDE => { ...@@ -267,11 +267,9 @@ use constant OPERATOR_FIELD_OVERRIDE => {
alias => { alias => {
_non_changed => \&_alias_nonchanged, _non_changed => \&_alias_nonchanged,
}, },
'attach_data.thedata' => {
_non_changed => \&_attach_data_thedata,
},
# We check all attachment fields against this. # We check all attachment fields against this.
attachments => MULTI_SELECT_OVERRIDE, attachments => MULTI_SELECT_OVERRIDE,
'attach_data.thedata' => MULTI_SELECT_OVERRIDE,
blocked => MULTI_SELECT_OVERRIDE, blocked => MULTI_SELECT_OVERRIDE,
bug_group => MULTI_SELECT_OVERRIDE, bug_group => MULTI_SELECT_OVERRIDE,
classification => { classification => {
...@@ -2326,29 +2324,6 @@ sub _percentage_complete { ...@@ -2326,29 +2324,6 @@ sub _percentage_complete {
$self->_add_extra_column('actual_time'); $self->_add_extra_column('actual_time');
} }
sub _attach_data_thedata {
my ($self, $args) = @_;
my ($chart_id, $joins) = @$args{qw(chart_id joins)};
my $attach_table = "attachments_$chart_id";
my $data_table = "attachdata_$chart_id";
my $extra = $self->_user->is_insider
? [] : ["$attach_table.isprivate = 0"];
my $attachments_join = {
table => 'attachments',
as => $attach_table,
extra => $extra,
};
my $data_join = {
table => 'attach_data',
as => $data_table,
from => "$attach_table.attach_id",
to => "id",
};
push(@$joins, $attachments_join, $data_join);
$args->{full_field} = "$data_table.thedata";
}
sub _join_flag_tables { sub _join_flag_tables {
my ($self, $args) = @_; my ($self, $args) = @_;
my ($joins, $chart_id) = @$args{qw(joins chart_id)}; my ($joins, $chart_id) = @$args{qw(joins chart_id)};
...@@ -2601,6 +2576,12 @@ sub _multiselect_table { ...@@ -2601,6 +2576,12 @@ sub _multiselect_table {
$args->{full_field} = $1; $args->{full_field} = $1;
return "attachments"; return "attachments";
} }
elsif ($field eq 'attach_data.thedata') {
$args->{_extra_where} = " AND attachments.isprivate = 0"
if !$self->_user->is_insider;
return "attachments INNER JOIN attach_data "
. " ON attachments.attach_id = attach_data.id"
}
my $table = "bug_$field"; my $table = "bug_$field";
$args->{full_field} = "bug_$field.value"; $args->{full_field} = "bug_$field.value";
return $table; return $table;
......
...@@ -47,7 +47,6 @@ our @EXPORT = qw( ...@@ -47,7 +47,6 @@ our @EXPORT = qw(
NUM_SEARCH_TESTS NUM_SEARCH_TESTS
OR_BROKEN OR_BROKEN
OR_SKIP OR_SKIP
PG_BROKEN
SKIP_FIELDS SKIP_FIELDS
SPECIAL_PARAM_TESTS SPECIAL_PARAM_TESTS
SUBSTR_NO_FIELD_ADD SUBSTR_NO_FIELD_ADD
...@@ -203,7 +202,6 @@ use constant SUBSTR_NO_FIELD_ADD => FIELD_TYPE_DATETIME, qw( ...@@ -203,7 +202,6 @@ use constant SUBSTR_NO_FIELD_ADD => FIELD_TYPE_DATETIME, qw(
# #
# requestees.login_name doesn't find bugs that fully lack requestees. # requestees.login_name doesn't find bugs that fully lack requestees.
use constant NEGATIVE_BROKEN => ( use constant NEGATIVE_BROKEN => (
'attach_data.thedata' => { contains => [5] },
bug_file_loc => { contains => [5] }, bug_file_loc => { contains => [5] },
deadline => { contains => [5] }, deadline => { contains => [5] },
# Custom fields are busted because they can be NULL. # Custom fields are busted because they can be NULL.
...@@ -302,19 +300,13 @@ use constant KNOWN_BROKEN => { ...@@ -302,19 +300,13 @@ use constant KNOWN_BROKEN => {
'allwordssubstr-<1>' => { ALLWORDS_BROKEN }, 'allwordssubstr-<1>' => { ALLWORDS_BROKEN },
# flagtypes.name does not work here, probably because they all try to # flagtypes.name does not work here, probably because they all try to
# match against a single flag. # match against a single flag.
# Same for attach_data.thedata.
'allwords-<1>' => { 'allwords-<1>' => {
ALLWORDS_BROKEN, ALLWORDS_BROKEN,
'flagtypes.name' => { contains => [1] }, 'flagtypes.name' => { contains => [1] },
}, },
nowordssubstr => { NOWORDS_BROKEN }, nowordssubstr => { NOWORDS_BROKEN },
# attach_data.thedata doesn't match properly with any of the plain nowords => { NOWORDS_BROKEN },
# "words" searches. Also, bug 5 doesn't match because it lacks
# attachments.
nowords => {
NOWORDS_BROKEN,
},
# setters.login_name and requestees.login name aren't tracked individually # setters.login_name and requestees.login name aren't tracked individually
# in bugs_activity, so can't be searched using this method. # in bugs_activity, so can't be searched using this method.
...@@ -387,16 +379,6 @@ use constant KNOWN_BROKEN => { ...@@ -387,16 +379,6 @@ use constant KNOWN_BROKEN => {
}, },
}; };
# This tracks things that are broken in different ways on Pg compared to
# MySQL. Actually, in some of these cases, Pg is behaving correctly
# where MySQL isn't, but the result is still a bit surprising to the user.
use constant PG_BROKEN => {
'attach_data.thedata' => {
notregexp => { contains => [5] },
nowords => { contains => [5] },
},
};
################### ###################
# Broken NotTests # # Broken NotTests #
################### ###################
...@@ -404,7 +386,6 @@ use constant PG_BROKEN => { ...@@ -404,7 +386,6 @@ use constant PG_BROKEN => {
# These are fields that are broken in the same way for pretty much every # These are fields that are broken in the same way for pretty much every
# NOT test that is broken. # NOT test that is broken.
use constant COMMON_BROKEN_NOT => ( use constant COMMON_BROKEN_NOT => (
"attach_data.thedata" => { contains => [5] },
"bug_file_loc" => { contains => [5] }, "bug_file_loc" => { contains => [5] },
"deadline" => { contains => [5] }, "deadline" => { contains => [5] },
"flagtypes.name" => { contains => [5] }, "flagtypes.name" => { contains => [5] },
...@@ -449,7 +430,6 @@ use constant BROKEN_NOT => { ...@@ -449,7 +430,6 @@ use constant BROKEN_NOT => {
"flagtypes.name" => { contains => [1,5] }, "flagtypes.name" => { contains => [1,5] },
}, },
'allwords-<1> <2>' => { 'allwords-<1> <2>' => {
'attach_data.thedata' => { contains => [5] },
cc => { }, cc => { },
'flagtypes.name' => { contains => [5] }, 'flagtypes.name' => { contains => [5] },
}, },
...@@ -467,9 +447,6 @@ use constant BROKEN_NOT => { ...@@ -467,9 +447,6 @@ use constant BROKEN_NOT => {
anywords => { anywords => {
COMMON_BROKEN_NOT, COMMON_BROKEN_NOT,
}, },
'anywords-<1> <2>' => {
'attach_data.thedata' => { contains => [5] },
},
anywordssubstr => { anywordssubstr => {
COMMON_BROKEN_NOT, COMMON_BROKEN_NOT,
}, },
...@@ -537,7 +514,6 @@ use constant BROKEN_NOT => { ...@@ -537,7 +514,6 @@ use constant BROKEN_NOT => {
}, },
nowordssubstr => { nowordssubstr => {
NEGATIVE_BROKEN_NOT, NEGATIVE_BROKEN_NOT,
"attach_data.thedata" => { },
"flagtypes.name" => { }, "flagtypes.name" => { },
}, },
regexp => { regexp => {
......
...@@ -191,13 +191,6 @@ sub _known_broken { ...@@ -191,13 +191,6 @@ sub _known_broken {
$value_name .= "-$extra_name"; $value_name .= "-$extra_name";
} }
if (!$skip_pg_check and Bugzilla->dbh->isa('Bugzilla::DB::Pg')) {
my $field_broken = PG_BROKEN->{$field}->{$operator};
return $field_broken if $field_broken;
my $pg_value_broken = PG_BROKEN->{$field}->{$value_name};
return $pg_value_broken if $pg_value_broken;
}
my $value_broken = $constant->{$value_name}->{$field}; my $value_broken = $constant->{$value_name}->{$field};
$value_broken ||= $constant->{$value_name}->{$type}; $value_broken ||= $constant->{$value_name}->{$type};
return $value_broken if $value_broken; return $value_broken if $value_broken;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment