[Rt-commit] rt branch, 4.2/domain-case-sensitive, created. rt-4.1.6-237-gde0ee2a

Alex Vandiver alexmv at bestpractical.com
Mon Feb 11 14:31:57 EST 2013


The branch, 4.2/domain-case-sensitive has been created
        at  de0ee2aab96d466d0ed9a39107db5f0d94c20f13 (commit)

- Log -----------------------------------------------------------------
commit 2a050c093d453350a1d7d7548977938fb3f840f2
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Mon Feb 11 12:32:53 2013 -0500

    Force all Domain and Type limits to be case-sensitive
    
    This allows the existing indexes (on Postgres and mysql) to be used,
    which is a notable performance gain, as the Groups table is generally
    quite large.

diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm
index 819ceba..9e9950b 100644
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@ -3438,8 +3438,8 @@ sub GetPrincipalsMap {
                 ALIAS2 => $group_members,
                 FIELD2 => 'GroupId'
             );
-            $Users->Limit( ALIAS => $groups, FIELD => 'Domain', VALUE => 'ACLEquivalence' );
-            $Users->Limit( ALIAS => $groups, FIELD => 'Type', VALUE => 'UserEquiv' );
+            $Users->Limit( ALIAS => $groups, FIELD => 'Domain', VALUE => 'ACLEquivalence', CASESENSITIVE => 1 );
+            $Users->Limit( ALIAS => $groups, FIELD => 'Type', VALUE => 'UserEquiv', CASESENSITIVE => 1 );
 
 
             my $display = sub {
diff --git a/lib/RT/SearchBuilder/Role/Roles.pm b/lib/RT/SearchBuilder/Role/Roles.pm
index ea538e1..84af1e1 100644
--- a/lib/RT/SearchBuilder/Role/Roles.pm
+++ b/lib/RT/SearchBuilder/Role/Roles.pm
@@ -125,12 +125,14 @@ sub _RoleGroupsJoin {
         ALIAS           => $groups,
         FIELD           => 'Domain',
         VALUE           => $args{'Class'} .'-Role',
+        CASESENSITIVE   => 1,
     );
     $self->Limit(
         LEFTJOIN        => $groups,
         ALIAS           => $groups,
         FIELD           => 'Type',
         VALUE           => $args{'Type'},
+        CASESENSITIVE   => 1,
     ) if $args{'Type'};
 
     $self->{'_sql_role_group_aliases'}{ $args{'Class'} .'-'. $args{'Type'} } = $groups
diff --git a/lib/RT/Shredder/Queue.pm b/lib/RT/Shredder/Queue.pm
index 80a1c84..53a030c 100644
--- a/lib/RT/Shredder/Queue.pm
+++ b/lib/RT/Shredder/Queue.pm
@@ -76,7 +76,7 @@ sub __DependsOn
 
 # Queue role groups( Cc, AdminCc )
     $objs = RT::Groups->new( $self->CurrentUser );
-    $objs->Limit( FIELD => 'Domain', VALUE => 'RT::Queue-Role' );
+    $objs->Limit( FIELD => 'Domain', VALUE => 'RT::Queue-Role', CASESENSITIVE => 1 );
     $objs->Limit( FIELD => 'Instance', VALUE => $self->Id );
     push( @$list, $objs );
 
diff --git a/lib/RT/Shredder/Ticket.pm b/lib/RT/Shredder/Ticket.pm
index c532486..bf3f6d2 100644
--- a/lib/RT/Shredder/Ticket.pm
+++ b/lib/RT/Shredder/Ticket.pm
@@ -77,7 +77,7 @@ sub __DependsOn
 
 # Ticket role groups( Owner, Requestors, Cc, AdminCc )
     $objs = RT::Groups->new( $self->CurrentUser );
-    $objs->Limit( FIELD => 'Domain', VALUE => 'RT::Ticket-Role' );
+    $objs->Limit( FIELD => 'Domain', VALUE => 'RT::Ticket-Role', CASESENSITIVE => 1 );
     $objs->Limit( FIELD => 'Instance', VALUE => $self->Id );
     push( @$list, $objs );
 
diff --git a/lib/RT/Shredder/User.pm b/lib/RT/Shredder/User.pm
index 67443e7..1f84219 100644
--- a/lib/RT/Shredder/User.pm
+++ b/lib/RT/Shredder/User.pm
@@ -99,7 +99,7 @@ sub __DependsOn
 # ACL equivalence group
 # don't use LoadACLEquivalenceGroup cause it may not exists any more
     my $objs = RT::Groups->new( $self->CurrentUser );
-    $objs->Limit( FIELD => 'Domain', VALUE => 'ACLEquivalence' );
+    $objs->Limit( FIELD => 'Domain', VALUE => 'ACLEquivalence', CASESENSITIVE => 1 );
     $objs->Limit( FIELD => 'Instance', VALUE => $self->Id );
     push( @$list, $objs );
 
diff --git a/lib/RT/Test.pm b/lib/RT/Test.pm
index 99b996b..cee57fa 100644
--- a/lib/RT/Test.pm
+++ b/lib/RT/Test.pm
@@ -715,7 +715,7 @@ sub load_or_create_user {
         my $groups_alias = $gms->Join(
             FIELD1 => 'GroupId', TABLE2 => 'Groups', FIELD2 => 'id',
         );
-        $gms->Limit( ALIAS => $groups_alias, FIELD => 'Domain', VALUE => 'UserDefined' );
+        $gms->Limit( ALIAS => $groups_alias, FIELD => 'Domain', VALUE => 'UserDefined', CASESENSITIVE => 1 );
         $gms->Limit( FIELD => 'MemberId', VALUE => $obj->id );
         while ( my $group_member_record = $gms->Next ) {
             $group_member_record->Delete;
diff --git a/lib/RT/Tickets.pm b/lib/RT/Tickets.pm
index 6c81505..545cfcf 100644
--- a/lib/RT/Tickets.pm
+++ b/lib/RT/Tickets.pm
@@ -972,6 +972,7 @@ sub _WatcherMembershipLimit {
         ALIAS           => $groups,
         FIELD           => 'Domain',
         VALUE           => 'RT::Ticket-Role',
+        CASESENSITIVE   => 1,
         ENTRYAGGREGATOR => 'AND'
     );
 
@@ -993,6 +994,7 @@ sub _WatcherMembershipLimit {
             ALIAS           => $groups,
             FIELD           => 'Type',
             VALUE           => $type,
+            CASESENSITIVE   => 1,
             ENTRYAGGREGATOR => 'AND'
         );
     }
@@ -2929,9 +2931,9 @@ sub CurrentUserCanSee {
     if ( my @tmp = grep $_ ne 'Owner' && !ref $roles{ $_ }, keys %roles ) {
 
         my $groups = RT::Groups->new( RT->SystemUser );
-        $groups->Limit( FIELD => 'Domain', VALUE => 'RT::Queue-Role' );
+        $groups->Limit( FIELD => 'Domain', VALUE => 'RT::Queue-Role', CASESENSITIVE => 1 );
         foreach ( @tmp ) {
-            $groups->Limit( FIELD => 'Type', VALUE => $_ );
+            $groups->Limit( FIELD => 'Type', VALUE => $_, CASESENSITIVE => 1 );
         }
         my $principal_alias = $groups->Join(
             ALIAS1 => 'main',
diff --git a/lib/RT/User.pm b/lib/RT/User.pm
index f6b3fd9..7b7a1ba 100644
--- a/lib/RT/User.pm
+++ b/lib/RT/User.pm
@@ -1457,6 +1457,7 @@ sub WatchedQueues {
                             ALIAS => $group_alias,
                             FIELD => 'Domain',
                             VALUE => 'RT::Queue-Role',
+                            CASESENSITIVE => 1,
                             ENTRYAGGREGATOR => 'AND',
                           );
     if (grep { $_ eq 'Cc' } @roles) {
@@ -1465,6 +1466,7 @@ sub WatchedQueues {
                                 ALIAS => $group_alias,
                                 FIELD => 'Type',
                                 VALUE => 'Cc',
+                                CASESENSITIVE => 1,
                                 ENTRYAGGREGATOR => 'OR',
                               );
     }
@@ -1474,6 +1476,7 @@ sub WatchedQueues {
                                 ALIAS => $group_alias,
                                 FIELD => 'Type',
                                 VALUE => 'AdminCc',
+                                CASESENSITIVE => 1,
                                 ENTRYAGGREGATOR => 'OR',
                               );
     }

commit de0ee2aab96d466d0ed9a39107db5f0d94c20f13
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Mon Feb 11 14:25:59 2013 -0500

    Alter Oracle's group indexes to be consistent with Pg and mysql
    
    Now that group searches do not apply LOWER to Domain and Type, switch
    the indexes to not having them either.

diff --git a/etc/schema.Oracle b/etc/schema.Oracle
index 52ce347..a53aac4 100755
--- a/etc/schema.Oracle
+++ b/etc/schema.Oracle
@@ -88,8 +88,8 @@ CREATE TABLE Groups (
         LastUpdated     DATE
 --      Instance        VARCHAR2(64)
 );
-CREATE INDEX Groups1 ON Groups (LOWER(Domain), Instance, LOWER(Type), id);
-CREATE INDEX Groups2 ON Groups (LOWER(Type), Instance, LOWER(Domain));
+CREATE INDEX Groups1 ON Groups (Domain, Instance, Type, id);
+CREATE INDEX Groups2 ON Groups (Type, Instance, Domain);
 
 
 CREATE SEQUENCE SCRIPCONDITIONS_seq;
diff --git a/etc/upgrade/4.1.7/schema.Oracle b/etc/upgrade/4.1.7/schema.Oracle
new file mode 100644
index 0000000..6b2c48a
--- /dev/null
+++ b/etc/upgrade/4.1.7/schema.Oracle
@@ -0,0 +1,4 @@
+DROP INDEX Groups1;
+DROP INDEX Groups2;
+CREATE INDEX Groups1 ON Groups (Domain, Instance, Type, id);
+CREATE INDEX Groups2 ON Groups (Type, Instance, Domain);

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


More information about the Rt-commit mailing list