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;
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);
+ 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;