X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource.pm;h=dbbe1adfd8f1bacaca1cdc20799a008d168d537a;hb=321d9634cc6befb5a7704e15f3027927eab8952a;hp=659948f789d8894dde4a1485834050c4eb7354b4;hpb=04786a4c19fe3964002b69e8a3dbb291524e0610;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource.pm b/lib/DBIx/Class/ResultSource.pm index 659948f..dbbe1ad 100644 --- a/lib/DBIx/Class/ResultSource.pm +++ b/lib/DBIx/Class/ResultSource.pm @@ -12,7 +12,7 @@ __PACKAGE__->load_components(qw/AccessorGroup/); __PACKAGE__->mk_group_accessors('simple' => qw/_ordered_columns _columns _primaries _unique_constraints name resultset_attributes - schema from _relationships source_name/); + schema from _relationships column_info_from_storage source_name/); __PACKAGE__->mk_group_accessors('component_class' => qw/resultset_class result_class/); @@ -56,6 +56,9 @@ sub new { $new->{_relationships} = { %{$new->{_relationships}||{}} }; $new->{name} ||= "!!NAME NOT SET!!"; $new->{_columns_info_loaded} ||= 0; + if(!defined $new->column_info_from_storage) { + $new->{column_info_from_storage} = 1 + } return $new; } @@ -96,29 +99,31 @@ whatever your database supports. =item size The length of your column, if it is a column type that can have a size -restriction. This is currently not used by DBIx::Class. +restriction. This is currently only used by L. =item is_nullable Set this to a true value for a columns that is allowed to contain -NULL values. This is currently not used by DBIx::Class. +NULL values. This is currently only used by L. =item is_auto_increment Set this to a true value for a column whose value is somehow automatically set. This is used to determine which columns to empty -when cloning objects using C. +when cloning objects using C. It is also used by +L. =item is_foreign_key Set this to a true value for a column that contains a key from a -foreign table. This is currently not used by DBIx::Class. +foreign table. This is currently only used by +L. =item default_value Set this to the default value which will be inserted into a column by the database. Can contain either a value or a function. This is -currently not used by DBIx::Class. +currently only used by L. =item sequence @@ -127,6 +132,14 @@ generate a new key value. If not specified, L will attempt to retrieve the name of the sequence from the database automatically. +=item extras + +This is used by L and L +to add extra non-generic data to the column. For example: C<< extras +=> { unsigned => 1} >> is used by the MySQL producer to set an integer +column to unsigned. For more details, see +L. + =back =head2 add_column @@ -184,12 +197,13 @@ sub column_info { unless exists $self->_columns->{$column}; #warn $self->{_columns_info_loaded}, "\n"; if ( ! $self->_columns->{$column}{data_type} + and $self->column_info_from_storage and ! $self->{_columns_info_loaded} and $self->schema and $self->storage ) { $self->{_columns_info_loaded}++; - my $info; - my $lc_info; + my $info = {}; + my $lc_info = {}; # eval for the case of storage without table eval { $info = $self->storage->columns_info_for( $self->from ) }; unless ($@) { @@ -197,13 +211,27 @@ sub column_info { $lc_info->{lc $realcol} = $info->{$realcol}; } foreach my $col ( keys %{$self->_columns} ) { - $self->_columns->{$col} = { %{ $self->_columns->{$col}}, %{$info->{$col} || $lc_info->{lc $col}} }; + $self->_columns->{$col} = { + %{ $self->_columns->{$col} }, + %{ $info->{$col} || $lc_info->{lc $col} || {} } + }; } } } return $self->_columns->{$column}; } +=head2 column_info_from_storage + +Enables or disables the on-demand automatic loading of the above +column metadata from storage as neccesary. Defaults to true in the +current release, but will default to false in future releases starting +with 0.08000. This is *deprecated*, and should not be used. It will +be removed before 1.0. + + __PACKAGE__->column_info_from_storage(0); + __PACKAGE__->column_info_from_storage(1); + =head2 columns my @column_names = $obj->columns; @@ -247,7 +275,7 @@ sub remove_columns { } foreach (@cols) { - undef $columns->{$_}; + delete $columns->{$_}; }; $self->_ordered_columns(\@remaining); @@ -910,13 +938,23 @@ but is cached from then on unless resultset_class changes. =head2 resultset_class +` package My::ResultSetClass; + use base 'DBIx::Class::ResultSet'; + ... + + $source->resultset_class('My::ResultSet::Class'); + Set the class of the resultset, this is useful if you want to create your own resultset methods. Create your own class derived from -L, and set it here. +L, and set it here. =head2 resultset_attributes -Specify here any attributes you wish to pass to your specialised resultset. + $source->resultset_attributes({ order_by => [ 'id' ] }); + +Specify here any attributes you wish to pass to your specialised +resultset. For a full list of these, please see +L. =cut