1#!perl
2
3use strict;
4use warnings;
5
6use Test::More;
7
8use DBIx::Class::QueryLog;
9use DBIx::Class::QueryLog::Analyzer;
10
11my $time = 0;
12
13my $ql = DBIx::Class::QueryLog->new(
14    __time => sub { $time },
15);
16ok($ql->isa('DBIx::Class::QueryLog'), 'new');
17
18$ql->query_start('SELECT * from foo');
19$ql->query_end('SELECT * from foo');
20ok(scalar(@{ $ql->log }) == 1, 'log count w/1 query');
21
22$ql->txn_begin;
23$ql->query_start('SELECT * from foo');
24$ql->query_end('SELECT * from foo');
25
26$ql->query_start('SELECT * from bar');
27$time += 1;
28$ql->query_end('SELECT * from bar');
29
30$ql->txn_commit;
31
32my $ana = DBIx::Class::QueryLog::Analyzer->new({
33    querylog => $ql
34});
35isa_ok($ana, 'DBIx::Class::QueryLog::Analyzer');
36isa_ok($ana->querylog, 'DBIx::Class::QueryLog');
37
38cmp_ok(scalar(@{ $ana->get_sorted_queries }), '==', 3, 'Sorted Count');
39
40my $analyzed = $ana->get_totaled_queries;
41my @keys = reverse sort {
42        $analyzed->{$a}->{'time_elapsed'} <=> $analyzed->{$b}->{'time_elapsed'}
43    } keys(%{ $ana->get_totaled_queries });
44cmp_ok(scalar(@keys), '==', 2, '2 different queries');
45
46cmp_ok($analyzed->{$keys[0]}->{'count'}, '==', 1, '1 executions');
47
48cmp_ok($analyzed->{$keys[1]}->{'count'}, '==', 2, '2 executions');
49
50ok($analyzed->{$keys[0]}->{'time_elapsed'}, 'Total time');
51cmp_ok(scalar(@{$analyzed->{$keys[0]}->{'queries'}}), '==', 1, '1 stored queries');
52cmp_ok(scalar(@{$analyzed->{$keys[1]}->{'queries'}}), '==', 2, '2 stored queries');
53
54done_testing;
55