summaryrefslogtreecommitdiff
path: root/t/49_trace_and_profile.t
blob: b56826aea7fafd58d6397a3b341e5e6f569cc5af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/perl

use strict;
BEGIN {
	$|  = 1;
	$^W = 1;
}

use t::lib::Test qw/connect_ok @CALL_FUNCS/;
use Test::More;
use Test::NoWarnings;

plan tests => 12 * @CALL_FUNCS + 1;

my $flag = 0;
for my $call_func (@CALL_FUNCS) {
	my $dbh = connect_ok();

	# sqlite_trace should always be called as sqlite_trace,
	# i.e. $dbh->func(..., "sqlite_trace") and $dbh->sqlite_trace(...)
	my $func_name = $flag++ ? "trace" : "sqlite_trace";

	# trace
	my @trace;
	$dbh->$call_func(sub { push @trace, [@_] }, $func_name);
	$dbh->do('create table foo (id integer)');
	is $trace[0][0] => "create table foo (id integer)";

	$dbh->do('insert into foo values (?)', undef, 1);
	is $trace[1][0] => "insert into foo values ('1')";

	$dbh->$call_func(undef, $func_name);

	$dbh->do('insert into foo values (?)', undef, 2);
	is @trace => 2;

	$dbh->$call_func(sub { push @trace, [@_] }, $func_name);
	$dbh->do('insert into foo values (?)', undef, 3);
	is $trace[2][0] => "insert into foo values ('3')";

	# profile
	my @profile;
	$dbh->$call_func(sub { push @profile, [@_] }, "profile");
	$dbh->do('create table bar (id integer)');
	is $profile[0][0] => "create table bar (id integer)";
	like $profile[0][1] => qr/^[0-9]+$/;

	$dbh->do('insert into bar values (?)', undef, 1);
	is $profile[1][0] => "insert into bar values (?)";
	like $profile[1][1] => qr/^[0-9]+$/;

	$dbh->$call_func(undef, "profile");

	$dbh->do('insert into bar values (?)', undef, 2);
	is @profile => 2;

	$dbh->$call_func(sub { push @profile, [@_] }, "profile");
	$dbh->do('insert into bar values (?)', undef, 3);
	is $profile[2][0] => "insert into bar values (?)";
	like $profile[2][1] => qr/^[0-9]+$/;
}