=head1 INTRODUCTION
-This document lists various terms used in DBIx::Class and attempts to explain them.
+This document lists various terms used in DBIx::Class and attempts to
+explain them.
=head1 TERMS
+=head2 Inflation
+
+The act of turning database row data into objects in
+language-space. DBIx::Class further allows you to inflate your data
+into perl objects which more usefully represent their contents. For
+example: L<DBIx::Class::InflateColumn::DateTime> for datetime or
+timestamp column data.
+
+=head2 Join
+
+This is an SQL keyword that gets mentioned a lot. It is used to fetch
+data from more than one table at once, by C<join>ing the tables on
+fields where they have common data.
+
+=head2 Normalisation
+
+A normalised database is a sane database. Each table contains only
+data belonging to one concept, related tables refer to the key field
+or fields of each other. Some links to webpages about normalisation
+can be found in L<DBIx::Class::Manual::FAQ|the FAQ>.
+
=head2 ORM
+Object-relational mapping, or Object-relationship modelling. Either
+way it's a method of mapping the contents of database tables (rows),
+to objects in programming-language-space. DBIx::Class is an ORM.
+
=head2 ResultSet
This is an object representing a set of data. It can either be an
$attrs->{alias} ||= 'me';
- bless {
+ # XXXX
+ # Use a named hash here and bless afterwards to avoid a huge performance hit
+ # in perl 5.8.8-5+ FC5 and later, and possibly other distributions.
+ #
+ # See https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196836 for more
+ # information.
+ my $self = {
result_source => $source,
result_class => $attrs->{result_class} || $source->result_class,
cond => $attrs->{where},
count => undef,
pager => undef,
attrs => $attrs
- }, $class;
+ };
+
+ bless $self, $class;
+
+ return $self;
}
=head2 search
__PACKAGE__->mk_group_accessors('simple' => qw/_ordered_columns
_columns _primaries _unique_constraints name resultset_attributes
- schema from _relationships/);
+ schema from _relationships column_info_from_storage source_name/);
__PACKAGE__->mk_group_accessors('component_class' => qw/resultset_class
- result_class source_name/);
+ result_class/);
=head1 NAME
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 )
{
return $self->_columns->{$column};
}
+=head2 load_column_info_from_storage
+
+Enables the on-demand automatic loading of the above column
+metadata from storage as neccesary.
+
+=cut
+
+sub load_column_info_from_storage { shift->column_info_from_storage(1) }
+
=head2 columns
my @column_names = $obj->columns;
return $self->result_source_instance->column_info($column);
}
+sub load_column_info_from_storage {
+ shift->result_source_instance->load_column_info_from_storage;
+}
sub columns {
return shift->result_source_instance->columns(@_);
my ($self, $type, $dir, $version) = @_;
my $filename = ref($self);
- $filename =~ s/^.*:://;
+ $filename =~ s/::/-/;
$filename = "$dir$filename-$version-$type.sql";
return $filename;
$databases ||= ['MySQL', 'SQLite', 'PostgreSQL'];
$databases = [ $databases ] if(ref($databases) ne 'ARRAY');
$version ||= $schema->VERSION || '1.x';
+ $sqltargs = { ( add_drop_table => 1 ), %{$sqltargs || {}} };
eval "use SQL::Translator";
$self->throw_exception("Can't deploy without SQL::Translator: $@") if $@;
- my $sqlt = SQL::Translator->new({
-# debug => 1,
- add_drop_table => 1,
- });
+ my $sqlt = SQL::Translator->new($sqltargs);
foreach my $db (@$databases)
{
$sqlt->reset();
sub deploy {
my ($self, $schema, $type, $sqltargs) = @_;
- foreach my $statement ( $self->deployment_statements($schema, $type, undef, undef, { no_comments => 1, %$sqltargs }) ) {
+ foreach my $statement ( $self->deployment_statements($schema, $type, undef, undef, { no_comments => 1, %{ $sqltargs || {} } } ) ) {
for ( split(";\n", $statement)) {
next if($_ =~ /^--/);
next if(!$_);
# test column_info
{
$schema->source("Artist")->{_columns}{'artistid'} = {};
+ $schema->source("Artist")->load_column_info_from_storage;
my $typeinfo = $schema->source("Artist")->column_info('artistid');
is($typeinfo->{data_type}, 'INTEGER', 'column_info ok');
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('casecheck');
__PACKAGE__->add_columns(qw/id name NAME uc_name/);
+ __PACKAGE__->load_column_info_from_storage;
__PACKAGE__->set_primary_key('id');
}