summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-04-07 12:55:11 -0700
committerMark Wells <mark@freeside.biz>2016-04-07 12:55:19 -0700
commit7d6a2e0b66cc0c3f5ff7187bafb1d6e8fb1db525 (patch)
tree0e24af838d96995ee90c39700544e260e584cfeb
parentcd7e557dcface9adc5d0058c6722f37915bff44d (diff)
fix inexact lookup of tickets by customer + id, #39536, from #13852
-rwxr-xr-xrt/lib/RT/Tickets.pm17
1 files changed, 10 insertions, 7 deletions
diff --git a/rt/lib/RT/Tickets.pm b/rt/lib/RT/Tickets.pm
index c826b6f04..af6b6edb9 100755
--- a/rt/lib/RT/Tickets.pm
+++ b/rt/lib/RT/Tickets.pm
@@ -2277,7 +2277,7 @@ sub _FreesideFieldLimit {
# if it's compound, create a join from cust_main or cust_svc to that
# table, using custnum or svcnum, and Limit on that table instead.
- my @_SQLLimit = ();
+ my @Limit = ();
foreach my $a (@alias) {
if ( $table2 ) {
$a = $self->Join(
@@ -2307,8 +2307,12 @@ sub _FreesideFieldLimit {
# will produce a subclause: "cust_main_1.custnum IS NOT NULL OR
# cust_main_2.custnum IS NOT NULL" (or "IS NULL AND..." for a negative
# query).
- #$self->_SQLLimit(
- push @_SQLLimit, {
+ # This requires the ENTRYAGGREGATOR to be OR for positive queries
+ # (where a matching customer exists), but ONLY between these two
+ # constraints and NOT with anything else in the query, hence the
+ # subclause.
+
+ push @Limit, {
%rest,
ALIAS => $a,
FIELD => $pkey,
@@ -2320,11 +2324,10 @@ sub _FreesideFieldLimit {
};
}
- $self->_OpenParen;
- foreach my $_SQLLimit (@_SQLLimit) {
- $self->_SQLLimit( %$_SQLLimit);
+ foreach (@Limit) {
+ # _SQLLimit would force SUBCLAUSE to 'ticketsql'; bypass it
+ $self->SUPER::Limit( %$_ );
}
- $self->_CloseParen;
}