Commit | Line | Data |
1c133e22 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | use lib qw(t/lib); |
6 | use DBICTest; |
7 | |
8 | my $schema = DBICTest->init_schema; |
9 | |
10 | BEGIN { |
11 | eval "use DBD::SQLite"; |
12 | plan $@ |
13 | ? ( skip_all => 'needs DBD::SQLite for testing' ) |
14 | : ( tests => 7 ); |
15 | } |
16 | |
17 | ### $schema->storage->debug(1); |
18 | |
19 | my $where_bind = { |
20 | where => \'name like ?', |
21 | bind => [ 'Cat%' ], |
22 | }; |
23 | |
24 | my $rs; |
25 | |
26 | TODO: { |
27 | local $TODO = 'bind args order needs fixing (semifor)'; |
28 | |
29 | # First, the simple cases... |
30 | $rs = $schema->resultset('Artist')->search( |
31 | { artistid => 1 }, |
32 | $where_bind, |
33 | ); |
34 | |
35 | is ( $rs->count, 1, 'where/bind combined' ); |
36 | |
37 | $rs= $schema->resultset('Artist')->search({}, $where_bind) |
38 | ->search({ artistid => 1}); |
39 | |
40 | is ( $rs->count, 1, 'where/bind first' ); |
41 | |
42 | $rs = $schema->resultset('Artist')->search({ artistid => 1}) |
43 | ->search({}, $where_bind); |
44 | |
45 | is ( $rs->count, 1, 'where/bind last' ); |
46 | } |
47 | |
48 | # More complex cases, based primarily on the Cookbook |
49 | # "Arbitrary SQL through a custom ResultSource" technique, |
50 | # which seems to be the only place the bind attribute is |
51 | # documented. Breaking this technique probably breaks existing |
52 | # application code. |
53 | my $source = DBICTest::Artist->result_source_instance; |
54 | my $new_source = $source->new($source); |
55 | $new_source->source_name('Complex'); |
56 | |
57 | $new_source->name(\<<''); |
58 | ( select a.*, cd.cdid as cdid, cd.title as title, cd.year as year |
59 | from artist a |
60 | join cd on cd.artist=a.artistid |
61 | where cd.year=?) |
62 | |
63 | $schema->register_source('Complex' => $new_source); |
64 | |
65 | $rs = $schema->resultset('Complex')->search({}, { bind => [ 1999 ] }); |
66 | is ( $rs->count, 1, 'cookbook arbitrary sql example' ); |
67 | |
68 | $rs = $schema->resultset('Complex')->search({ 'artistid' => 1 }, { bind => [ 1999 ] }); |
69 | is ( $rs->count, 1, '...coobook + search condition' ); |
70 | |
71 | $rs = $schema->resultset('Complex')->search({}, { bind => [ 1999 ] }) |
72 | ->search({ 'artistid' => 1 }); |
73 | is ( $rs->count, 1, '...cookbook (bind first) + chained search' ); |
74 | |
75 | TODO: { |
76 | local $TODO = 'bind args order needs fixing (semifor)'; |
77 | $rs = $schema->resultset('Complex')->search({}, { bind => [ 1999 ] }) |
78 | ->search({ 'artistid' => 1 }, { |
79 | where => \'title like ?', |
80 | bind => [ 'Spoon%' ] }); |
81 | is ( $rs->count, 1, '...cookbook + chained search with extra bind' ); |
82 | } |