docs updates / version bump for 0.02000
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader.pm
CommitLineData
18fca96a 1package DBIx::Class::Schema::Loader;
a78e3fed 2
3use strict;
a4a19f3c 4use warnings;
8a6b44ef 5use base qw/DBIx::Class::Schema/;
6use base qw/Class::Data::Accessor/;
457eb8a6 7use Carp;
8use UNIVERSAL::require;
3980d69c 9
a4a19f3c 10# Always remember to do all digits for the version even if they're 0
11# i.e. first release of 0.XX *must* be 0.XX000. This avoids fBSD ports
12# brain damage and presumably various other packaging systems too
89ecd854 13our $VERSION = '0.02000';
457eb8a6 14
15__PACKAGE__->mk_classaccessor('loader');
a78e3fed 16
17=head1 NAME
18
18fca96a 19DBIx::Class::Schema::Loader - Dynamic definition of a DBIx::Class::Schema
a78e3fed 20
21=head1 SYNOPSIS
22
a4a19f3c 23 package My::Schema;
24 use base qw/DBIx::Class::Schema::Loader/;
a78e3fed 25
a4a19f3c 26 __PACKAGE__->load_from_connection(
a78e3fed 27 dsn => "dbi:mysql:dbname",
28 user => "root",
29 password => "",
a78e3fed 30 additional_classes => [qw/DBIx::Class::Foo/],
31 additional_base_classes => [qw/My::Stuff/],
32 left_base_classes => [qw/DBIx::Class::Bar/],
33 constraint => '^foo.*',
34 relationships => 1,
35 options => { AutoCommit => 1 },
36 inflect => { child => 'children' },
37 debug => 1,
38 );
af6c2665 39
a4a19f3c 40 # in seperate application code ...
a78e3fed 41
a4a19f3c 42 use My::Schema;
a78e3fed 43
a4a19f3c 44 my $schema1 = My::Schema->connect( $dsn, $user, $password, $attrs);
45 # -or-
fbd83464 46 my $schema1 = "My::Schema";
a4a19f3c 47 # ^^ defaults to dsn/user/pass from load_from_connection()
a78e3fed 48
3980d69c 49 # Get a list of the original (database) names of the tables that
50 # were loaded
51 my @tables = $schema1->loader->tables;
52
53 # Get a hashref of table_name => 'TableName' table-to-moniker
54 # mappings.
55 my $monikers = $schema1->loader->monikers;
56
57 # Get a hashref of table_name => 'My::Schema::TableName'
58 # table-to-classname mappings.
59 my $classes = $schema1->loader->classes;
60
457eb8a6 61 # Use the schema as per normal for DBIx::Class::Schema
89ecd854 62 my $rs = $schema1->resultset($monikers->{foo_table})->search(...);
3980d69c 63
a78e3fed 64=head1 DESCRIPTION
65
fbd83464 66DBIx::Class::Schema::Loader automates the definition of a
18fca96a 67DBIx::Class::Schema by scanning table schemas and setting up
68columns and primary keys.
a78e3fed 69
18fca96a 70DBIx::Class::Schema::Loader supports MySQL, Postgres, SQLite and DB2. See
71L<DBIx::Class::Schema::Loader::Generic> for more, and
72L<DBIx::Class::Schema::Loader::Writing> for notes on writing your own
73db-specific subclass for an unsupported db.
a78e3fed 74
457eb8a6 75This module requires L<DBIx::Class> 0.05 or later, and obsoletes
76L<DBIx::Class::Loader> for L<DBIx::Class> version 0.05 and later.
a78e3fed 77
89ecd854 78While on the whole, the bare table definitions are fairly straightforward,
79relationship creation is somewhat heuristic, especially in the choosing
80of relationship types, join types, and relationship names. The relationships
81generated by this module will probably never be as well-defined as
82hand-generated ones. Because of this, over time a complex project will
83probably wish to migrate off of L<DBIx::Class::Schema::Loader>.
84
85It is designed more to get you up and running quickly against an existing
86database, or to be effective for simple situations, rather than to be what
87you use in the long term for a complex database/project.
88
89That being said, transitioning your code from a Schema generated by this
90module to one that doesn't use this module should be straightforward and
91painless, so don't shy away from it just for fears of the transition down
92the road.
93
a78e3fed 94=head1 METHODS
95
fbd83464 96=head2 load_from_connection
a78e3fed 97
98Example in Synopsis above demonstrates the available arguments. For
99detailed information on the arguments, see the
18fca96a 100L<DBIx::Class::Schema::Loader::Generic> documentation.
a78e3fed 101
102=cut
103
a4a19f3c 104sub load_from_connection {
a78e3fed 105 my ( $class, %args ) = @_;
af6c2665 106
3385ac62 107 croak 'dsn argument is required' if ! $args{dsn};
a78e3fed 108 my $dsn = $args{dsn};
109 my ($driver) = $dsn =~ m/^dbi:(\w*?)(?:\((.*?)\))?:/i;
110 $driver = 'SQLite' if $driver eq 'SQLite2';
18fca96a 111 my $impl = "DBIx::Class::Schema::Loader::" . $driver;
af6c2665 112
a78e3fed 113 $impl->require or
3385ac62 114 croak qq/Couldn't require loader class "$impl",/ .
115 qq/"$UNIVERSAL::require::ERROR"/;
af6c2665 116
3980d69c 117 $args{schema} = $class;
118
119 $class->loader($impl->new(%args));
2a4b8262 120 $class->loader->load;
a78e3fed 121}
122
457eb8a6 123=head2 loader
124
125This is an accessor in the generated Schema class for accessing
126the L<DBIx::Class::Schema::Loader::Generic> -based loader object
127that was used during construction. See the
128L<DBIx::Class::Schema::Loader::Generic> docs for more information
129on the available loader methods there.
130
89ecd854 131=head1 KNOWN BUGS
132
133Aside from relationship definitions being less than ideal in general,
134this version is known not to handle the case of multiple relationships
135between the same pair of tables. All of the relationship code will
136be overhauled on the way to 0.03, at which time that bug will be
137addressed.
138
a78e3fed 139=head1 AUTHOR
140
f654c972 141Brandon Black, C<blblack@gmail.com>
fbd83464 142
8a6b44ef 143Based on L<DBIx::Class::Loader> by Sebastian Riedel
a78e3fed 144
145Based upon the work of IKEBE Tomohiro
146
147=head1 THANK YOU
148
149Adam Anderson, Andy Grundman, Autrijus Tang, Dan Kubb, David Naughton,
150Randal Schwartz, Simon Flack and all the others who've helped.
151
152=head1 LICENSE
153
154This library is free software; you can redistribute it and/or modify it under
155the same terms as Perl itself.
156
157=head1 SEE ALSO
158
159L<DBIx::Class>
160
161=cut
162
1631;