/usr/share/perl5/Jifty/Upgrade.pm is in libjifty-perl 1.10518+dfsg-3ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | use warnings;
use strict;
=head1 NAME
Jifty::Upgrade - Superclass for schema/data upgrades to Jifty applications
=head1 SYNOPSIS
package MyApp::Upgrade;
use base qw/ Jifty::Upgrade /;
use Jifty::Upgrade qw/ since rename /;
since '0.7.4' => sub {
# Rename a column
rename table => 'cthulus', name => 'description',
to => 'mind_numbingly_horrible_word_picture';
};
since '0.6.1' => sub {
my @sizes = ('Huge', 'Gigantic', 'Monstrous', 'Really Big');
my @appearances = ('Horrible', 'Disgusting', 'Frightening', 'Evil');
# populate new columns with some random stuff
my $cthulus = MyApp::Model::CthuluCollection->new;
while (my $cthulu = $cthulus->next) {
$cthulu->set_size($sizes[ int(rand(@sizes)) ]);
$cthulu->set_appearance($appearances[ int(rand(@appearances)) ]);
}
};
=head1 DESCRIPTION
C<Jifty::Upgrade> is an abstract base class to use to customize schema
and data upgrades that happen.
=cut
package Jifty::Upgrade;
use base qw/Jifty::Object Exporter Class::Data::Inheritable/;
use vars qw/%UPGRADES @EXPORT/;
@EXPORT = qw/since rename/;
__PACKAGE__->mk_classdata('just_renamed');
=head2 since I<VERSION> I<SUB>
C<since> is meant to be called by subclasses of C<Jifty::Upgrade>.
Calling it signifies that I<SUB> should be run when upgrading to
version I<VERSION>, after tables and columns are added, but before
tables and columns are removed. If multiple subroutines are given for
the same version, they are run in order that they were set up.
=cut
sub since {
my ( $version, $sub ) = @_;
my $package = (caller)[0];
if ( exists $UPGRADES{$package}{$version} ) {
$UPGRADES{$package}{$version} =
sub { $UPGRADES{$package}{$version}->(); $sub->(); }
}
else {
$UPGRADES{$package}{$version} = $sub;
}
}
=head2 versions
Returns the list of versions that have been registered; this is called
by the L<Jifty::Script::Schema> tool to determine what to do while
upgrading.
=cut
sub versions {
my $class = shift;
return sort keys %{ $UPGRADES{$class} || {} };
}
=head2 upgrade_to I<VERSION>
Runs the subroutine that has been registered for the given version; if
no subroutine was registered, returns a no-op subroutine.
=cut
sub upgrade_to {
my $class = shift;
my $version = shift;
return $UPGRADES{$class}{$version} || sub { };
}
=head2 rename table => CLASS, [column => COLUMN,] to => NAME
Used in upgrade subroutines, this executes the necessary SQL to rename
the table, or column in the table, to a new name.
=cut
sub rename {
my (%args) = @_;
$args{table} ||= $args{in};
die "Must provide a table to rename" unless $args{table};
Jifty::Util->require( $args{table} );
my $table_name = $args{table}->table;
my $package = (caller)[0];
my $renamed = $package->just_renamed || {};
if ( $args{column} ) {
Jifty->handle->rename_column( %args, table => $table_name );
# Mark this table column as renamed
$renamed->{ $table_name }{'drop'}{ $args{'column'} } = $args{'to'};
$renamed->{ $table_name }{'add' }{ $args{'to' } } = $args{'column'};
}
else {
Jifty->handle->rename_table( %args, table => $table_name );
# Mark this table as renamed
$renamed->{ $table_name }{'drop_table'} = $args{'to'};
$renamed->{ $args{'to'} }{'add_table' } = $table_name;
}
# Remember renames so that adds/drops are canceled
$package->just_renamed($renamed);
}
=head1 SEE ALSO
L<Jifty::Manual::Upgrading>
=cut
1;
|