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