handle \$dq in order by
[dbsrgits/SQL-Abstract.git] / lib / SQL / Abstract / Converter.pm
index 1f5414b..d9c6a97 100644 (file)
@@ -81,7 +81,15 @@ sub _ident_to_dq {
   my ($self, $ident) = @_;
   $self->_assert_pass_injection_guard($ident)
     unless $self->renderer_will_quote;
-  $self->_maybe_convert_dq(Identifier(split /\Q${\$self->identifier_sep}/, $ident));
+  $self->_maybe_convert_dq(
+    Identifier(do {
+      if (my $sep = $self->identifier_sep) {
+        split /\Q$sep/, $ident
+      } else {
+        $ident
+      }
+    })
+  );
 }
 
 sub _maybe_convert_dq {
@@ -546,6 +554,8 @@ sub _order_by_to_dq {
     return $outer;
   } elsif (ref($arg) eq 'REF' and ref($$arg) eq 'ARRAY') {
     $dq->{by} = $self->_literal_to_dq($$arg);
+  } elsif (ref($arg) eq 'REF' and ref($$arg) eq 'HASH') {
+    $dq->{by} = $$arg;
   } elsif (ref($arg) eq 'SCALAR') {
 
     # < mst> right, but if it doesn't match that, it goes "ok, right, not sure, 
@@ -576,7 +586,7 @@ sub _order_by_to_dq {
         $val = $arg->{$key};
       } elsif ($key =~ /^-nulls$/i)  {
         $nulls = $arg->{$key};
-        die "invalid value for -nulls" unless $nulls =~ /^(?:first|last)$/;
+        die "invalid value for -nulls" unless $nulls =~ /^(?:first|last)$/i;
       } else {
         die "invalid key in hash passed to _order_by_to_dq";
       }