our $VERSION = '0.03999_01';
__PACKAGE__->mk_classaccessor('dump_to_dir');
-__PACKAGE__->mk_classaccessor('loader');
-__PACKAGE__->mk_classaccessor('_loader_args');
+__PACKAGE__->mk_classaccessor('_loader_args' => {});
+__PACKAGE__->mk_classaccessor('_loader_invoked');
=head1 NAME
use base qw/DBIx::Class::Schema::Loader/;
__PACKAGE__->loader_options(
- relationships => 1,
constraint => '^foo.*',
# debug => 1,
);
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 (as long as you're not using any methods that are now deprecated
-in this document), so don't shy away from it just for fears of the
-transition down the road.
+painless, so don't shy away from it just for fears of the transition down
+the road.
=head1 METHODS
only useful in fairly complex scenarios, see the
L<DBIx::Class::Schema::Loader::Base> documentation.
-This method is *required* at this time, for backwards compatibility
-reasons. If you do not wish to change any options, just call it
-with an empty argument list during schema class initialization.
-
-Setting these options explicitly via this method B<after> calling
-C<connection> is deprecated and will stop working in version 0.04000.
-For now the code merely warns about this condition.
-
-The preferred way of doing things is to either call C<loader_options>
-before any connection is made, or embed the C<loader_options> in
-the connection information itself as shown below.
+One must call C<loader_options> before any connection is made,
+or embed the C<loader_options> in the connection information itself
+as shown below. Setting C<loader_options> after the connection has
+already been made is useless.
=cut
my $self = shift;
my %args = (ref $_[0] eq 'HASH') ? %{$_[0]} : @_;
-
- my $class = ref $self || $self;
- $args{schema} = $self;
- $args{schema_class} = $class;
- weaken($args{schema}) if ref $self;
-
$self->_loader_args(\%args);
- if($self->storage && !$class->loader) {
- warn "Do not set loader_options after specifying the connection info,"
- . " this will be unsupported in 0.04000";
- $self->_invoke_loader;
- }
$self;
}
my $self = shift;
my $class = ref $self || $self;
- $self->_loader_args->{dump_directory} ||= $self->dump_to_dir;
+ my $args = $self->_loader_args;
+
+ # set up the schema/schema_class arguments
+ $args->{schema} = $self;
+ $args->{schema_class} = $class;
+ weaken($args->{schema}) if ref $self;
+ $args->{dump_directory} ||= $self->dump_to_dir;
# XXX this only works for relative storage_type, like ::DBI ...
my $impl = "DBIx::Class::Schema::Loader" . $self->storage_type;
croak qq/Could not load storage_type loader "$impl": / .
qq/"$UNIVERSAL::require::ERROR"/;
- # XXX in the future when we get rid of ->loader, the next two
- # lines can be replaced by "$impl->new(%{$self->_loader_args})->load;"
- $class->loader($impl->new(%{$self->_loader_args}));
- $class->loader->load;
+ $impl->new(%$args)->load;
+ $self->_loader_invoked(1);
$self;
}
$self = $self->next::method(@_);
my $class = ref $self || $self;
- if($self->_loader_args && !$class->loader) {
+ if(!$class->_loader_invoked) {
$self->_invoke_loader
}
use DBIx::Class::Schema::Loader qw/ make_schema_at /;
make_schema_at(
'New::Schema::Name',
- { relationships => 1, debug => 1 },
+ { debug => 1 },
[ 'dbi:Pg:dbname="foo"','postgres' ],
);
# Complex: dump loaded schema to disk, all from the commandline:
- perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:./lib -e 'make_schema_at("New::Schema::Name", { relationships => 1 }, [ "dbi:Pg:dbname=foo","postgres" ])'
+ perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:./lib -e 'make_schema_at("New::Schema::Name", { debug => 1 }, [ "dbi:Pg:dbname=foo","postgres" ])'
# Same, but inside a script, and using a different way to specify the
# dump directory:
use DBIx::Class::Schema::Loader qw/ make_schema_at /;
make_schema_at(
'New::Schema::Name',
- { relationships => 1, debug => 1, dump_directory => './lib' },
+ { debug => 1, dump_directory => './lib' },
[ 'dbi:Pg:dbname="foo"','postgres' ],
);
use base qw/DBIx::Class::Schema::Loader/;
__PACKAGE__->loader_options(
- relationships => 1,
debug => 1,
);
__PACKAGE__->connection('dbi:SQLite:example.db');
and remove the Main directory tree (optional). Every thing else
should work the same
-=head1 DEPRECATED METHODS
-
-You don't need to read anything in this section unless you're upgrading
-code that was written against pre-0.03 versions of this module. This
-version is intended to be backwards-compatible with pre-0.03 code, but
-will issue warnings about your usage of deprecated features/methods.
-
-B<All of these deprecated methods will dissappear in version 0.04000>,
-and converting code that uses these methods should be trivial.
-
-=head2 load_from_connection
-
-This deprecated method is now roughly an alias for L</loader_options>.
-
-For now, using this method will invoke the legacy behavior for
-backwards compatibility, and merely emit a warning about upgrading
-your code.
-
-It also reverts the default inflection scheme to
-use L<Lingua::EN::Inflect> just like pre-0.03 versions of this
-module did.
-
-You can force these legacy inflections with the
-option L<DBIx::Class::Schema::Loader::Base/legacy_default_inflections>,
-even after switch over to the preferred L</loader_options> way of doing
-things. That option will not go away until at least 0.05.
-
-See the source of this method for more details.
-
-=cut
-
-sub load_from_connection {
- my ($self, %args) = @_;
-
- my $cmds_ver = $Catalyst::Model::DBIC::Schema::VERSION;
- if($cmds_ver) {
- if($cmds_ver < 0.14) {
- warn 'You should upgrade your installation of'
- . ' Catalyst::Model::DBIC::Schema to 0.14 or higher, then:';
- }
- warn 'You should regenerate your Model files, which may eliminate'
- . ' the following deprecation warning:';
- }
- warn 'load_from_connection deprecated, and will dissappear in 0.04000, '
- . 'please [re-]read the [new] DBIx::Class::Schema::Loader '
- . 'documentation';
-
- # Support the old connect_info / dsn / etc args...
- $args{connect_info} = [
- delete $args{dsn},
- delete $args{user},
- delete $args{password},
- delete $args{options},
- ] if $args{dsn};
-
- $self->connection(@{delete $args{connect_info}})
- if $args{connect_info};
-
- $self->loader_options('legacy_default_inflections' => 1, %args);
-}
-
-=head2 loader
-
-This is an accessor in the generated Schema class for accessing
-the L<DBIx::Class::Schema::Loader::Base> -based loader object
-that was used during construction. See the
-L<DBIx::Class::Schema::Loader::Base> docs for more information
-on the available loader methods there.
-
-This accessor is deprecated. Do not use it. Anything you can
-get from C<loader>, you can get via the normal L<DBIx::Class::Schema>
-methods, and your code will be more robust and forward-thinking
-for doing so.
-
-If you're already using C<loader> in your code, make an effort
-to get rid of it. If you think you've found a situation where it
-is necessary, let me know and we'll see what we can do to remedy
-that situation.
-
-In some future version, this accessor *will* disappear. It was
-apparently quite a design/API mistake to ever have exposed it to
-user-land in the first place, all things considered.
-
=head1 KNOWN ISSUES
=head2 Multiple Database Schemas
left_base_classes
components
resultset_components
- relationships
+ skip_relationships
moniker_map
inflect_singular
inflect_plural
These constructor options are the base options for
L<DBIx::Class::Schema::Loader/loader_opts>. Available constructor options are:
-=head2 relationships
+=head2 skip_relationships
-Try to automatically detect/setup has_a and has_many relationships.
+Skip setting up relationships. The default is to attempt the loading
+of relationships.
=head2 debug
The default is false, which means the dumping code will skip the already
existing files.
-=head1 DEPRECATED CONSTRUCTOR OPTIONS
-
-B<These will be removed in version 0.04000 !!!>
-
-=head2 inflect_map
-
-Equivalent to L</inflect_plural>.
-
-=head2 inflect
-
-Equivalent to L</inflect_plural>.
-
-=head2 connect_info, dsn, user, password, options
-
-You connect these schemas the same way you would any L<DBIx::Class::Schema>,
-which is by calling either C<connect> or C<connection> on a schema class
-or object. These options are only supported via the deprecated
-C<load_from_connection> interface, which is also being removed in 0.04000.
-
=head1 METHODS
None of these methods are intended for direct invocation by regular
$self->{monikers} = {};
$self->{classes} = {};
- # Support deprecated arguments
- for(qw/inflect_map inflect/) {
- warn "Argument $_ is deprecated in favor of 'inflect_plural'"
- . ", and will be removed in 0.04000"
- if $self->{$_};
- }
- $self->{inflect_plural} ||= $self->{inflect_map} || $self->{inflect};
-
$self->{schema_class} ||= ( ref $self->{schema} || $self->{schema} );
$self->{schema} ||= $self->{schema_class};
my $self = shift;
$self->_load_classes;
- $self->_load_relationships if $self->relationships;
+ $self->_load_relationships if ! $self->skip_relationships;
$self->_load_external;
$self->_dump_to_dir if $self->dump_directory;
}
my @invocations = (
- 'deprecated_one' => sub {
- package DBICTest::Schema::1;
- use base qw/ DBIx::Class::Schema::Loader /;
- __PACKAGE__->connection($make_dbictest_db::dsn);
- __PACKAGE__->load_from_connection( relationships => 1 );
- __PACKAGE__;
- },
- 'deprecated_two' => sub {
- package DBICTest::Schema::2;
- use base qw/ DBIx::Class::Schema::Loader /;
- __PACKAGE__->load_from_connection(
- relationships => 1,
- connect_info => [ $make_dbictest_db::dsn ],
- );
- __PACKAGE__;
- },
- 'deprecated_three' => sub {
- package DBICTest::Schema::3;
- use base qw/ DBIx::Class::Schema::Loader /;
- __PACKAGE__->load_from_connection(
- relationships => 1,
- dsn => $make_dbictest_db::dsn,
- );
- __PACKAGE__;
- },
- 'deprecated_four' => sub {
- package DBICTest::Schema::4;
- use base qw/ DBIx::Class::Schema::Loader /;
- __PACKAGE__->connection($make_dbictest_db::dsn);
- __PACKAGE__->loader_options( relationships => 1 );
- __PACKAGE__;
- },
'hardcode' => sub {
package DBICTest::Schema::5;
use base qw/ DBIx::Class::Schema::Loader /;
- __PACKAGE__->loader_options( relationships => 1 );
__PACKAGE__->connection($make_dbictest_db::dsn);
__PACKAGE__;
},
'normal' => sub {
package DBICTest::Schema::6;
use base qw/ DBIx::Class::Schema::Loader /;
- __PACKAGE__->loader_options( relationships => 1 );
+ __PACKAGE__->loader_options();
__PACKAGE__->connect($make_dbictest_db::dsn);
},
'make_schema_at' => sub {