Support for the { operator => \"..." } construct (to embed literal SQL).
Norbert Buchmuller [Thu, 20 Nov 2008 11:32:24 +0000 (11:32 +0000)]
lib/SQL/Abstract.pm
t/01generate.t

index 2a74a7f..9959486 100644 (file)
@@ -529,6 +529,13 @@ sub _where_hashpair_HASHREF {
       ($sql, @bind) = $self->_where_field_op_ARRAYREF($k, $op, $val);
     } 
 
+    # CASE: col => {op => \$scalar}
+    elsif (ref $val eq 'SCALAR') {
+      $sql  = join ' ', $self->_convert($self->_quote($k)),
+                        $self->_sqlcase($op),
+                        $$val;
+    }
+
     # CASE: col => {op => undef} : sql "IS (NOT)? NULL"
     elsif (! defined($val)) {
       my $is = ($op =~ $self->{equality_op})   ? 'is'     :
@@ -2066,6 +2073,10 @@ support for literal SQL through the C<< \ [$sql, bind] >> syntax.
 
 =item *
 
+support for the { operator => \"..." } construct (to embed literal SQL)
+
+=item *
+
 added -nest1, -nest2 or -nest_1, -nest_2, ...
 
 =item *
index 4d98bb7..18e015c 100644 (file)
@@ -344,6 +344,14 @@ my @tests = (
               stmt_q => 'UPDATE `test` SET `a` = ?, `b` = ?',
               bind   => [[a => 1], [b => [1, 1, 2, 3, 5, 8]]],
       },
+      #37
+      {
+              func   => 'select',
+              args   => ['test', '*', { a => {'>', \'1 + 1'}, b => 8 }],
+              stmt   => 'SELECT * FROM test WHERE ( a > 1 + 1 AND b = ? )',
+              stmt_q => 'SELECT * FROM `test` WHERE ( `a` > 1 + 1 AND `b` = ? )',
+              bind   => [8],
+      },             
 );