my $name = $self->name;
$name = $$name if (ref $name eq 'SCALAR');
+ $name =~ s/ ^ [^\.]+ \. //x; # strip possible schema qualifier
return join '_', $name, @$cols;
}
# _resolve_relationship_condition always returns qualified cols even in the
# case of join_free_condition, but nothing downstream expects this
- if (ref $res[0] eq 'HASH' and ($is_objlike[0] or $is_objlike[1]) ) {
+ if ($rc->{join_free_condition} and ref $res[0] eq 'HASH') {
$res[0] = { map
{ ($_ =~ /\.(.+)/) => $res[0]{$_} }
keys %{$res[0]}
# metadata
#
## self-explanatory API, modeled on the custom cond coderef:
-# rel_name
-# foreign_alias
-# foreign_values
-# self_alias
-# self_result_object
-# require_join_free_condition
-# infer_values_based_on (either not supplied or a hashref, implies require_join_free_condition)
-# condition (optional, derived from $self->rel_info(rel_name))
+# rel_name => (scalar)
+# foreign_alias => (scalar)
+# foreign_values => (either not supplied or a hashref)
+# self_alias => (scalar)
+# self_result_object => (either not supplied or a result object)
+# require_join_free_condition => (boolean, throws on failure to construct a JF-cond)
+# infer_values_based_on => (either not supplied or a hashref, implies require_join_free_condition)
+# condition => (sqla cond struct, optional, defeaults to from $self->rel_info(rel_name)->{cond})
#
## returns a hash
-# condition
-# identity_map
-# join_free_condition (maybe unset)
-# inferred_values (always either complete or unset)
+# condition => (a valid *likely fully qualified* sqla cond structure)
+# identity_map => (a hashref of foreign-to-self *unqualified* column equality names)
+# join_free_condition => (a valid *fully qualified* sqla cond structure, maybe unset)
+# inferred_values => (in case of an available join_free condition, this is a hashref of
+# *unqualified* column/value *EQUALITY* pairs, representing an amalgamation
+# of the JF-cond parse and infer_values_based_on
+# always either complete or unset)
#
sub _resolve_relationship_condition {
my $self = shift;
next if $col_eqs->{$lhs} eq UNRESOLVABLE_CONDITION;
my ($rhs) = @{ is_literal_value( $ret->{condition}{$lhs} ) || next };
- # there is no way to know who is right and who is left
- # therefore the ugly scan below
+ # there is no way to know who is right and who is left in a cref
+ # therefore a full blown resolution call
# TEMP
my $rel_rsrc = $self->related_source($args->{rel_name});
$colinfos ||= $storage->_resolve_column_info([
{ -alias => $args->{foreign_alias}, -rsrc => $rel_rsrc },
]);
- my ($l_col, $l_alias, $r_col, $r_alias) = map {
- ( reverse $_ =~ / ^ (?: ([^\.]+) $ | ([^\.]+) \. (.+) ) /x )[0,1]
- } ($lhs, $rhs);
+ my ($l_col, $r_col) = map { $_ =~ / ([^\.]+) $ /x } ($lhs, $rhs);
if (
$colinfos->{$l_col}