override storage to access sth details
[dbsrgits/DBIx-Class-RowCountStatistics.git] / t / basic.t
CommitLineData
231ba12b 1use strict;
2use warnings;
3
4use Test::More;
5use FindBin;
6
7BEGIN {
8 push @INC, "$FindBin::Bin/lib";
9}
10
11use TestSchema;
12use CtrlO::DBIC::Cursor::RowCountStatistics;
13
14our @_COMPLETE;
15
16do {
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
30my $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
42ok $schema, 'schema created';
43is $schema->storage->cursor_class,
44 'CtrlO::DBIC::Cursor::RowCountStatistics',
45 'cursor_class set';
46
47my $rs = $schema->resultset('Test');
48
f6e5b275 49subtest '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 65subtest '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 79subtest '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
89subtest '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
99done_testing;