use strict;
use warnings;
-use Carp;
-use UNIVERSAL::require;
-
use base qw/DBIx::Class::Schema/;
use base qw/Class::Data::Accessor/;
-
-__PACKAGE__->mk_classaccessor('loader');
-
-use vars qw($VERSION);
+use Carp;
+use UNIVERSAL::require;
# Always remember to do all digits for the version even if they're 0
# i.e. first release of 0.XX *must* be 0.XX000. This avoids fBSD ports
# brain damage and presumably various other packaging systems too
-$VERSION = '0.01000';
+our $VERSION = '0.02007';
+
+__PACKAGE__->mk_classaccessor('loader');
=head1 NAME
package My::Schema;
use base qw/DBIx::Class::Schema::Loader/;
+ sub _monikerize {
+ my $name = shift;
+ $name = join '', map ucfirst, split /[\W_]+/, lc $name;
+ $name;
+ }
+
__PACKAGE__->load_from_connection(
- dsn => "dbi:mysql:dbname",
- user => "root",
- password => "",
+ connect_info => [ "dbi:mysql:dbname",
+ "root",
+ "mypassword",
+ { AutoCommit => 1 },
+ ],
additional_classes => [qw/DBIx::Class::Foo/],
additional_base_classes => [qw/My::Stuff/],
left_base_classes => [qw/DBIx::Class::Bar/],
+ components => [qw/ResultSetManager/],
+ resultset_components => [qw/AlwaysRS/],
constraint => '^foo.*',
relationships => 1,
options => { AutoCommit => 1 },
- inflect => { child => 'children' },
+ inflect_map => { child => 'children' },
+ moniker_map => \&_monikerize,
debug => 1,
);
# table-to-classname mappings.
my $classes = $schema1->loader->classes;
- # Use the schema as per normal for L<DBIx::Class::Schema>
- my $rs = $schema1->resultset($monikers->{table_table})->search(...);
+ # Use the schema as per normal for DBIx::Class::Schema
+ my $rs = $schema1->resultset($monikers->{foo_table})->search(...);
=head1 DESCRIPTION
L<DBIx::Class::Schema::Loader::Writing> for notes on writing your own
db-specific subclass for an unsupported db.
-This module requires DBIx::Class::Loader 0.5 or later, and obsoletes
-L<DBIx::Class::Loader> for L<DBIx::Class> version 0.5 and later.
+This module requires L<DBIx::Class> 0.05 or later, and obsoletes
+L<DBIx::Class::Loader> for L<DBIx::Class> version 0.05 and later.
-=cut
+While on the whole, the bare table definitions are fairly straightforward,
+relationship creation is somewhat heuristic, especially in the choosing
+of relationship types, join types, and relationship names. The relationships
+generated by this module will probably never be as well-defined as
+hand-generated ones. Because of this, over time a complex project will
+probably wish to migrate off of L<DBIx::Class::Schema::Loader>.
+
+It is designed more to get you up and running quickly against an existing
+database, or to be effective for simple situations, rather than to be what
+you use in the long term for a complex database/project.
+
+That being said, transitioning your code from a Schema generated by this
+module to one that doesn't use this module should be straightforward and
+painless, so don't shy away from it just for fears of the transition down
+the road.
=head1 METHODS
=cut
+# XXX this is DBI-specific, as it peers into the dsn to determine
+# the vendor class to use...
sub load_from_connection {
my ( $class, %args ) = @_;
- croak 'dsn argument is required' if ! $args{dsn};
- my $dsn = $args{dsn};
+ my $dsn;
+
+ if($args{connect_info} && $args{connect_info}->[0]) {
+ $dsn = $args{connect_info}->[0];
+ }
+ elsif($args{dsn}) {
+ warn "dsn argument is deprecated, please use connect_info instead";
+ $dsn = $args{dsn};
+ }
+ else {
+ croak 'connect_info arrayref argument with valid '
+ . 'first element is required';
+ }
+
my ($driver) = $dsn =~ m/^dbi:(\w*?)(?:\((.*?)\))?:/i;
$driver = 'SQLite' if $driver eq 'SQLite2';
my $impl = "DBIx::Class::Schema::Loader::" . $driver;
$class->loader->load;
}
+=head2 loader
+
+This is an accessor in the generated Schema class for accessing
+the L<DBIx::Class::Schema::Loader::Generic> -based loader object
+that was used during construction. See the
+L<DBIx::Class::Schema::Loader::Generic> docs for more information
+on the available loader methods there.
+
+=head1 KNOWN BUGS
+
+Aside from relationship definitions being less than ideal in general,
+this version is known not to handle the case of multiple relationships
+between the same pair of tables. All of the relationship code will
+be overhauled on the way to 0.03, at which time that bug will be
+addressed.
+
=head1 AUTHOR
-Brandon Black, C<bblack@gmail.com>
+Brandon Black, C<blblack@gmail.com>
Based on L<DBIx::Class::Loader> by Sebastian Riedel