Initial full test pass - all fetches are eager for now
[dbsrgits/DBIx-Class.git] / examples / Benchmarks / benchmark_datafetch.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use Benchmark qw/cmpthese/;
7 use FindBin;
8 use lib "$FindBin::Bin/../../t/lib";
9 use lib "$FindBin::Bin/../../lib";
10 use DBICTest::Schema;
11 use DBIx::Class::ResultClass::HashRefInflator;  # older dbic didn't load it
12
13 printf "Benchmarking DBIC version %s\n", DBIx::Class->VERSION;
14
15 my $schema = DBICTest::Schema->connect ('dbi:SQLite::memory:');
16 $schema->deploy;
17
18 my $rs = $schema->resultset ('Artist');
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;
26
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
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 }