existing Loader patchwork for Schema support, module not fully renamed yet
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Loader.pm
CommitLineData
a78e3fed 1package DBIx::Class::Loader;
2
3use strict;
4use UNIVERSAL::require;
5
af6c2665 6our $VERSION = '0.01';
a78e3fed 7
8=head1 NAME
9
10DBIx::Class::Loader - Dynamic definition of DBIx::Class sub classes.
11
12=head1 SYNOPSIS
13
14 use DBIx::Class::Loader;
15
16 my $loader = DBIx::Class::Loader->new(
17 dsn => "dbi:mysql:dbname",
18 user => "root",
19 password => "",
20 namespace => "Data",
21 additional_classes => [qw/DBIx::Class::Foo/],
22 additional_base_classes => [qw/My::Stuff/],
23 left_base_classes => [qw/DBIx::Class::Bar/],
24 constraint => '^foo.*',
25 relationships => 1,
26 options => { AutoCommit => 1 },
27 inflect => { child => 'children' },
28 debug => 1,
29 );
af6c2665 30
31 my $conn = $loader->get_connection($dsn, $user, $password); #
32 my $conn = $loader->get_connection(); # uses same dsn as ->new();
a78e3fed 33
34use with mod_perl
35
36in your startup.pl
37
38 # load all tables
39 use DBIx::Class::Loader;
40 my $loader = DBIx::Class::Loader->new(
41 dsn => "dbi:mysql:dbname",
42 user => "root",
43 password => "",
44 namespace => "Data",
45 );
46
47in your web application.
48
49 use strict;
50
51 # you can use Data::Film directly
52 my $film = Data::Film->retrieve($id);
53
54
55=head1 DESCRIPTION
56
57DBIx::Class::Loader automate the definition of DBIx::Class sub-classes by
58scanning table schemas and setting up columns and primary keys.
59
60Class names are defined by table names and the namespace option, which is
61required.
62
63 +---------+-----------+--------------+
64 | table | namespace | class |
65 +---------+-----------+--------------+
66 | foo | Data | Data::Foo |
67 | foo_bar | MyDB | MyDB::FooBar |
68 +---------+-----------+--------------+
69
70DBIx::Class::Loader supports MySQL, Postgres, SQLite and DB2. See
71L<DBIx::Class::Loader::Generic> for more, and L<DBIx::Class::Loader::Writing>
72for notes on writing your own db-specific subclass for an unsupported db.
73
74L<Class::DBI::Loader> and L<Class::DBI> are now obsolete, use L<DBIx::Class> and this module instead. ;)
75
76=cut
77
78=head1 METHODS
79
80=head2 new
81
82Example in Synopsis above demonstrates the available arguments. For
83detailed information on the arguments, see the
84L<DBIx::Class::Loader::Generic> documentation.
85
86=cut
87
88sub new {
89 my ( $class, %args ) = @_;
af6c2665 90
91 foreach (qw/namespace dsn/) {
92 die qq/Argument $_ is required/ if ! $args{$_};
93 }
94
95 $args{namespace} =~ s/(.*)::$/$1/;
96
a78e3fed 97 my $dsn = $args{dsn};
98 my ($driver) = $dsn =~ m/^dbi:(\w*?)(?:\((.*?)\))?:/i;
99 $driver = 'SQLite' if $driver eq 'SQLite2';
100 my $impl = "DBIx::Class::Loader::" . $driver;
af6c2665 101
a78e3fed 102 $impl->require or
103 die qq/Couldn't require loader class "$impl", "$UNIVERSAL::require::ERROR"/;
af6c2665 104
a78e3fed 105 return $impl->new(%args);
106}
107
108=head1 AUTHOR
109
110Sebastian Riedel, C<sri@oook.de>
111
112Based upon the work of IKEBE Tomohiro
113
114=head1 THANK YOU
115
116Adam Anderson, Andy Grundman, Autrijus Tang, Dan Kubb, David Naughton,
117Randal Schwartz, Simon Flack and all the others who've helped.
118
119=head1 LICENSE
120
121This library is free software; you can redistribute it and/or modify it under
122the same terms as Perl itself.
123
124=head1 SEE ALSO
125
126L<DBIx::Class>
127
128=cut
129
1301;