X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FBase.pm;h=c7a9856d2b148ee22050f6de245cd3ee2aae6789;hb=e344eed6c9cf62f2e5e78a31d8c499014a16c68c;hp=a723beb4cba2a90a192abc6112f3321c410583f7;hpb=c39e35077d88eb3c81696032a2e51fdf5cb69eab;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/Base.pm b/lib/DBIx/Class/Schema/Loader/Base.pm index a723beb..c7a9856 100644 --- a/lib/DBIx/Class/Schema/Loader/Base.pm +++ b/lib/DBIx/Class/Schema/Loader/Base.pm @@ -14,7 +14,7 @@ use Cwd qw//; use Digest::MD5 qw//; require DBIx::Class; -our $VERSION = '0.04002'; +our $VERSION = '0.04999_02'; __PACKAGE__->mk_ro_accessors(qw/ schema @@ -35,6 +35,10 @@ __PACKAGE__->mk_ro_accessors(qw/ dump_directory dump_overwrite really_erase_my_files + use_namespaces + result_namespace + resultset_namespace + default_resultset_class db_schema _tables @@ -141,6 +145,15 @@ classes. A good example would be C. Component C will be automatically added to the above C list if this option is set. +=head2 use_namespaces + +Generate result class names suitable for +L and call that instead of +L. When using this option you can also +specify any of the options for C (i.e. C, +C, C), 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 @@ -440,8 +453,26 @@ sub _dump_to_dir { 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); @@ -471,7 +502,7 @@ sub _write_classfile { 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|; @@ -487,7 +518,7 @@ sub _write_classfile { 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| @@ -569,7 +600,19 @@ sub _make_src_class { 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; @@ -609,6 +652,12 @@ sub _setup_src_meta { } 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', @@ -666,9 +715,10 @@ sub _load_relationships { $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};