X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FModel%2FDBIC%2FSchema.pm;h=4d9b61df349801f4fdc125e8ad759d0bebd40709;hb=1714a8a0ad486c7956ce7bd3f62e7b78a3d7222e;hp=45392e98c7f6b5a157a6fd033e31fb3101797746;hpb=d816d7bf6502a6c67912f1736705c6b55a43a518;p=catagits%2FCatalyst-Model-DBIC-Schema.git diff --git a/lib/Catalyst/Model/DBIC/Schema.pm b/lib/Catalyst/Model/DBIC/Schema.pm index 45392e9..4d9b61d 100644 --- a/lib/Catalyst/Model/DBIC/Schema.pm +++ b/lib/Catalyst/Model/DBIC/Schema.pm @@ -5,7 +5,7 @@ use mro 'c3'; extends 'Catalyst::Model'; with 'CatalystX::Component::Traits'; -our $VERSION = '0.33'; +our $VERSION = '0.58'; $VERSION = eval $VERSION; use namespace::autoclean; @@ -33,7 +33,7 @@ A typical usage of the helper script would be: script/myapp_create.pl model FilmDB DBIC::Schema MyApp::Schema::FilmDB \ create=static dbi:mysql:filmdb dbusername dbpass \ - quote_char='`' name_sep='.' + quote_names=1 If you are unfamiliar with L, see L first. @@ -60,11 +60,6 @@ be used/accessed in the normal Catalyst manner, via C<< $c->model() >>: my $db_model = $c->model('FilmDB'); # a Catalyst::Model my $dbic = $c->model('FilmDB')->schema; # the actual DBIC object -The Model proxies to the C instance so you can do: - - my $rs = $db_model->resultset('Actor'); # ... or ... - my $rs = $dbic ->resultset('Actor'); # same! - There is also a shortcut, which returns a L directly, instead of a L: @@ -124,7 +119,7 @@ When your Catalyst app starts up, a thin Model layer is created as an interface to your DBIC Schema. It should be clearly noted that the model object returned by C<< $c->model('FilmDB') >> is NOT itself a DBIC schema or resultset object, but merely a wrapper proving L to access the underlying -schema (but also proxies other methods to the underlying schema.) +schema. In addition to this model class, a shortcut class is generated for each source in the schema, allowing easy and direct access to a resultset of the @@ -166,8 +161,6 @@ use with L, the old default. =head1 CONFIG PARAMETERS -Any options in your config not listed here are passed to your schema. - =head2 schema_class This is the classname of your L Schema. It needs @@ -176,13 +169,12 @@ C namespace. This parameter is required. =head2 connect_info -This is an arrayref of connection parameters, which are specific to your -C (see your storage type documentation for more details). -If you only need one parameter (e.g. the DSN), you can just pass a string -instead of an arrayref. +This is a hashref or arrayref of connection parameters, which are specific to +your C (see your storage type documentation for more details). If +you only need one parameter (e.g. the DSN), you can just pass a string. This is not required if C already has connection information -defined inside itself (which isn't highly recommended, but can be done) +defined inside itself (which isn't highly recommended, but can be done.) For L, which is the only supported C in L at the time of this writing, the @@ -227,7 +219,7 @@ Or using L: user postgres password "" auto_savepoint 1 - quote_char """ + quote_names 1 on_connect_do some SQL statement on_connect_do another SQL statement @@ -253,7 +245,7 @@ Or using L: LongReadLen: 1000000 LongTruncOk: 1 on_connect_call: 'datetime_setup' - quote_char: '"' + quote_names: 1 The old arrayref style with hashrefs for L then L options is also supported: @@ -289,10 +281,6 @@ E.g.: A new instance is created at application time, so any consumed required attributes, coercions and modifiers will work. -By default, the L trait -is loaded. It can be disabled by specifying C<-SchemaProxy> in traits. See -L. - Traits are applied at L time using L. @@ -312,6 +300,8 @@ Traits that come with the distribution: =item L +=item L + =back =head2 storage_type @@ -359,16 +349,14 @@ Unresolved arrayref of traits passed in the config. Traits you used resolved to full class names. -=head1 METHODS - -Methods not listed here are delegated to the connected schema used by the model -instance, so the following are equivalent: +=head1 CONFIGURING YOUR SCHEMA AND RESULTSETS - $c->model('DB')->schema->my_accessor('foo'); - # or - $c->model('DB')->my_accessor('foo'); +See the documentation for +L for instructions on how +to pass config values from your L config to your +L and/or L classes. -Methods on the model take precedence over schema methods. +=head1 METHODS =head2 new @@ -421,13 +409,10 @@ Shortcut for ->schema->txn_scope_guard =head2 storage Provides an accessor for the connected schema's storage object. -Used often for debugging and controlling transactions. - -=cut -has '+_trait_merge' => (default => 1); +See L and L. -__PACKAGE__->config->{traits} = ['SchemaProxy']; +=cut has schema_class => ( is => 'ro', @@ -456,6 +441,14 @@ has _default_cursor_class => ( has schema => (is => 'rw', isa => Schema); +my $app_class; + +before COMPONENT => sub { + $app_class = ref $_[1] || $_[1]; +}; + +sub app_class { $app_class } + sub BUILD { my ($self, $args) = @_; my $class = $self->_original_class_name; @@ -469,7 +462,7 @@ sub BUILD { die "Either ->config->{connect_info} must be defined for $class" . " or $schema_class must have connect info defined on it." . " Here's what we got:\n" - . Dumper($self); + . Dumper($args); } } @@ -486,7 +479,8 @@ sub BUILD { $self->composed_schema($schema_class->compose_namespace($class)) unless $is_installed; - $self->schema($self->composed_schema->clone); + $self->schema($self->composed_schema->clone) + unless $self->schema; $self->schema->storage_type($self->storage_type) if $self->storage_type; @@ -500,7 +494,7 @@ sub clone { shift->composed_schema->clone(@_); } sub connect { shift->composed_schema->connect(@_); } -# proxy methods, for when the SchemaProxy trait isn't loaded +# some proxy methods, see also SchemaProxy sub resultset { shift->schema->resultset(@_); } @@ -508,6 +502,8 @@ sub txn_do { shift->schema->txn_do(@_); } sub txn_scope_guard { shift->schema->txn_scope_guard(@_); } +sub storage { shift->schema->storage(@_); } + =head2 setup Called at C time before configuration, but after L is @@ -631,6 +627,14 @@ L in MyApp.pm: } }); +=head1 METHOD PROXYING + +The automatic proxying to the underlying L has been +removed as of version C<0.34>, to enable this feature add C to +L. + +See L. + =head1 SEE ALSO General Catalyst Stuff: @@ -649,6 +653,7 @@ Traits: L, L, L, +L, L =head1 AUTHOR @@ -671,9 +676,11 @@ ozum: Ozum Eldogan C Pavel I. Shaydo C +t0m: Tomas Doran + =head1 COPYRIGHT -Copyright (c) 2006 - 2009 +Copyright (c) 2006 - 2010 the Catalyst::Model::DBIC::Schema L and L as listed above. @@ -685,4 +692,4 @@ under the same terms as Perl itself. =cut 1; -# vim:sts=4 sw=4 et: +# vim:sts=4 sw=4 et tw=80: