Merge 'trunk' into 'current'
Brandon Black [Tue, 22 May 2007 12:58:12 +0000 (12:58 +0000)]
r31951@brandon-blacks-computer (orig r3359):  blblack | 2007-05-22 07:56:21 -0500
0.03012 released

1  2 
Changes
lib/DBIx/Class/Schema/Loader.pm

diff --combined Changes
+++ b/Changes
@@@ -1,26 -1,11 +1,27 @@@
  Revision history for Perl extension DBIx::Class::Schema::Loader
  
+ 0.03012 Tue May 22, 2007
          - Relationship names for multiple multi-col rels between
            the same table fixed by ilmari
          - Fix from Marc Espie for CREATE TABLE 'foo' for SQLite
          - skip ^sqlite_ tables in SQLite (thanks chromatic)
  
 +0.03999_01 Sat Apr 14 19:57:40 GMT 2007
 +        - Added *experimental* Oracle support from work done
 +          by Tsunoda Kazuya some months ago.  Not well tested.
 +        - Added "rescan" schema (and loader) method, which picks
 +          up newly created tables at runtime
 +        - Made dump_to_dir / dump_overwrite much more intelligent
 +          (they now preserve customizations by default)
 +        - Added support for DBI's new standard "statistics_info"
 +          method to gather unique key info (only supported by
 +          DBD::Pg trunk afaik)
 +        - columns_info_for imported from DBIx::Class
 +        - relationships are now on by default, use skip_relationships
 +          to disable them
 +        - Removed previously deprecated methods/options
 +        - Added $VERSION to all packages in this dist
 +
  0.03011 Sat Apr 14 19:03:07 UTC 2007
          - fix case-sensitivity in UNIQUE parsing for SQLite
  
@@@ -2,8 -2,7 +2,7 @@@ package DBIx::Class::Schema::Loader
  
  use strict;
  use warnings;
- use base qw/DBIx::Class::Schema/;
- use base qw/Class::Data::Accessor/;
+ use base qw/DBIx::Class::Schema Class::Data::Accessor/;
  use Carp::Clan qw/^DBIx::Class/;
  use UNIVERSAL::require;
  use Class::C3;
@@@ -12,10 -11,11 +11,10 @@@ use Scalar::Util qw/ weaken /
  # 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
 -our $VERSION = '0.03012';
 +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_classaccessors(qw/dump_to_dir _loader_invoked _loader/);
  
  =head1 NAME
  
@@@ -27,6 -27,7 +26,6 @@@ DBIx::Class::Schema::Loader - Dynamic d
    use base qw/DBIx::Class::Schema::Loader/;
  
    __PACKAGE__->loader_options(
 -      relationships           => 1,
        constraint              => '^foo.*',
        # debug                 => 1,
    );
@@@ -64,8 -65,9 +63,8 @@@ than to be what you use in the long ter
  
  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
  
@@@ -76,10 -78,17 +75,10 @@@ detailed information on all of the argu
  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
  
@@@ -87,7 -96,18 +86,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;
  }
@@@ -96,13 -116,7 +95,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;
        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;
 +    $self->_loader($impl->new(%$args));
 +    $self->_loader->load;
 +    $self->_loader_invoked(1);
  
      $self;
  }
@@@ -143,7 -158,7 +142,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
      }
  
@@@ -254,19 -269,19 +253,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' ],
      );
  
@@@ -284,18 -299,6 +283,18 @@@ sub make_schema_at 
      $target->connection(@$connect_info);
  }
  
 +=head2 rescan
 +
 +Re-scans the database for newly added tables since the initial
 +load, and adds them to the schema at runtime, including relationships,
 +etc.  Does not process drops or changes.
 +
 +Returns a list of the new monikers added.
 +
 +=cut
 +
 +sub rescan { my $self = shift; $self->_loader->rescan($self) }
 +
  =head1 EXAMPLE
  
  Using the example in L<DBIx::Class::Manual::ExampleSchema> as a basis
@@@ -306,6 -309,7 +305,6 @@@ replace the DB::Main with the followin
    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