extract _expand_bool method
[dbsrgits/SQL-Abstract.git] / lib / SQL / Abstract.pm
index dc93bfa..0ac8fdd 100644 (file)
@@ -193,7 +193,9 @@ sub new {
 
   $opt{expand} = {
     -ident => '_expand_ident',
-    -value => sub { +{ -bind => [ our $Cur_Col_Meta, $_[2] ] } },
+    -value => '_expand_value',
+    -not => '_expand_not',
+    -bool => '_expand_bool',
   };
 
   return bless \%opt, $class;
@@ -627,16 +629,6 @@ sub _expand_expr_hashpair {
       }
       return $self->_expand_expr($v);
     }
-    if ($k eq '-bool') {
-      if (ref($v)) {
-        return $self->_expand_expr($v);
-      }
-      puke "-bool => undef not supported" unless defined($v);
-      return $self->_expand_ident(-ident => $v);
-    }
-    if ($k eq '-not') {
-      return { -op => [ 'not', $self->_expand_expr($v) ] };
-    }
     if (my ($rest) = $k =~/^-not[_ ](.*)$/) {
       return +{ -op => [
         'not',
@@ -786,7 +778,7 @@ sub _expand_expr_hashpair {
       ] };
     }
     if ($op eq 'value') {
-      return $self->_expand_expr_hashpair($k, undef) unless defined($vv);
+      return $self->_expand_expr({ $k, undef }) unless defined($vv);
       return +{ -op => [
         $self->{cmp},
         $self->_expand_ident(-ident => $k),
@@ -918,6 +910,23 @@ sub _expand_ident {
   return +{ -ident => \@parts };
 }
 
+sub _expand_value {
+  +{ -bind => [ our $Cur_Col_Meta, $_[2] ] };
+}
+
+sub _expand_not {
+  +{ -op => [ 'not', $_[0]->_expand_expr($_[2]) ] };
+}
+
+sub _expand_bool {
+  my ($self, undef, $v) = @_;
+  if (ref($v)) {
+    return $self->_expand_expr($v);
+  }
+  puke "-bool => undef not supported" unless defined($v);
+  return $self->_expand_ident(-ident => $v);
+}
+
 sub _recurse_where {
   my ($self, $where, $logic) = @_;