extract expand_bind to a method
[scpubgit/Q-Branch.git] / lib / SQL / Abstract.pm
index 6cb543e..13f6e01 100644 (file)
@@ -168,11 +168,8 @@ sub new {
   # special operators
   $opt{special_ops} ||= [];
 
-  # regexes are applied in order, thus push after user-defines
-  push @{$opt{special_ops}}, @BUILTIN_SPECIAL_OPS;
-
   if ($class->isa('DBIx::Class::SQLMaker')) {
-    $opt{is_dbic_sqlmaker} = 1;
+    $opt{warn_once_on_nest} = 1;
     $opt{disable_old_special_ops} = 1;
   }
 
@@ -201,20 +198,13 @@ sub new {
     -and => '_expand_op_andor',
     -or => '_expand_op_andor',
     -nest => '_expand_nest',
-    -bind => sub { shift; +{ @_ } },
+    -bind => '_expand_bind',
     -in => '_expand_in',
     -not_in => '_expand_in',
-    -row => sub {
-      my ($self, $node, $args) = @_;
-      +{ $node => [ map $self->expand_expr($_), @$args ] };
-    },
+    -row => '_expand_row',
     -between => '_expand_between',
     -not_between => '_expand_between',
-    -op => sub {
-      my ($self, $node, $args) = @_;
-      my ($op, @opargs) = @$args;
-      +{ $node => [ $op, map $self->expand_expr($_), @opargs ] };
-    },
+    -op => '_expand_op',
     (map +($_ => '_expand_op_is'), ('-is', '-is_not')),
     -ident => '_expand_ident',
     -value => '_expand_value',
@@ -734,8 +724,13 @@ sub _expand_expr_hashpair_op {
 
     if (
       (our $Expand_Depth) == 1
-      and $self->{disable_old_special_ops}
-      and List::Util::first { $op =~ $_->{regex} } @{$self->{special_ops}}
+      and (
+        List::Util::first { $op =~ $_->{regex} } @{$self->{special_ops}}
+        or (
+          $self->{disable_old_special_ops}
+          and List::Util::first { $op =~ $_->{regex} } @BUILTIN_SPECIAL_OPS
+        )
+      )
     ) {
       puke "Illegal use of top-level '-$op'"
     }
@@ -908,6 +903,17 @@ sub _expand_not {
   +{ -op => [ 'not', $_[0]->_expand_expr($_[2]) ] };
 }
 
+sub _expand_row {
+  my ($self, $node, $args) = @_;
+  +{ $node => [ map $self->expand_expr($_), @$args ] };
+}
+
+sub _expand_op {
+  my ($self, $node, $args) = @_;
+  my ($op, @opargs) = @$args;
+  +{ $node => [ $op, map $self->expand_expr($_), @opargs ] };
+}
+
 sub _expand_bool {
   my ($self, undef, $v) = @_;
   if (ref($v)) {
@@ -1041,7 +1047,7 @@ sub _expand_nest {
   my ($self, $op, $v) = @_;
   # DBIx::Class requires a nest warning to be emitted once but the private
   # method it overrode to do so no longer exists
-  if ($self->{is_dbic_sqlmaker}) {
+  if ($self->{warn_once_on_nest}) {
     unless (our $Nest_Warned) {
       belch(
         "-nest in search conditions is deprecated, you most probably wanted:\n"
@@ -1053,6 +1059,11 @@ sub _expand_nest {
   return $self->_expand_expr($v);
 }
 
+sub _expand_bind {
+  my ($self, $op, $bind) = @_;
+  return { $op => $bind };
+}
+
 sub _recurse_where {
   my ($self, $where, $logic) = @_;