|
3 | 3 | use strict; |
4 | 4 |
|
5 | 5 | use Data::ObjectDriver::SQL; |
6 | | -use Test::More tests => 68; |
| 6 | +use Test::More tests => 93; |
7 | 7 |
|
8 | 8 | my $stmt = ns(); |
9 | 9 | ok($stmt, 'Created SQL object'); |
@@ -128,6 +128,27 @@ is(scalar @{ $stmt->bind }, 2); |
128 | 128 | is($stmt->bind->[0], 'bar'); |
129 | 129 | is($stmt->bind->[1], 'baz'); |
130 | 130 |
|
| 131 | +$stmt = ns(); $stmt->add_where(foo => { op => 'IN', value => ['bar'] }); |
| 132 | +is($stmt->as_sql_where, "WHERE (foo IN (?))\n"); |
| 133 | +is(scalar @{ $stmt->bind }, 1); |
| 134 | +is($stmt->bind->[0], 'bar'); |
| 135 | + |
| 136 | +$stmt = ns(); $stmt->add_where(foo => { op => 'NOT IN', value => ['bar'] }); |
| 137 | +is($stmt->as_sql_where, "WHERE (foo NOT IN (?))\n"); |
| 138 | +is(scalar @{ $stmt->bind }, 1); |
| 139 | +is($stmt->bind->[0], 'bar'); |
| 140 | + |
| 141 | +$stmt = ns(); $stmt->add_where(foo => { op => 'BETWEEN', value => ['bar', 'baz'] }); |
| 142 | +is($stmt->as_sql_where, "WHERE (foo BETWEEN ? AND ?)\n"); |
| 143 | +is(scalar @{ $stmt->bind }, 2); |
| 144 | +is($stmt->bind->[0], 'bar'); |
| 145 | +is($stmt->bind->[1], 'baz'); |
| 146 | + |
| 147 | +$stmt = ns(); $stmt->add_where(foo => { op => 'LIKE', value => 'bar%' }); |
| 148 | +is($stmt->as_sql_where, "WHERE (foo LIKE ?)\n"); |
| 149 | +is(scalar @{ $stmt->bind }, 1); |
| 150 | +is($stmt->bind->[0], 'bar%'); |
| 151 | + |
131 | 152 | $stmt = ns(); $stmt->add_where(foo => { op => '!=', value => 'bar' }); |
132 | 153 | is($stmt->as_sql_where, "WHERE (foo != ?)\n"); |
133 | 154 | is(scalar @{ $stmt->bind }, 1); |
@@ -174,6 +195,34 @@ is($stmt->bind->[0], 'foo'); |
174 | 195 | is($stmt->bind->[1], 'bar'); |
175 | 196 | is($stmt->bind->[2], 'baz'); |
176 | 197 |
|
| 198 | +$stmt = ns(); |
| 199 | +$stmt->add_where(foo => \['IN (SELECT foo FROM bar WHERE t=?)', 'foo']); |
| 200 | +is($stmt->as_sql_where, "WHERE (foo IN (SELECT foo FROM bar WHERE t=?))\n"); |
| 201 | +is(scalar @{ $stmt->bind }, 1); |
| 202 | +is($stmt->bind->[0], 'foo'); |
| 203 | + |
| 204 | +$stmt = ns(); |
| 205 | +$stmt->add_where(foo => { op => 'IN', value => \['(SELECT foo FROM bar WHERE t=?)', 'foo']}); |
| 206 | +is($stmt->as_sql_where, "WHERE (foo IN ((SELECT foo FROM bar WHERE t=?)))\n"); |
| 207 | +is(scalar @{ $stmt->bind }, 1); |
| 208 | +is($stmt->bind->[0], 'foo'); |
| 209 | + |
| 210 | +$stmt = ns(); |
| 211 | +$stmt->add_where(foo => { op => 'IN', value => \'(SELECT foo FROM bar)'}); |
| 212 | +is($stmt->as_sql_where, "WHERE (foo IN (SELECT foo FROM bar))\n"); |
| 213 | +is(scalar @{ $stmt->bind }, 0); |
| 214 | + |
| 215 | +$stmt = ns(); |
| 216 | +$stmt->add_where(foo => undef); |
| 217 | +is($stmt->as_sql_where, "WHERE (foo IS NULL)\n"); |
| 218 | +is(scalar @{ $stmt->bind }, 0); |
| 219 | + |
| 220 | +## avoid syntax error |
| 221 | +$stmt = ns(); |
| 222 | +$stmt->add_where(foo => []); |
| 223 | +is($stmt->as_sql_where, "WHERE (0 = 1)\n"); # foo IN () |
| 224 | +is(scalar @{ $stmt->bind }, 0); |
| 225 | + |
177 | 226 | ## regression bug. modified parameters |
178 | 227 | my %terms = ( foo => [-and => 'foo', 'bar', 'baz']); |
179 | 228 | $stmt = ns(); |
|
0 commit comments