0.01003 - fixed has_many cond rels
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader.pm
1 package DBIx::Class::Schema::Loader;
2
3 use strict;
4 use warnings;
5 use base qw/DBIx::Class::Schema/;
6 use base qw/Class::Data::Accessor/;
7 use Carp;
8 use UNIVERSAL::require;
9
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
13 our $VERSION = '0.01003';
14
15 __PACKAGE__->mk_classaccessor('loader');
16
17 =head1 NAME
18
19 DBIx::Class::Schema::Loader - Dynamic definition of a DBIx::Class::Schema
20
21 =head1 SYNOPSIS
22
23   package My::Schema;
24   use base qw/DBIx::Class::Schema::Loader/;
25
26   __PACKAGE__->load_from_connection(
27     dsn                     => "dbi:mysql:dbname",
28     user                    => "root",
29     password                => "",
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   );
39
40   # in seperate application code ...
41
42   use My::Schema;
43
44   my $schema1 = My::Schema->connect( $dsn, $user, $password, $attrs);
45   # -or-
46   my $schema1 = "My::Schema";
47   # ^^ defaults to dsn/user/pass from load_from_connection()
48
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
61   # Use the schema as per normal for DBIx::Class::Schema
62   my $rs = $schema1->resultset($monikers->{table_table})->search(...);
63
64 =head1 DESCRIPTION
65
66 THIS IS A DEVELOPMENT RELEASE.  This is 0.01xxx, the first public
67 releases.  Expect things to be broken in various ways.  Expect the
68 entire design to be fatally flawed.  Expect the interfaces to change if
69 it becomes neccessary.  It's mostly here for people to poke at it and
70 find the flaws in it.  0.02 will hopefully have some sanity when we get
71 there.
72
73 DBIx::Class::Schema::Loader automates the definition of a
74 DBIx::Class::Schema by scanning table schemas and setting up
75 columns and primary keys.
76
77 DBIx::Class::Schema::Loader supports MySQL, Postgres, SQLite and DB2.  See
78 L<DBIx::Class::Schema::Loader::Generic> for more, and
79 L<DBIx::Class::Schema::Loader::Writing> for notes on writing your own
80 db-specific subclass for an unsupported db.
81
82 This module requires L<DBIx::Class> 0.05 or later, and obsoletes
83 L<DBIx::Class::Loader> for L<DBIx::Class> version 0.05 and later.
84
85 =head1 METHODS
86
87 =head2 load_from_connection
88
89 Example in Synopsis above demonstrates the available arguments.  For
90 detailed information on the arguments, see the
91 L<DBIx::Class::Schema::Loader::Generic> documentation.
92
93 =cut
94
95 sub load_from_connection {
96     my ( $class, %args ) = @_;
97
98     croak 'dsn argument is required' if ! $args{dsn};
99     my $dsn = $args{dsn};
100     my ($driver) = $dsn =~ m/^dbi:(\w*?)(?:\((.*?)\))?:/i;
101     $driver = 'SQLite' if $driver eq 'SQLite2';
102     my $impl = "DBIx::Class::Schema::Loader::" . $driver;
103
104     $impl->require or
105       croak qq/Couldn't require loader class "$impl",/ .
106             qq/"$UNIVERSAL::require::ERROR"/;
107
108     $args{schema} = $class;
109
110     $class->loader($impl->new(%args));
111     $class->loader->load;
112 }
113
114 =head2 loader
115
116 This is an accessor in the generated Schema class for accessing
117 the L<DBIx::Class::Schema::Loader::Generic> -based loader object
118 that was used during construction.  See the
119 L<DBIx::Class::Schema::Loader::Generic> docs for more information
120 on the available loader methods there.
121
122 =head1 AUTHOR
123
124 Brandon Black, C<blblack@gmail.com>
125
126 Based on L<DBIx::Class::Loader> by Sebastian Riedel
127
128 Based upon the work of IKEBE Tomohiro
129
130 =head1 THANK YOU
131
132 Adam Anderson, Andy Grundman, Autrijus Tang, Dan Kubb, David Naughton,
133 Randal Schwartz, Simon Flack and all the others who've helped.
134
135 =head1 LICENSE
136
137 This library is free software; you can redistribute it and/or modify it under
138 the same terms as Perl itself.
139
140 =head1 SEE ALSO
141
142 L<DBIx::Class>
143
144 =cut
145
146 1;