[Rt-commit] rt branch, 3.8-trunk, updated. rt-3.8.7-130-gbe4e9d9

Ruslan Zakirov ruz at bestpractical.com
Wed Feb 3 06:30:36 EST 2010


The branch, 3.8-trunk has been updated
       via  be4e9d9f5a360a95c87fcbc5c8f8371e5fe50e70 (commit)
      from  1d5931a647329d24301774dde8a5595d5825b9bf (commit)

Summary of changes:
 lib/RT/Tickets_Overlay.pm |   38 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 37 insertions(+), 1 deletions(-)

- Log -----------------------------------------------------------------
commit be4e9d9f5a360a95c87fcbc5c8f8371e5fe50e70
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed Feb 3 14:29:36 2010 +0300

    return back effective SQL when searching by CFs using = or != operator

diff --git a/lib/RT/Tickets_Overlay.pm b/lib/RT/Tickets_Overlay.pm
index 26dafd7..b53a6e2 100755
--- a/lib/RT/Tickets_Overlay.pm
+++ b/lib/RT/Tickets_Overlay.pm
@@ -1370,7 +1370,8 @@ sub _CustomFieldLimit {
 # we explicitly don't include the "IS NULL" case, since we would
 # otherwise end up with a redundant clause.
 
-    my ($negative_op, $null_op, $inv_op, $range_op) = $self->ClassifySQLOperation( $op );
+    my ($negative_op, $null_op, $inv_op, $range_op)
+        = $self->ClassifySQLOperation( $op );
 
     my $fix_op = sub {
         my $op = shift;
@@ -1427,6 +1428,41 @@ sub _CustomFieldLimit {
                 %rest
             );
         }
+        elsif ( $op eq '=' || $op eq '!=' || $op eq '<>' ) {
+            unless ( length( Encode::encode_utf8($value) ) > 255 ) {
+                $self->_SQLLimit(
+                    ALIAS      => $TicketCFs,
+                    FIELD      => 'Content',
+                    OPERATOR   => $op,
+                    VALUE      => $value,
+                    %rest
+                );
+            } else {
+                $self->_OpenParen;
+                $self->_SQLLimit(
+                    ALIAS      => $TicketCFs,
+                    FIELD      => 'Content',
+                    OPERATOR   => '=',
+                    VALUE      => '',
+                    ENTRYAGGREGATOR => 'OR'
+                );
+                $self->_SQLLimit(
+                    ALIAS      => $TicketCFs,
+                    FIELD      => 'Content',
+                    OPERATOR   => 'IS',
+                    VALUE      => 'NULL',
+                    ENTRYAGGREGATOR => 'OR'
+                );
+                $self->_CloseParen;
+                $self->_SQLLimit(
+                    ALIAS => $TicketCFs,
+                    FIELD => 'LargeContent',
+                    OPERATOR => $fix_op->($op),
+                    VALUE => $value,
+                    ENTRYAGGREGATOR => 'AND',
+                );
+            }
+        }
         else {
             $self->_SQLLimit(
                 ALIAS      => $TicketCFs,

-----------------------------------------------------------------------


More information about the Rt-commit mailing list