Changeset 1806

Show
Ignore:
Timestamp:
04/08/08 10:43:07 (8 months ago)
Author:
fumiakiy
Message:

Pulled remove out of load_iter loop, and use update instead of save objects in load_iter loop to eliminate segfaults in SQLite. BugId:66602

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/release-34/lib/MT/Upgrade.pm

    r1805 r1806  
    669669            version_limit => 4.0023, 
    670670            priority => 3.0, 
    671             code => \&remove_unused_templatemap, 
     671            updater => { 
     672                type => 'blog', 
     673                label => 'Removing unused template maps...', 
     674                condition => sub { 
     675                    my $blog = shift; 
     676                    my @blog_at = map { "'$_'" } split ',', $blog->archive_type; 
     677                    MT::TemplateMap->remove( 
     678                      { blog_id => $blog->id, archive_type => \@blog_at }, 
     679                      { not => { archive_type => 1 } } 
     680                    ) if @blog_at; 
     681                    return 0; 
     682                }, 
     683            }, 
    672684        }, 
    673685        'core_set_author_auth_type' => { 
     
    956968        $tmpl->remove if $tmpl; 
    957969    } 
    958  
    959     my %terms; 
    960     my %args; 
    961970    if (my @blog_ids = keys %blogs) { 
    962         $terms{id} = \@blog_ids; 
    963         $args{not} = { id => 1 }; 
    964     } 
    965     my $blog_iter = MT::Blog->load_iter(\%terms, \%args); 
    966     # These blogs does not have search results - upgrades from 3.2 or before. 
    967     while (my $blog = $blog_iter->()) { 
    968         my $tmpl = MT::Template->load( 
    969           { type => 'search_results', blog_id => $blog->id,}); 
    970         $tmpl->remove if $tmpl; 
     971        MT::Template->remove( 
     972            { type => 'search_results', blog_id => \@blog_ids }, 
     973            { not => { blog_id => 1 } } 
     974        ); 
    971975    } 
    972976    0; 
     
    11201124    while (my $role = $role_iter->()) { 
    11211125        if ($self->_process_masks($role)) { 
    1122             $role->save; 
     1126            # do not have to rebuild permissions here. 
     1127            # "save" here causes segfault in sqlite. 
     1128            $role->update; 
    11231129        } 
    11241130    } 
     
    17951801    } 
    17961802    1; 
    1797 } 
    1798  
    1799 sub remove_unused_templatemap { 
    1800     my $self = shift; 
    1801  
    1802     $self->progress($self->translate_escape('Removing unused template maps...')); 
    1803  
    1804     require MT::Blog; 
    1805     require MT::TemplateMap; 
    1806     my $iter = MT::Blog->load_iter(); 
    1807     while (my $blog = $iter->()) { 
    1808         my @blog_at = map { "'$_'" } split ',', $blog->archive_type; 
    1809         MT::TemplateMap->remove( 
    1810             { blog_id => $blog->id, archive_type => \@blog_at }, 
    1811             { not => { archive_type => 1 } } 
    1812         ); 
    1813     } 
    18141803} 
    18151804