DBIx-Class-Schema-Loader
view release on metacpan or search on metacpan
lib/DBIx/Class/Schema/Loader/RelBuilder.pm view on Meta::CPAN
$result = $inflected;
$mapped = 1;
}
}
return ($result, $mapped) if $mapped;
return ($self->_to_PL($relname), 0);
}
# Singularize a relationship name
sub _inflect_singular {
my ($self, $relname) = @_;
return '' if !defined $relname || $relname eq '';
my $result;
my $mapped = 0;
if( ref $self->inflect_singular eq 'HASH' ) {
if (exists $self->inflect_singular->{$relname}) {
$result = $self->inflect_singular->{$relname};
$mapped = 1;
}
}
elsif( ref $self->inflect_singular eq 'CODE' ) {
my $inflected = $self->inflect_singular->($relname);
if ($inflected) {
$result = $inflected;
$mapped = 1;
}
}
return ($result, $mapped) if $mapped;
return ($self->_to_S($relname), 0);
}
sub _to_PL {
my ($self, $name) = @_;
$name =~ s/_/ /g;
my $plural = Lingua::EN::Inflect::Phrase::to_PL($name);
$plural =~ s/ /_/g;
return $plural;
}
sub _to_S {
my ($self, $name) = @_;
$name =~ s/_/ /g;
my $singular = Lingua::EN::Inflect::Phrase::to_S($name);
$singular =~ s/ /_/g;
return $singular;
}
sub _default_relationship_attrs { +{
has_many => {
cascade_delete => 0,
cascade_copy => 0,
},
might_have => {
cascade_delete => 0,
cascade_copy => 0,
},
belongs_to => {
on_delete => 'CASCADE',
on_update => 'CASCADE',
is_deferrable => 1,
},
} }
# Accessor for options to be passed to each generated relationship type. takes
# the relationship type name and optionally any attributes from the database
# (such as FK ON DELETE/UPDATE and DEFERRABLE clauses), and returns a
# hashref or undef if nothing is set.
#
# The attributes from the database override the default attributes, which in
# turn are overridden by user supplied attributes.
sub _relationship_attrs {
my ( $self, $reltype, $db_attrs, $params ) = @_;
my $r = $self->relationship_attrs;
my %composite = (
%{ $self->_default_relationship_attrs->{$reltype} || {} },
%{ $db_attrs || {} },
(
ref $r eq 'HASH' ? (
%{ $r->{all} || {} },
%{ $r->{$reltype} || {} },
)
:
()
),
);
if (ref $r eq 'CODE') {
$params->{attrs} = \%composite;
my %ret = %{ $r->(%$params) || {} };
%composite = %ret if %ret;
}
return %composite ? \%composite : undef;
}
sub _strip_id_postfix {
my ($self, $name) = @_;
$name =~ s/_?(?:id|ref|cd|code|num)\z//i;
return $name;
}
sub _remote_attrs {
my ($self, $local_moniker, $local_cols, $fk_attrs, $params) = @_;
# get our set of attrs from _relationship_attrs, which uses the FK attrs if available
my $attrs = $self->_relationship_attrs('belongs_to', $fk_attrs, $params) || {};
# If any referring column is nullable, make 'belongs_to' an
# outer join, unless explicitly set by relationship_attrs
my $nullable = first { $self->schema->source($local_moniker)->column_info($_)->{is_nullable} } @$local_cols;
( run in 0.695 second using v1.01-cache-2.11-cpan-39bf76dae61 )