use Data::Dumper::Concise;
use Scalar::Util 'looks_like_number';
use File::Slurp 'slurp';
-use DBIx::Class::Schema::Loader::Constants 'BY_CASE_TRANSITION';
+use DBIx::Class::Schema::Loader::Utils 'split_name';
require DBIx::Class;
-our $VERSION = '0.07000';
+our $VERSION = '0.07001';
__PACKAGE__->mk_group_ro_accessors('simple', qw/
schema
default_resultset_class
schema_base_class
result_base_class
+ use_moose
overwrite_modifications
relationship_attrs
datetime_locale
config_file
loader_class
+ qualify_objects
/);
The option also takes a hashref:
- naming => { relationships => 'v6', monikers => 'v6' }
+ naming => { relationships => 'v7', monikers => 'v7' }
The keys are:
Currently the drivers for SQLite, mysql, MSSQL and Firebird/InterBase support
setting this option.
+=head1 qualify_objects
+
+Set to true to prepend the L</db_schema> to table names for C<<
+__PACKAGE__->table >> calls, and to some other things like Oracle sequences.
+
=head1 METHODS
None of these methods are intended for direct invocation by regular
}
if ($old_real_inc_path) {
- open(my $fh, '<', $old_real_inc_path)
- or croak "Failed to open '$old_real_inc_path' for reading: $!";
+ my $code = slurp $old_real_inc_path;
+
$self->_ext_stmt($class, <<"EOF");
# These lines were loaded from '$old_real_inc_path',
# upgrade. See skip_load_external to disable this feature.
EOF
- my $code = slurp $old_real_inc_path;
$code = $self->_rewrite_old_classnames($code);
if ($self->dynamic) {
Arguments: schema
-Rescan the database for newly added tables. Does
-not process drops or changes. Returns a list of
-the newly added table monikers.
+Rescan the database for changes. Returns a list of the newly added table
+monikers.
-The schema argument should be the schema class
-or object to be affected. It should probably
-be derived from the original schema_class used
-during L</load>.
+The schema argument should be the schema class or object to be affected. It
+should probably be derived from the original schema_class used during L</load>.
=cut
}
}
- my $loaded = $self->_load_tables(@created);
+ delete $self->{_dump_storage};
+ delete $self->{_relations_started};
+
+ my $loaded = $self->_load_tables(@current);
- return map { $self->monikers->{$_} } @$loaded;
+ return map { $self->monikers->{$_} } @created;
}
sub _relbuilder {
qq|package $schema_class;\n\n|
. qq|# Created by DBIx::Class::Schema::Loader\n|
. qq|# DO NOT MODIFY THE FIRST PART OF THIS FILE\n\n|
- . qq|use strict;\nuse warnings;\n\n|
- . qq|use base '$schema_base_class';\n\n|;
+ . qq|use strict;\nuse warnings;\n\n|;
+ if ($self->use_moose) {
+ $schema_text.= qq|use Moose;\nuse MooseX::NonMoose;\nextends '$schema_base_class';\n\n|;
+ }
+ else {
+ $schema_text .= qq|use base '$schema_base_class';\n\n|;
+ }
if ($self->use_namespaces) {
$schema_text .= qq|__PACKAGE__->load_namespaces|;
qq|package $src_class;\n\n|
. qq|# Created by DBIx::Class::Schema::Loader\n|
. qq|# DO NOT MODIFY THE FIRST PART OF THIS FILE\n\n|
- . qq|use strict;\nuse warnings;\n\n|
- . qq|use base '$result_base_class';\n\n|;
-
+ . qq|use strict;\nuse warnings;\n\n|;
+ if ($self->use_moose) {
+ $src_text.= qq|use Moose;\nuse MooseX::NonMoose;\nextends '$result_base_class';\n\n|;
+ }
+ else {
+ $src_text .= qq|use base '$result_base_class';\n\n|;
+ }
$self->_write_classfile($src_class, $src_text);
}
}
sub _default_custom_content {
- return qq|\n\n# You can replace this text with custom|
- . qq| content, and it will be preserved on regeneration|
- . qq|\n1;\n|;
+ my $self = shift;
+ my $default = qq|\n\n# You can replace this text with custom|
+ . qq| content, and it will be preserved on regeneration|;
+ if ($self->use_moose) {
+ $default .= qq|\nno Moose;\n__PACKAGE__->meta->make_immutable( inline_constructor => 0 );\n1;\n|;
+ }
+ $default .= qq|\n1;\n|;
+ return $default;
}
sub _get_custom_content {
sub _make_column_accessor_name {
my ($self, $column_name) = @_;
- return join '_', map lc, split BY_CASE_TRANSITION, $column_name;
+ return join '_', map lc, split_name $column_name;
}
# Set up metadata (cols, pks, etc)
$table_name = \ $self->_quote_table_name($table_name);
}
- $self->_dbic_stmt($table_class,'table',$table_name);
+ my $full_table_name = ($self->qualify_objects ? ($self->db_schema . '.') : '') . (ref $table_name ? $$table_name : $table_name);
+
+ # be careful to not create refs Data::Dump can "optimize"
+ $full_table_name = \do {"".$full_table_name} if ref $table_name;
+
+ $self->_dbic_stmt($table_class, 'table', $full_table_name);
my $cols = $self->_table_columns($table);
my $col_info = $self->__columns_info_for($table);
+
+ while (my ($col, $info) = each %$col_info) {
+ if ($col =~ /\W/) {
+ ($info->{accessor} = $col) =~ s/\W+/_/g;
+ }
+ }
+
if ($self->preserve_case) {
- for my $col (keys %$col_info) {
+ while (my ($col, $info) = each %$col_info) {
if ($col ne lc($col)) {
if ((not exists $self->naming->{column_accessors}) || (($self->naming->{column_accessors} =~ /(\d+)/)[0] >= 7)) {
- $col_info->{$col}{accessor} = $self->_make_column_accessor_name($col);
+ $info->{accessor} = $self->_make_column_accessor_name($info->{accessor} || $col);
}
else {
- $col_info->{$col}{accessor} = lc $col;
+ $info->{accessor} = lc($info->{accessor} || $col);
}
}
}
return join '', map ucfirst, split /\W+/, $inflected;
}
- my @words = map lc, split BY_CASE_TRANSITION, $table;
+ my @words = map lc, split_name $table;
my $as_phrase = join ' ', @words;
my $inflected = Lingua::EN::Inflect::Phrase::to_S($as_phrase);