use DBIx::Class::ResultSourceHandle;
use DBIx::Class::Carp;
-use DBIx::Class::_Util 'is_literal_value';
+use DBIx::Class::_Util 'UNRESOLVABLE_CONDITION';
use Devel::GlobalDestruction;
use Try::Tiny;
use List::Util 'first';
return wantarray ? @res : $res[0];
}
-our $UNRESOLVABLE_CONDITION = \ '1 = 0';
+# Keep this indefinitely. There is evidence of both CPAN and
+# darkpan using it, and there isn't much harm in an extra var
+# anyway.
+our $UNRESOLVABLE_CONDITION = UNRESOLVABLE_CONDITION;
+# YES I KNOW THIS IS EVIL
+# it is there to save darkpan from themselves, since internally
+# we are moving to a constant
+Internals::SvREADONLY($UNRESOLVABLE_CONDITION => 1);
# Resolves the passed condition to a concrete query fragment and a flag
# indicating whether this is a cross-table condition. Also an optional
}
# see which parts of the joinfree cond are *NOT* foreign-source-column equalities
- my $joinfree_cond_equality_columns = { map
- {( $_ => 1 )}
- @{ $self->schema->storage->_extract_fixed_condition_columns($joinfree_cond) }
- };
+ my $joinfree_cond_equality_columns =
+ $self->schema->storage->_extract_fixed_condition_columns($joinfree_cond, 'consider_nulls');
+
@nonvalue_cols = map
{ $_ =~ /^\Q$joinfree_alias.\E(.+)/ }
grep
- { ! $joinfree_cond_equality_columns->{$_} }
+ { ! exists $joinfree_cond_equality_columns->{$_} }
keys %$joinfree_cond;
return ($joinfree_cond, 0, (@nonvalue_cols ? \@nonvalue_cols : undef));
$obj_cols->[$i],
) if $obj->in_storage;
- return $UNRESOLVABLE_CONDITION;
+ return UNRESOLVABLE_CONDITION;
}
else {
$cond->{"$plain_alias.$plain_cols->[$i]"} = $obj->get_column($obj_cols->[$i]);
}
elsif (ref $args->{condition} eq 'ARRAY') {
if (@{$args->{condition}} == 0) {
- return $UNRESOLVABLE_CONDITION;
+ return UNRESOLVABLE_CONDITION;
}
elsif (@{$args->{condition}} == 1) {
return $self->_resolve_relationship_condition({