use Digest::MD5 qw//;
require DBIx::Class;
-our $VERSION = '0.04001';
+our $VERSION = '0.04999_04';
__PACKAGE__->mk_ro_accessors(qw/
schema
dump_directory
dump_overwrite
really_erase_my_files
+ use_namespaces
+ result_namespace
+ resultset_namespace
+ default_resultset_class
db_schema
_tables
These constructor options are the base options for
L<DBIx::Class::Schema::Loader/loader_opts>. Available constructor options are:
+=head2 loader_class
+
+Use the specified class as the loader instead of
+C<DBIx::Class::Schema::Loader${storage_type}>. This is mostly useful for
+subclassing existing loaders or in conjunction with
+L<DBIx::Class::Schema::Loader/dump_to_dir>.
+
=head2 skip_relationships
Skip setting up relationships. The default is to attempt the loading
C<ResultSetManager> will be automatically added to the above
C<components> list if this option is set.
+=head2 use_namespaces
+
+Generate result class names suitable for
+L<DBIx::Class::Schema/load_namespaces> and call that instead of
+L<DBIx::Class::Schema/load_classes>. When using this option you can also
+specify any of the options for C<load_namespaces> (i.e. C<result_namespace>,
+C<resultset_namespace>, C<default_resultset_class>), and they will be added
+to the call (and the generated result class names adjusted appropriately).
+
=head2 dump_directory
This option is designed to be a tool to help you transition from this
$self->_ext_stmt($class, $_);
}
$self->_ext_stmt($class,
- q|# End of lines loaded from '$real_inc_path' |
+ qq|# End of lines loaded from '$real_inc_path' |
);
close($fh)
or croak "Failed to close $real_inc_path: $!";
}
}
- $self->_load_tables(@created);
+ my $loaded = $self->_load_tables(@created);
- return map { $self->monikers->{$_} } @created;
+ return map { $self->monikers->{$_} } @$loaded;
}
sub _load_tables {
# Drop temporary cache
delete $self->{_cache};
- 1;
+ return \@tables;
}
sub _get_dump_filename {
my $schema_text =
qq|package $schema_class;\n\n|
. qq|use strict;\nuse warnings;\n\n|
- . qq|use base 'DBIx::Class::Schema';\n\n|
- . qq|__PACKAGE__->load_classes;\n|;
+ . qq|use base 'DBIx::Class::Schema';\n\n|;
+
+
+ if ($self->use_namespaces) {
+ $schema_text .= qq|__PACKAGE__->load_namespaces|;
+ my $namespace_options;
+ for my $attr (qw(result_namespace
+ resultset_namespace
+ default_resultset_class)) {
+ if ($self->$attr) {
+ $namespace_options .= qq| $attr => '| . $self->$attr . qq|',\n|
+ }
+ }
+ $schema_text .= qq|(\n$namespace_options)| if $namespace_options;
+ $schema_text .= qq|;\n|;
+ }
+ else {
+ $schema_text .= qq|__PACKAGE__->load_classes;\n|;
+
+ }
$self->_write_classfile($schema_class, $schema_text);
my $custom_content = $self->_get_custom_content($class, $filename);
- $custom_content ||= qq|\n# You can replace this text with custom|
+ $custom_content ||= qq|\n\n# You can replace this text with custom|
. qq| content, and it will be preserved on regeneration|
. qq|\n1;\n|;
or croak "Cannot open '$filename' for writing: $!";
# Write the top half and its MD5 sum
- print $fh $text . Digest::MD5::md5_base64($text) . "\n\n";
+ print $fh $text . Digest::MD5::md5_base64($text) . "\n";
# Write out anything loaded via external partial class file in @INC
print $fh qq|$_\n|
my $schema_class = $self->schema_class;
my $table_moniker = $self->_table2moniker($table);
- my $table_class = $schema_class . q{::} . $table_moniker;
+ my @result_namespace = ($schema_class);
+ if ($self->use_namespaces) {
+ my $result_namespace = $self->result_namespace || 'Result';
+ if ($result_namespace =~ /^\+(.*)/) {
+ # Fully qualified namespace
+ @result_namespace = ($1)
+ }
+ else {
+ # Relative namespace
+ push @result_namespace, $result_namespace;
+ }
+ }
+ my $table_class = join(q{::}, @result_namespace, $table_moniker);
my $table_normalized = lc $table;
$self->classes->{$table} = $table_class;
}
else {
my %col_info_lc = map { lc($_), $col_info->{$_} } keys %$col_info;
+ my $fks = $self->_table_fk_info($table);
+ for my $fkdef (@$fks) {
+ for my $col (@{ $fkdef->{local_columns} }) {
+ $col_info_lc{$col}->{is_foreign_key} = 1;
+ }
+ }
$self->_dbic_stmt(
$table_class,
'add_columns',
$fkdef->{remote_source} =
$self->monikers->{delete $fkdef->{remote_table}};
}
+ my $tbl_uniq_info = $self->_table_uniq_info($table);
my $local_moniker = $self->monikers->{$table};
- my $rel_stmts = $self->{relbuilder}->generate_code($local_moniker, $tbl_fk_info);
+ my $rel_stmts = $self->{relbuilder}->generate_code($local_moniker, $tbl_fk_info, $tbl_uniq_info);
foreach my $src_class (sort keys %$rel_stmts) {
my $src_stmts = $rel_stmts->{$src_class};