fix inexact lookup of tickets by customer + id, #39536, from #13852
authorMark Wells <mark@freeside.biz>
Thu, 7 Apr 2016 19:55:11 +0000 (12:55 -0700)
committerMark Wells <mark@freeside.biz>
Thu, 7 Apr 2016 19:55:19 +0000 (12:55 -0700)
rt/lib/RT/Tickets.pm

index c826b6f..af6b6ed 100755 (executable)
@@ -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;
 
 }