default_resultset_class
schema_base_class
result_base_class
+ overwrite_modifications
+
+ relationship_attrs
db_schema
_tables
__PACKAGE__->naming('v5');
+=head2 relationship_attrs
+
+Hashref of attributes to pass to each generated relationship, listed
+by type. Also supports relationship type 'all', containing options to
+pass to all generated relationships. Attributes set for more specific
+relationship types override those set in 'all'.
+
+For example:
+
+ relationship_attrs => {
+ all => { cascade_delete => 0 },
+ has_many => { cascade_delete => 1 },
+ },
+
+will set the C<cascade_delete> option to 0 for all generated relationships,
+except for C<has_many>, which will have cascade_delete as 1.
+
+NOTE: this option is not supported if v4 backward-compatible naming is
+set either globally (naming => 'v4') or just for relationships.
+
=head2 debug
If set to true, each constructive L<DBIx::Class> statement the loader
of the rest of your code for that matter). Don't blame me if a bug in this
code wipes something out when it shouldn't have, you've been warned.
+=head2 overwrite_modifications
+
+Default false. If false, when updating existing files, Loader will
+refuse to modify any Loader-generated code that has been modified
+since its last run (as determined by the checksum Loader put in its
+comment lines).
+
+If true, Loader will discard any manual modifications that have been
+made to Loader-generated code.
+
+Again, you should be using version control on your schema classes. Be
+careful with this option.
+
=head1 METHODS
None of these methods are intended for direct invocation by regular
);
}
- $self->{relbuilder} ||= DBIx::Class::Schema::Loader::RelBuilder->new(
- $self->schema, $self->inflect_plural, $self->inflect_singular
+ $self->{relbuilder} ||= DBIx::Class::Schema::Loader::RelBuilder->new (
+ $self->schema,
+ $self->inflect_plural,
+ $self->inflect_singular,
+ $self->relationship_attrs,
);
}
($ver, $ts) = $buffer =~ m/# Created by DBIx::Class::Schema::Loader v(.*?) @ (.*?)$/s;
$buffer .= $line;
- croak "Checksum mismatch in '$filename'"
- if Digest::MD5::md5_base64($buffer) ne $md5;
+ croak "Checksum mismatch in '$filename', the auto-generated part of the file has been modified outside of this loader. Aborting.\nIf you want to overwrite these modifications, set the 'overwrite_modifications' loader option.\n"
+ if !$self->overwrite_modifications && Digest::MD5::md5_base64($buffer) ne $md5;
$buffer = '';
}
$self->_pod_cut( $class );
} elsif ( $method eq 'add_columns' ) {
$self->_pod( $class, "=head1 ACCESSORS" );
- my $i = 0;
- foreach ( @_ ) {
- $i++;
- next unless $i % 2;
- $self->_pod( $class, '=head2 ' . $_ );
- my $comment;
- $comment = $self->_column_comment( $self->{_class2table}{$class}, ($i - 1) / 2 + 1 ) if $self->can('_column_comment');
- $self->_pod( $class, $comment ) if $comment;
+ my $col_counter = 0;
+ my @cols = @_;
+ while( my ($name,$attrs) = splice @cols,0,2 ) {
+ $col_counter++;
+ $self->_pod( $class, '=head2 ' . $name );
+ $self->_pod( $class,
+ join "\n", map {
+ my $s = $attrs->{$_};
+ $s = !defined $s ? 'undef' :
+ length($s) == 0 ? '(empty string)' :
+ $s;
+
+ " $_: $s"
+ } sort keys %$attrs,
+ );
+
+ if( $self->can('_column_comment')
+ and my $comment = $self->_column_comment( $self->{_class2table}{$class}, $col_counter)
+ ) {
+ $self->_pod( $class, $comment );
+ }
}
$self->_pod_cut( $class );
} elsif ( $method =~ /^(belongs_to|has_many|might_have)$/ ) {