From: Brandon Black Date: Tue, 12 Sep 2006 19:28:42 +0000 (+0000) Subject: kill deprecated options/methods, make relationship loading the default X-Git-Tag: 0.03999_01~29 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=59cfa251ef35274d0632837629a2c15919d19dff;p=dbsrgits%2FDBIx-Class-Schema-Loader.git kill deprecated options/methods, make relationship loading the default --- diff --git a/lib/DBIx/Class/Schema/Loader.pm b/lib/DBIx/Class/Schema/Loader.pm index f5e2509..bbc8fd3 100644 --- a/lib/DBIx/Class/Schema/Loader.pm +++ b/lib/DBIx/Class/Schema/Loader.pm @@ -15,8 +15,8 @@ use Scalar::Util qw/ weaken /; 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 @@ -28,7 +28,6 @@ DBIx::Class::Schema::Loader - Dynamic definition of a DBIx::Class::Schema use base qw/DBIx::Class::Schema::Loader/; __PACKAGE__->loader_options( - relationships => 1, constraint => '^foo.*', # debug => 1, ); @@ -66,9 +65,8 @@ 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 (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 @@ -79,17 +77,10 @@ detailed information on all of the arguments, most of which are only useful in fairly complex scenarios, see the L 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 calling -C 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 -before any connection is made, or embed the C in -the connection information itself as shown below. +One must call C before any connection is made, +or embed the C in the connection information itself +as shown below. Setting C after the connection has +already been made is useless. =cut @@ -97,18 +88,7 @@ sub loader_options { 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; } @@ -117,7 +97,13 @@ sub _invoke_loader { 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; @@ -125,10 +111,8 @@ sub _invoke_loader { 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; } @@ -159,7 +143,7 @@ sub connection { $self = $self->next::method(@_); my $class = ref $self || $self; - if($self->_loader_args && !$class->loader) { + if(!$class->_loader_invoked) { $self->_invoke_loader } @@ -270,19 +254,19 @@ illustrated in these Examples: 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' ], ); @@ -310,7 +294,6 @@ replace the DB::Main with the following code: use base qw/DBIx::Class::Schema::Loader/; __PACKAGE__->loader_options( - relationships => 1, debug => 1, ); __PACKAGE__->connection('dbi:SQLite:example.db'); @@ -320,89 +303,6 @@ replace the DB::Main with the following code: 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, -and converting code that uses these methods should be trivial. - -=head2 load_from_connection - -This deprecated method is now roughly an alias for L. - -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 just like pre-0.03 versions of this -module did. - -You can force these legacy inflections with the -option L, -even after switch over to the preferred L 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 -based loader object -that was used during construction. See the -L docs for more information -on the available loader methods there. - -This accessor is deprecated. Do not use it. Anything you can -get from C, you can get via the normal L -methods, and your code will be more robust and forward-thinking -for doing so. - -If you're already using C 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 diff --git a/lib/DBIx/Class/Schema/Loader/Base.pm b/lib/DBIx/Class/Schema/Loader/Base.pm index 47d9654..0cb8cff 100644 --- a/lib/DBIx/Class/Schema/Loader/Base.pm +++ b/lib/DBIx/Class/Schema/Loader/Base.pm @@ -24,7 +24,7 @@ __PACKAGE__->mk_ro_accessors(qw/ left_base_classes components resultset_components - relationships + skip_relationships moniker_map inflect_singular inflect_plural @@ -58,9 +58,10 @@ classes, and implements the common functionality between them. These constructor options are the base options for L. 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 @@ -181,25 +182,6 @@ If set to a true value, the dumping code will overwrite existing files. The default is false, which means the dumping code will skip the already existing files. -=head1 DEPRECATED CONSTRUCTOR OPTIONS - -B - -=head2 inflect_map - -Equivalent to L. - -=head2 inflect - -Equivalent to L. - -=head2 connect_info, dsn, user, password, options - -You connect these schemas the same way you would any L, -which is by calling either C or C on a schema class -or object. These options are only supported via the deprecated -C interface, which is also being removed in 0.04000. - =head1 METHODS None of these methods are intended for direct invocation by regular @@ -248,14 +230,6 @@ sub new { $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}; @@ -313,7 +287,7 @@ sub load { 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; diff --git a/lib/DBIx/Class/Schema/Loader/DBI/DB2.pm b/lib/DBIx/Class/Schema/Loader/DBI/DB2.pm index 68cc311..f029457 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/DB2.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/DB2.pm @@ -17,10 +17,7 @@ DBIx::Class::Schema::Loader::DBI::DB2 - DBIx::Class::Schema::Loader::DBI DB2 Imp package My::Schema; use base qw/DBIx::Class::Schema::Loader/; - __PACKAGE__->loader_options( - relationships => 1, - db_schema => "MYSCHEMA", - ); + __PACKAGE__->loader_options( db_schema => "MYSCHEMA" ); 1; diff --git a/lib/DBIx/Class/Schema/Loader/DBI/Pg.pm b/lib/DBIx/Class/Schema/Loader/DBI/Pg.pm index 1bd3d4a..5f4ae7c 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/Pg.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/Pg.pm @@ -18,9 +18,7 @@ PostgreSQL Implementation. package My::Schema; use base qw/DBIx::Class::Schema::Loader/; - __PACKAGE__->loader_options( - relationships => 1, - ); + __PACKAGE__->loader_options( debug => 1 ); 1; diff --git a/lib/DBIx/Class/Schema/Loader/DBI/SQLite.pm b/lib/DBIx/Class/Schema/Loader/DBI/SQLite.pm index 62f90a3..6b8eaf0 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/SQLite.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/SQLite.pm @@ -18,7 +18,7 @@ DBIx::Class::Schema::Loader::DBI::SQLite - DBIx::Class::Schema::Loader::DBI SQLi package My::Schema; use base qw/DBIx::Class::Schema::Loader/; - __PACKAGE__->loader_optoins( relationships => 1 ); + __PACKAGE__->loader_options( debug => 1 ); 1; diff --git a/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm b/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm index 832b836..0f5a1f2 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm @@ -17,9 +17,7 @@ DBIx::Class::Schema::Loader::DBI::mysql - DBIx::Class::Schema::Loader::DBI mysql package My::Schema; use base qw/DBIx::Class::Schema::Loader/; - __PACKAGE__->load_from_connection( - relationships => 1, - ); + __PACKAGE__->loader_options( debug => 1 ); 1; diff --git a/t/20invocations.t b/t/20invocations.t index 22b0836..fdab791 100644 --- a/t/20invocations.t +++ b/t/20invocations.t @@ -21,49 +21,16 @@ sub test_schema { } 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 { diff --git a/t/22dump.t b/t/22dump.t index 47106a9..ba5eda3 100644 --- a/t/22dump.t +++ b/t/22dump.t @@ -32,7 +32,7 @@ rmtree($dump_path, 1, 1); eval { DBICTest::Schema::1->connect($make_dbictest_db::dsn) }; ok(!$@, 'no death with dump_directory set') or diag "Dump failed: $@"; -DBICTest::Schema::1->loader(undef); +DBICTest::Schema::1->_loader_invoked(undef); SKIP: { skip "ActiveState perl produces additional warnings", 5 @@ -58,7 +58,7 @@ eval { DBICTest::Schema::2->connect($make_dbictest_db::dsn) }; ok(!$@, 'no death with dump_directory set (overwrite1)') or diag "Dump failed: $@"; -DBICTest::Schema::2->loader(undef); +DBICTest::Schema::2->_loader_invoked(undef); eval { DBICTest::Schema::2->connect($make_dbictest_db::dsn) }; ok(!$@, 'no death with dump_directory set (overwrite2)') or diag "Dump failed: $@"; diff --git a/t/lib/dbixcsl_common_tests.pm b/t/lib/dbixcsl_common_tests.pm index 3a86855..6747d18 100644 --- a/t/lib/dbixcsl_common_tests.pm +++ b/t/lib/dbixcsl_common_tests.pm @@ -100,8 +100,13 @@ sub run_tests { } my $conn = $schema_class->clone; - my $monikers = $schema_class->loader->monikers; - my $classes = $schema_class->loader->classes; + my $monikers = {}; + my $classes = {}; + foreach my $source_name ($schema_class->sources) { + my $table_name = $schema_class->source($source_name)->from; + $monikers->{$table_name} = $source_name; + $classes->{$table_name} = $schema_class . q{::} . $source_name; + } my $moniker1 = $monikers->{loader_test1}; my $class1 = $classes->{loader_test1};