Showing 3 changed files with 32 additions and 1 deletions
+2
Changes
... ...
@@ -1,3 +1,5 @@
1
+0.1698
2
+    - fixed DBIx::Custom::Where to_string method small bug
1 3
 0.1697
2 4
     - added EXPERIMENTAL map_param method
3 5
 0.1696
+6 -1
lib/DBIx/Custom/Where.pm
... ...
@@ -67,20 +67,24 @@ sub _parse {
67 67
               qq{"$op" is passed} . _subname . ")"
68 68
           unless $VALID_OPERATIONS{$op};
69 69
         
70
+        my $pushed_array;
70 71
         # Parse internal clause
71 72
         for (my $i = 1; $i < @$clause; $i++) {
72 73
             my $pushed = $self->_parse($clause->[$i], $where, $count, $op);
73 74
             push @$where, $op if $pushed;
75
+            $pushed_array = 1 if $pushed;
74 76
         }
75 77
         pop @$where if $where->[-1] eq $op;
76 78
         
77 79
         # Undo
78 80
         if ($where->[-1] eq '(') {
79 81
             pop @$where;
80
-            pop @$where;
82
+            pop @$where if ($where->[-1] || '') eq $op;
81 83
         }
82 84
         # End
83 85
         else { push @$where, ')' }
86
+        
87
+        return $pushed_array;
84 88
     }
85 89
     
86 90
     # String
... ...
@@ -139,6 +143,7 @@ sub _parse {
139 143
         }
140 144
         return $pushed;
141 145
     }
146
+    return;
142 147
 }
143 148
 
144 149
 1;
+24
t/dbix-custom-core-sqlite.t
... ...
@@ -1342,6 +1342,30 @@ is_deeply($row, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], 'not_exists');
1342 1342
 eval {$dbi->where(ppp => 1) };
1343 1343
 like($@, qr/invalid/);
1344 1344
 
1345
+$where = $dbi->where(
1346
+    clause => ['and', ['or'], ['and', 'key1 = :key1', 'key2 = :key2']],
1347
+    param => {key1 => 1, key2 => 2}
1348
+);
1349
+$result = $dbi->select(
1350
+    table => 'table1',
1351
+    where => $where,
1352
+);
1353
+$row = $result->all;
1354
+is_deeply($row, [{key1 => 1, key2 => 2}]);
1355
+
1356
+
1357
+$where = $dbi->where(
1358
+    clause => ['and', ['or'], ['or', ':key1', ':key2']],
1359
+    param => {}
1360
+);
1361
+$result = $dbi->select(
1362
+    table => 'table1',
1363
+    where => $where,
1364
+);
1365
+$row = $result->all;
1366
+is_deeply($row, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]);
1367
+
1368
+
1345 1369
 test 'dbi_option default';
1346 1370
 $dbi = DBIx::Custom->new;
1347 1371
 is_deeply($dbi->dbi_option, {});