Commit | Line | Data |
f54428ab |
1 | #!/usr/bin/env perl |
caca5e19 |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
5f9c6cda |
6 | use Benchmark qw/cmpthese/; |
caca5e19 |
7 | use FindBin; |
62628242 |
8 | use lib "$FindBin::Bin/../../t/lib"; |
9 | use lib "$FindBin::Bin/../../lib"; |
5f9c6cda |
10 | use DBICTest::Schema; |
21374921 |
11 | use DBIx::Class::ResultClass::HashRefInflator; # older dbic didn't load it |
12 | |
13 | printf "Benchmarking DBIC version %s\n", DBIx::Class->VERSION; |
caca5e19 |
14 | |
5f9c6cda |
15 | my $schema = DBICTest::Schema->connect ('dbi:SQLite::memory:'); |
16 | $schema->deploy; |
17 | |
caca5e19 |
18 | my $rs = $schema->resultset ('Artist'); |
908aa1bb |
19 | |
20 | my $hri_rs = $rs->search ({}, { result_class => 'DBIx::Class::ResultClass::HashRefInflator' } ); |
21 | |
22 | #DB::enable_profile(); |
23 | #my @foo = $hri_rs->all; |
24 | #DB::disable_profile(); |
25 | #exit; |
caca5e19 |
26 | |
5f9c6cda |
27 | my $dbh = $schema->storage->dbh; |
28 | my $sql = sprintf ('SELECT %s FROM %s %s', |
29 | join (',', @{$rs->_resolved_attrs->{select}} ), |
30 | $rs->result_source->name, |
31 | $rs->_resolved_attrs->{alias}, |
32 | ); |
33 | |
908aa1bb |
34 | for (1,10,20,50,200,2500,10000) { |
35 | $rs->delete; |
36 | $rs->populate ([ map { { name => "Art_$_"} } (1 .. $_) ]); |
37 | print "\nRetrieval of $_ rows\n"; |
38 | bench(); |
39 | } |
40 | |
41 | sub bench { |
42 | cmpthese(-3, { |
43 | Cursor => sub { my @r = $rs->cursor->all }, |
44 | HRI => sub { my @r = $hri_rs->all }, |
45 | RowObj => sub { my @r = $rs->all }, |
46 | DBI_AoH => sub { my @r = @{ $dbh->selectall_arrayref ($sql, { Slice => {} }) } }, |
47 | DBI_AoA=> sub { my @r = @{ $dbh->selectall_arrayref ($sql) } }, |
48 | }); |
49 | } |