Initial commit of intro
[dbsrgits/DBIx-Class-DeploymentHandler.git] / lib / DBIx / Class / DeploymentHandler / Manual / Intro.pod
CommitLineData
f59dc433 1=head1 NAME
2
3DBIx::Class::DeploymentHandler::Intro - Introduction to DBIx::Class::DeploymentHandler
4
5=head1 Why DBIx::Class::DeploymentHandler is worth using
6
7
8=head1 Our Sample database
9
10Follow L<DBIx::Class::Manual::Intro> except for the parts setting up the database.
11After you are done, You should have the following files.
12
13 MyDatabase/
14 |-- Main
15 | |-- Result
16 | | |-- Artist.pm
17 | | |-- Cd.pm
18 | | `-- Track.pm
19 | `-- ResultSet
20 `-- Main.pm
21
22=head1 preinstall.pl
23
24Our first script, preinstall.pl reads our schema file and creates the tables in the database.
25
26 use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
27 use FindBin;
28 use lib "$FindBin::Bin/../lib";
29 use MyDatabase::Main;
30 my $schema = MyDatabase::Main->connect('dbi:SQLite:mydb');
31
32 my $dh = DH->new(
33 {
34 schema => $schema,
35 script_directory => "$FindBin::Bin/dbicdh",
36 databases => 'SQLite',
37 sql_translator_args => { add_drop_table => 0 },
38 schema_version => 1,
39 }
40 );
41
42 $dh->prepare_install;
43 $dh->install({version => 1});
44
45TODO TODO TODO TODO
46
47Someone really ought to fix the bug causing dbicdh/SQLite/deploy/1/001-auto.sql to have the dbix_class_deploymenthandler_versions
48
49Right now, you need to comment out the version table crap in the sql file , then run install, then uncomment it.
50
51TODO TODO TODO TODO
52
53=head2 dbicdh - Our migration scripts
54
55Running preinstall.pl should create the following:
56
57 dbicdh/
58 |-- SQLite
59 | `-- deploy
60 | `-- 1
61 | `-- 001-auto.sql
62 `-- _source
63 `-- deploy
64 `-- 1
65 `-- 001-auto.yml
66
67=head3 001-auto.sql
68
69DBIx::Class::DeploymentHandler automatically generates SQL from our schema that is suitable for SQLite
70
71=head3 001-auto.yml
72
73This contains all of the raw information about our schema that is then translated into the sql.
74
75=head1 Upgrading
76
77Add a line to MyDatabase/Main/Result/Cd.pm below
78
79 __PACKAGE__->add_columns(qw/ cdid artist title /);
80
81with
82
83 __PACKAGE__->add_column("isbn" => { is_nullable => 1 });
84
85(We need it to either be nullable, or have a default - merely adding it to the add_columns line will not work)
86
87Then run the following script:
88
89 use strict;
90 use warnings;
91 use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
92 use FindBin;
93 use lib "$FindBin::Bin/../lib";
94 use MyDatabase::Main;
95 my $schema = MyDatabase::Main->connect('dbi:SQLite:mydb');
96
97 my $dh = DH->new(
98 {
99 schema => $schema,
100 script_directory => "$FindBin::Bin/dbicdh",
101 databases => 'SQLite',
102 sql_translator_args => { add_drop_table => 0 },
103 schema_version => 2,
104 from_version => 1,
105 to_version => 2,
106 }
107 );
108
109 $dh->prepare_deploy;
110 $dh->prepare_upgrade({ from_version => 1, to_version => 2});
111 $dh->upgrade;
112
113
114
115Our script directory now looks like:
116
117 dbicdh/
118 |-- SQLite
119 | |-- deploy
120 | | |-- 1
121 | | | `-- 001-auto.sql
122 | | `-- 2
123 | | `-- 001-auto.sql
124 | `-- upgrade
125 | `-- 1-2
126 | `-- 001-auto.sql
127 `-- _source
128 `-- deploy
129 |-- 1
130 | `-- 001-auto.yml
131 `-- 2
132 `-- 001-auto.yml
133
134The new deploy/001-auto.sql and deploy/001-auto.yml files are the state of the db as at that version. The upgrade/1-2/001-auto.sql file is the most interesting one
135
136 -- Convert schema '/home/jdobbie/Projects/intro/dbicdh/_source/deploy/1/001-auto.yml' to '/home/jdobbie/Projects/intro/dbicdh/_source/deploy/2/001-auto.yml':;
137
138 ;
139 BEGIN;
140
141 ;
142 ALTER TABLE cd ADD COLUMN isbn;
143
144 ;
145
146 COMMIT;
147