my $upgrade = shift;

my $groups = RT::Groups->new( RT->SystemUser );
$groups->Limit(
    FIELD => 'Name', OPERATOR => '!=', VALUE => 'main.Type', QUOTEVALUE => 0
);
$groups->Limit(
    FIELD => 'Name', OPERATOR => 'IS', VALUE => 'NULL',
);
$groups->Limit(
    FIELD => 'Domain',
    VALUE => 'SystemInternal',
    CASESENSITIVE => 0,
);
$groups->RowsPerPage(1);
if ( $groups->Next ) {
    my $dbh = $RT::Handle->dbh;
    my $db_type = RT->Config->Get('DatabaseType');
    if ( $db_type eq 'Oracle' || $db_type eq 'Pg' ) {
        $dbh->do(
            "UPDATE Groups SET Name = Type
            WHERE LOWER(Domain) IN ('aclequivalence', 'systeminternal')
                OR LOWER(Domain) LIKE '%-role'"
        );
    } elsif ( $db_type eq 'mysql' ) {
        $dbh->do(
            "UPDATE `Groups` SET Name = Type
            WHERE Domain IN ('ACLEquivalence', 'SystemInternal')
                OR Domain LIKE '%-Role'"
        );
    } else {
        $dbh->do(
            "UPDATE Groups SET Name = Type
            WHERE Domain IN ('ACLEquivalence', 'SystemInternal')
                OR Domain LIKE '%-Role'"
        );
    }
}

$upgrade->();
