RapidApp
view release on metacpan or search on metacpan
lib/RapidApp/DBIC/Component/TableSpec.pm view on Meta::CPAN
$self->TableSpec_cnf->{'priority_rel_columns'} and
!(
$self->TableSpec_cnf->{'no_priority_rel_column'} and
$self->TableSpec_cnf->{'no_priority_rel_column'}->{$rel}
) and
! $pri_cols{$rel} #<-- exclude primary column names. TODO: this check is performed later, fix
);
if($accessor eq 'single') {
my $cond_info = $self->parse_relationship_cond($info->{cond});
if($cond_info->{self} && $cond_info->{foreign}) {
push @single_rels, $rel;
my ($fk) = keys %{$info->{attrs}->{fk_columns}};
$fk_cols{$fk} = $rel if($fk);
}
else {
# (Github Issue #40)
# New: "virtual" single rels are relationships for which we
# cannot introspect in both directions (i.e. not physical
# foreign keys). These are still "single" in that they map to
# one related row, but will not be editable and not have a
# open link (yet)
push @virtual_single_rels, $rel;
}
}
elsif($accessor eq 'multi') {
push @multi_rels, $rel;
}
}
$self->TableSpec_set_conf('relationship_column_names',\@single_rels);
$self->TableSpec_set_conf('multi_relationship_column_names',\@multi_rels);
$self->TableSpec_set_conf('relationship_column_fks_map',\%fk_cols);
# New: move single rels up to immediately follow their FK column:
my @cols = map { $_, ( $fk_cols{$_} ? $fk_cols{$_} : () ) } $self->columns;
return uniq(@cols,@single_rels,@multi_rels,@virtual_single_rels);
}
# There is no longer extra logic at this stage because we're
# backing off of the entire original "ordering" design:
sub default_TableSpec_cnf_column_order { (shift)->TableSpec_valid_db_columns }
# Tmp code: these are all key names that may be used to set column
# properties (column TableSpecs). We are keeping track of them to
# use to for remapping while the TableSpec_cnf refactor/consolidation
# is underway...
my @col_prop_names = qw(
columns
column_properties
column_properties_ordered
column_properties_defaults
);
my %col_prop_names = map {$_=>1} @col_prop_names;
# The TableSpec_set_conf method is overly complex to allow
# flexible arguments as either hash or hashref, and because of
# the special case of setting the nested 'column_properties'
# param, if specified as the first argument, and then be able to
# accept its sub params as either a hash or a hashref. In hindsight,
# allowing this was probably not worth the extra maintenace/code and
# was too fancy for its own good (since this case may or may not
# shift the key/value positions in the arg list) but it is a part
# of the API for now...
sub TableSpec_set_conf {
my $self = shift;
die "TableSpec_set_conf(): bad arguments" unless (scalar(@_) > 0);
# First arg can be a hashref - deref and call again:
if(ref($_[0])) {
die "TableSpec_set_conf(): bad arguments" unless (
ref($_[0]) eq 'HASH' and
scalar(@_) == 1
);
return $self->TableSpec_set_conf(%{$_[0]})
}
$self->TableSpec_built_cnf(undef); #<-- FIXME!!
# Special handling for setting 'column_properties':
if ($col_prop_names{$_[0]}) {
shift @_; #<-- pull out the 'column_properties' first arg
return $self->_TableSpec_set_column_properties(@_);
};
# Enforce even number of args for good measure:
die join(' ',
'TableSpec_set_conf( %cnf ):',
"odd number of args in key/value list:", Dumper(\@_)
) if (scalar(@_) & 1);
my %cnf = @_;
for my $param (keys %cnf) {
# Also make sure all the keys (even positions) are simple scalars:
die join(' ',
'TableSpec_set_conf( %cnf ):',
'found ref in key position:', Dumper($_)
) if (ref($param));
if($col_prop_names{$param}) {
# Also handle column_properties specified with other params:
die join(' ',
'TableSpec_set_conf( %cnf ): Expected',
"HashRef value for config key '$param':", Dumper($cnf{$param})
) unless (ref($cnf{$param}) eq 'HASH');
$self->_TableSpec_set_column_properties($cnf{$param});
}
else {
$self->TableSpec_cnf->{$param} = $cnf{$param}
}
}
}
# Special new internal method for setting column properties and
# properly handle backward compatability. Simultaneously sets/updates
# the cnf key names for all the 'column_properties' names that are
# currently supported by the API (as references pointing to the same
# single config HashRef). This is only temporary and is a throwback
# caused by the older/original API design for the TableSpec_cnf and
( run in 0.506 second using v1.01-cache-2.11-cpan-71847e10f99 )