);
use Data::Query::ExprHelpers qw(perl_scalar_value);
use Moo;
+use namespace::clean;
has renderer_will_quote => (
is => 'ro'
return undef unless defined($where);
+ # if we're given a simple string assume it's a literal
+ return $self->_literal_to_dq($where) if !ref($where);
+
# turn the convert misfeature on - only used in WHERE clauses
local $self->{where_convert} = $self->convert;
or (ref($where) eq 'REF' and ref($$where) eq 'ARRAY')
) {
return $self->_literal_to_dq($$where);
+ } elsif (ref($where) eq 'REF' and ref($$where) eq 'HASH') {
+ return $$where;
} elsif (!ref($where) or Scalar::Util::blessed($where)) {
return $self->_value_to_dq($where);
}
my $dq = {
type => DQ_ORDER,
- ($dir ? (direction => $dir) : ()),
+ (defined($dir) ? (reverse => !!($dir =~ /desc/i)) : ()),
($from ? (from => $from) : ()),
};
} elsif (ref($arg) eq 'REF' and ref($$arg) eq 'ARRAY') {
$dq->{by} = $self->_literal_to_dq($$arg);
} elsif (ref($arg) eq 'SCALAR') {
- $dq->{by} = $self->_literal_to_dq($$arg);
+
+ # < mst> right, but if it doesn't match that, it goes "ok, right, not sure,
+ # totally leaving this untouched as a literal"
+ # < mst> so I -think- it's relatively robust
+ # < ribasushi> right, it's relatively safe then
+ # < ribasushi> is this regex centralized?
+ # < mst> it only exists in _order_by_to_dq in SQL::Abstract::Converter
+ # < mst> it only exists because you were kind enough to support new
+ # dbihacks crack combined with old literal order_by crack
+ # < ribasushi> heh :)
+
+ if (my ($ident, $dir) = $$arg =~ /^(\w+)(?:\s+(desc|asc))?$/i) {
+ $dq->{by} = $self->_ident_to_dq($ident);
+ $dq->{reverse} = 1 if $dir and lc($dir) eq 'desc';
+ } else {
+ $dq->{by} = $self->_literal_to_dq($$arg);
+ }
} elsif (ref($arg) eq 'HASH') {
my ($key, $val, @rest) = %$arg;
while (my $x = shift @f) {
$dq = {
type => DQ_JOIN,
- join => [ $dq, $self->_table_to_dq($x) ]
+ left => $dq,
+ right => $self->_table_to_dq($x),
};
}
$dq;