op dwim should require *only* non-word chars
[dbsrgits/SQL-Abstract.git] / lib / SQL / Abstract.pm
index d5a8637..74f359b 100644 (file)
@@ -28,7 +28,7 @@ BEGIN {
 # GLOBALS
 #======================================================================
 
-our $VERSION  = '1.87';
+our $VERSION  = '1.90_02';
 
 # This would confuse some packagers
 $VERSION = eval $VERSION if $VERSION =~ /_/; # numify for warning-free dev releases
@@ -301,6 +301,11 @@ sub new {
         s/\A\s+//, s/\s+\Z// for $sql;
         return [ $sql, @bind ];
       };
+      $opt{expand_op}{ident} = __PACKAGE__->make_unop_expander(sub {
+        my ($self, undef, $body) = @_;
+        $body = $body->from if Scalar::Util::blessed($body);
+        $self->_expand_ident(ident => $body);
+      });
     }
   }
 
@@ -344,7 +349,7 @@ sub make_binop_expander {
 sub plugin {
   my ($self, $plugin, @args) = @_;
   unless (ref $plugin) {
-    $plugin =~ s/\A\+/${\ref($self)}::Plugin::/;
+    $plugin =~ s/\A\+/${\__PACKAGE__}::Plugin::/;
     require(join('/', split '::', $plugin).'.pm');
   }
   $plugin->apply_to($self, @args);
@@ -358,8 +363,11 @@ BEGIN {
     my $name = join '_', reverse split '_', $type;
     my $singular = "${type}er";
 
-    eval qq{sub ${singular} { shift->${singular}s(\@_) }; 1 }
-      or die "Method builder failed for ${singular}: $@";
+    eval qq{sub ${singular} {
+      my \$self = shift;
+      return \$self->_ext_rw('${name}', \@_) if \@_ == 1;
+      return \$self->${singular}s(\@_)
+    }; 1 } or die "Method builder failed for ${singular}: $@";
     eval qq{sub wrap_${singular} {
       shift->wrap_${singular}s(\@_)
     }; 1 } or die "Method builder failed for wrap_${singular}: $@";
@@ -955,7 +963,7 @@ sub _expand_hashpair {
   }
   if ($k =~ /^-./) {
     return $self->_expand_hashpair_op($k, $v);
-  } elsif ($k =~ /^[^\w]/i) {
+  } elsif ($k =~ /^\W+$/) {
     my ($lhs, @rhs) = ref($v) eq 'ARRAY' ? @$v : $v;
     return $self->_expand_op(
       -op, [ $k, $self->expand_expr($lhs, -ident), @rhs ]
@@ -1276,7 +1284,7 @@ sub _expand_bool {
 sub _expand_list {
   my ($self, undef, $expr) = @_;
   return { -op => [
-    ',', map $self->expand_expr($_), 
+    ',', map $self->expand_expr($_),
           @{$expr->{-op}}[1..$#{$expr->{-op}}]
   ] } if ref($expr) eq 'HASH' and ($expr->{-op}||[''])->[0] eq ',';
   return +{ -op => [ ',',