/[Frey]/trunk/t/02-dbd-ram.t
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/t/02-dbd-ram.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 334 - (show annotations)
Sat Nov 8 22:15:15 2008 UTC (15 years, 5 months ago) by dpavlin
File MIME type: application/x-troff
File size: 2633 byte(s)
import DBD::RAM for cleanup (and rename) patched with
http://rt.cpan.org/Public/Bug/Display.html?id=33882

We could and probably will use DBD::AnyData as source for
data. However, at this stage, it makes much more sense to
first support SQL queries over Frey objects and DBD::RAM seems like smaller
codebase to start with.
1 #!/usr/bin/perl -w
2
3 require 5.004;
4 use strict;
5
6 use blib;
7
8 require DBI;
9 require Benchmark;
10
11
12 my($i);
13 sub TimeMe ($$$$) {
14 my($startMsg, $endMsg, $code, $count) = @_;
15 printf("\n%s\n", $startMsg);
16 my($t1) = Benchmark->new();
17 $@ = '';
18 eval {
19 for ($i = 0; $i < $count; $i++) {
20 &$code;
21 }
22 };
23 if ($@) {
24 print "Test failed, message: $@\n";
25 } else {
26 my($td) = Benchmark::timediff(Benchmark->new(), $t1);
27 my($dur) = $td->cpu_a;
28 printf($endMsg, $count, $dur, $count / $dur);
29 print "\n";
30 }
31 }
32
33
34 TimeMe("Testing empty loop speed ...",
35 "%d iterations in %.1f cpu+sys seconds (%d per sec)",
36 sub {
37 },
38 100000);
39
40
41 my($dbh);
42 TimeMe("Testing connect/disconnect speed ...",
43 "%d connections in %.1f cpu+sys seconds (%d per sec)",
44 sub {
45 $dbh = DBI->connect("DBI:RAM:", undef, undef,
46 { 'RaiseError' => 1 });
47 $dbh->disconnect();
48 },
49 2000);
50
51 $dbh = DBI->connect("DBI:RAM:", undef, undef,
52 { 'RaiseError' => 1 });
53 TimeMe("Testing CREATE/DROP TABLE speed ...",
54 "%d files in %.1f cpu+sys seconds (%d per sec)",
55 sub {
56 $dbh->do("CREATE TABLE bench (id INTEGER, name CHAR(40),"
57 . " firstname CHAR(40), address CHAR(40),"
58 . " zip CHAR(10), city CHAR(40), email CHAR(40))");
59 $dbh->do("DROP TABLE bench");
60 },
61 500);
62
63 $dbh->do("CREATE TABLE bench (id INTEGER, name CHAR(40),"
64 . " firstname CHAR(40), address CHAR(40),"
65 . " zip CHAR(10), city CHAR(40), email CHAR(40))");
66 my(@vals) = (0 .. 499);
67 my($num);
68 TimeMe("Testing INSERT speed ...",
69 "%d rows in %.1f cpu+sys seconds (%d per sec)",
70 sub {
71 ($num) = splice(@vals, int(rand(@vals)), 1);
72 $dbh->do("INSERT INTO bench VALUES (?, 'Wiedmann', 'Jochen',"
73 . " 'Am Eisteich 9', '72555', 'Metzingen',"
74 . " 'joe\@ispsoft.de')", undef, $num);
75 },
76 500);
77
78 my($sth);
79 TimeMe("Testing SELECT speed ...",
80 "%d single rows in %.1f cpu+sys seconds (%.1f per sec)",
81 sub {
82 $num = int(rand(500));
83 $sth = $dbh->prepare("SELECT * FROM bench WHERE id = $num");
84 $sth->execute();
85 $sth->fetch() or die "Expected result for id = $num";
86 },
87 100);
88
89
90 TimeMe("Testing SELECT speed (multiple rows) ...",
91 "%d times 100 rows in %.1f cpu+sys seconds (%.1f per sec)",
92 sub {
93 $num = int(rand(400));
94 $sth = $dbh->prepare("SELECT * FROM bench WHERE id >= $num"
95 . " AND id < " . ($num+100));
96 $sth->execute();
97 ($sth->rows() == 100)
98 or die "Expected 100 rows for id = $num, got " . $sth->rows();
99 while ($sth->fetch()) {
100 }
101 },
102 100);
103

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26