Commit | Line | Data |
231ba12b |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | use FindBin; |
6 | |
7 | BEGIN { |
8 | push @INC, "$FindBin::Bin/lib"; |
9 | } |
10 | |
3dd63871 |
11 | plan skip_all => 'requires DBD::SQLite' |
12 | unless eval { require DBD::SQLite }; |
13 | |
231ba12b |
14 | use TestSchema; |
15 | use CtrlO::DBIC::Cursor::RowCountStatistics; |
16 | |
17 | our @_COMPLETE; |
18 | |
19 | do { |
20 | package TestStats; |
21 | use parent 'DBIx::Class::Storage::Statistics'; |
22 | sub new { |
23 | bless {}, shift; |
24 | } |
25 | sub query_start { } |
26 | sub query_end { } |
27 | sub query_complete { |
28 | my ($self, @args) = @_; |
29 | push @_COMPLETE, \@args; |
30 | } |
31 | }; |
32 | |
33 | my $schema = TestSchema->connect( |
34 | 'dbi:SQLite:dbname=:memory:', |
35 | undef, undef, |
36 | {}, |
37 | { |
38 | cursor_class => 'CtrlO::DBIC::Cursor::RowCountStatistics', |
39 | } |
40 | ); |
41 | $schema->deploy(); |
42 | $schema->storage->debugobj(TestStats->new); |
43 | $schema->storage->debug(1); |
44 | |
45 | ok $schema, 'schema created'; |
46 | is $schema->storage->cursor_class, |
47 | 'CtrlO::DBIC::Cursor::RowCountStatistics', |
48 | 'cursor_class set'; |
49 | |
50 | my $rs = $schema->resultset('Test'); |
51 | |
f6e5b275 |
52 | subtest 'count with ->next' => sub { |
231ba12b |
53 | local @_COMPLETE; |
54 | $rs->create({ id => $_ }) for 1..10; |
55 | do { |
56 | my $rows = $rs->search_rs; |
57 | is ref($rows->cursor), 'CtrlO::DBIC::Cursor::RowCountStatistics', |
58 | 'resultset cursor'; |
59 | 1 while $rows->next; |
60 | }; |
61 | is scalar(@_COMPLETE), 1, 'single complete call'; |
62 | is $_COMPLETE[0][0], 10, 'full count'; |
cda17ef7 |
63 | ok length($_COMPLETE[0][1]), 'SQL was passed'; |
64 | like $_COMPLETE[0][1], qr{SELECT}i, 'SQL contains SELECT'; |
231ba12b |
65 | $rs->delete; |
66 | }; |
67 | |
f6e5b275 |
68 | subtest 'count with ->all' => sub { |
69 | local @_COMPLETE; |
70 | $rs->create({ id => $_ }) for 1..10; |
71 | do { |
72 | my $rows = $rs->search_rs; |
73 | is ref($rows->cursor), 'CtrlO::DBIC::Cursor::RowCountStatistics', |
74 | 'resultset cursor'; |
75 | my @all = $rows->all; |
76 | }; |
77 | is scalar(@_COMPLETE), 1, 'single complete call'; |
78 | is $_COMPLETE[0][0], 10, 'full count'; |
79 | $rs->delete; |
80 | }; |
81 | |
231ba12b |
82 | subtest 'empty' => sub { |
83 | local @_COMPLETE; |
84 | do { |
85 | my $rows = $rs->search_rs; |
86 | 1 while $rows->next; |
87 | }; |
88 | is scalar(@_COMPLETE), 1, 'single complete call'; |
89 | is $_COMPLETE[0][0], 0, 'full count'; |
90 | }; |
91 | |
92 | subtest 'no fetch' => sub { |
93 | local @_COMPLETE; |
94 | $rs->create({ id => $_ }) for 1..10; |
95 | do { |
96 | my $rows = $rs->search_rs; |
97 | }; |
98 | is scalar(@_COMPLETE), 0, 'no complete calls'; |
99 | $rs->delete; |
100 | }; |
101 | |
102 | done_testing; |