Doc for main class
[dbsrgits/DBIx-Class-DeploymentHandler.git] / lib / DBIx / Class / DeploymentHandler.pm
CommitLineData
b974984a 1package DBIx::Class::DeploymentHandler;
2
3use Moose;
b974984a 4
c4f4d4a2 5extends 'DBIx::Class::DeploymentHandler::Dad';
41219a5d 6# a single with would be better, but we can't do that
7# see: http://rt.cpan.org/Public/Bug/Display.html?id=46347
973d060d 8with 'DBIx::Class::DeploymentHandler::WithSqltDeployMethod',
4a65f60b 9 'DBIx::Class::DeploymentHandler::WithMonotonicVersions',
973d060d 10 'DBIx::Class::DeploymentHandler::WithStandardVersionStorage';
41219a5d 11with 'DBIx::Class::DeploymentHandler::WithReasonableDefaults';
2e68a8e1 12
c8a2f7bd 13sub prepare_version_storage_install {
14 my $self = shift;
15
16 $self->prepare_resultsource_install(
17 $self->version_storage->version_rs->result_source
18 );
19}
20
21sub install_version_storage {
22 my $self = shift;
23
24 $self->install_resultsource(
25 $self->version_storage->version_rs->result_source
26 );
27}
28
2e68a8e1 29__PACKAGE__->meta->make_immutable;
30
b974984a 311;
61847972 32
33__END__
34
e9c19a98 35=SYNOPSIS
36
37 use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
38 my $s = My::Schema->connect(...);
39
40 my $dh = DH->new({
41 schema => $s,
42 databases => 'SQLite',
43 sqltargs => { add_drop_table => 0 },
44 });
45
46 $dh->prepare_install;
47
48 $dh->install;
49
50or for upgrades:
51
52 use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
53 my $s = My::Schema->connect(...);
54
55 my $dh = DH->new({
56 schema => $s,
57 databases => 'SQLite',
58 sqltargs => { add_drop_table => 0 },
59 });
60
61 $dh->prepare_upgrade(1, 2);
62
63 $dh->upgrade;
64
65=head1 DESCRIPTION
66
67C<DBIx::Class::DeploymentHandler> is, as it's name suggests, a tool for
68deploying and upgrading databases with L<DBIx::Class>. It is designed to be
69much more flexible than L<DBIx::Class::Schema::Versioned>, hence the use of
70L<Moose> and lots of roles.
71
72C<DBIx::Class::DeploymentHandler> itself is just a recommended set of roles
73that we think will not only work well for everyone, but will also yeild the
74best overall mileage. Each role it uses has it's own nuances and
75documentation, so I won't describe all of them here, but here are a few of the
76major benefits over how L<DBIx::Class::Schema::Versioned> worked (and
77L<DBIx::Class::DeploymentHandler::Deprecated> tries to maintain compatibility
78with):
79
80=over
81
82=over
83
84=item *
85
86Downgrades in addition to upgrades.
87
88=item *
89
90Multiple sql files files per upgrade/downgrade/install.
91
92=item *
93
94Perl scripts allowed for upgrade/downgrade/install.
95
96=item *
97
98Just one set of files needed for upgrade, unlike before where one might need
99to generate C<factorial(scalar @versions)>, which is just silly.
100
101=item *
102
103And much, much more!
104
105=back
106
107That's really just a taste of some of the differences. Check out each role for
108all the details.
109
110=head1 WHERE IS ALL THE DOC?!
111
112C<DBIx::Class::DeploymentHandler> extends
113L<DBIx::Class::DeploymentHandler::Dad>, so that's probably the first place to
114look when you are trying to figure out how everything works.
115
116Next would be to look at all the roles that fill in the blanks that
117L<DBIx::Class::DeploymentHandler::Dad> expects to be filled. They would be
118L<DBIx::Class::DeploymentHandler::WithSqltDeployMethod>,
119L<DBIx::Class::DeploymentHandler::WithMonotonicVersions>,
120L<DBIx::Class::DeploymentHandler::WithStandardVersionStorage>, and
121L<DBIx::Class::DeploymentHandler::WithReasonableDefaults>.
122
123=method prepare_version_storage_install
124
125 $dh->prepare_version_storage_install
126
127Creates the needed C<.sql> file to install the version storage and not the rest
128of the tables
129
130=method install_version_storage
131
132 $dh->install_version_storage
133
134Install the version storage and not the rest of the tables
135
2eaf903b 136vim: ts=2 sw=2 expandtab