The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;
use Test::More tests => 9;

use DBIx::Class::QueryLog;
use DBIx::Class::QueryLog::Analyzer;
use DBIx::Class::QueryLog::Query;
use DBIx::Class::QueryLog::Transaction;

my $ql = DBIx::Class::QueryLog->new;
$ql->query_start('SELECT * from foo', 'fast');
$ql->query_end('SELECT * from foo', 'fast');

$ql->query_start('SELECT * from foo2', 'fast');
$ql->query_end('SELECT * from foo2', 'fast');

$ql->query_start('SELECT * from foo', 'slow');
sleep(3);
$ql->query_end('SELECT * from foo', 'slow');

$ql->txn_begin;
$ql->query_start('SELECT * from foo', 'medium');
sleep(2);
$ql->query_end('SELECT * from foo', 'medium');
$ql->txn_commit;

my $ana = DBIx::Class::QueryLog::Analyzer->new({
    querylog => $ql
});
my $slow = $ana->get_slowest_query_executions('SELECT * from foo');
cmp_ok(scalar(@{ $slow }), '==', 3, '3 executions found');
cmp_ok($slow->[0]->params->[0], 'eq', 'slow', 'slow executions 0');
cmp_ok($slow->[1]->params->[0], 'eq', 'medium', 'slow executions 1');
cmp_ok($slow->[2]->params->[0], 'eq', 'fast', 'slow executions 2');

my $other = $ana->get_slowest_query_executions('SELECT * from foo2');
cmp_ok(scalar(@{ $other }), '==', 1, '1 executions found');

my $fast = $ana->get_fastest_query_executions('SELECT * from foo');
cmp_ok(scalar(@{ $fast }), '==', 3, '3 executions found');
cmp_ok($fast->[2]->params->[0], 'eq', 'slow', 'fast executions 2');
cmp_ok($fast->[1]->params->[0], 'eq', 'medium', 'fast executions 1');
cmp_ok($fast->[0]->params->[0], 'eq', 'fast', 'fast executions 0');