ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-DBI/DBI.pm
(Generate patch)

Comparing AnyEvent-DBI/DBI.pm (file contents):
Revision 1.3 by root, Fri Jun 6 16:13:07 2008 UTC vs.
Revision 1.7 by root, Mon Jul 21 02:34:40 2008 UTC

3AnyEvent::DBI - asynchronous DBI access 3AnyEvent::DBI - asynchronous DBI access
4 4
5=head1 SYNOPSIS 5=head1 SYNOPSIS
6 6
7 use AnyEvent::DBI; 7 use AnyEvent::DBI;
8
9 my $cv = AnyEvent->condvar;
10
11 my $dbh = new AnyEvent::DBI "DBI:SQLite:dbname=test.db", "", "";
12
13 $dbh->exec ("select * from test where num=?", 10, sub {
14 my ($rows, $rv) = @_;
15
16 print "@$_\n"
17 for @$rows;
18
19 $cv->broadcast;
20 });
21
22 # asynchronously do sth. else here
23
24 $cv->wait;
8 25
9=head1 DESCRIPTION 26=head1 DESCRIPTION
10 27
11This module is an L<AnyEvent> user, you need to make sure that you use and 28This module is an L<AnyEvent> user, you need to make sure that you use and
12run a supported event loop. 29run a supported event loop.
15separate "DBI-Server" processes and sending them requests. 32separate "DBI-Server" processes and sending them requests.
16 33
17It means that you can run DBI requests in parallel to other tasks. 34It means that you can run DBI requests in parallel to other tasks.
18 35
19The overhead for very simple statements ("select 0") is somewhere 36The overhead for very simple statements ("select 0") is somewhere
20around 120% to 200% (single/dual core CPU) compared to an explicit 37around 120% to 200% (dual/single core CPU) compared to an explicit
21prepare_cached/execute/fetchrow_arrayref/finish combination. 38prepare_cached/execute/fetchrow_arrayref/finish combination.
22 39
23=cut 40=cut
24 41
25package AnyEvent::DBI; 42package AnyEvent::DBI;
35use DBI (); 52use DBI ();
36 53
37use AnyEvent (); 54use AnyEvent ();
38use AnyEvent::Util (); 55use AnyEvent::Util ();
39 56
40our $VERSION = '1.0'; 57our $VERSION = '1.1';
41 58
42# this is the forked server code 59# this is the forked server code
43 60
44our $DBH; 61our $DBH;
45 62
54sub req_exec { 71sub req_exec {
55 my (undef, $st, @args) = @{+shift}; 72 my (undef, $st, @args) = @{+shift};
56 73
57 my $sth = $DBH->prepare_cached ($st, undef, 1); 74 my $sth = $DBH->prepare_cached ($st, undef, 1);
58 75
59 $sth->execute (@args) 76 my $rv = $sth->execute (@args)
60 or die $sth->errstr; 77 or die $sth->errstr;
61 78
62 [$sth->fetchall_arrayref] 79 [1, $sth->{NUM_OF_FIELDS} ? $sth->fetchall_arrayref : undef, { rv => $rv }]
63} 80}
64 81
65sub serve { 82sub serve {
66 my ($fh) = @_; 83 my ($fh) = @_;
67 84
94 } 111 }
95 } 112 }
96 } 113 }
97 }; 114 };
98 115
116 if (AnyEvent::WIN32) {
99 kill 9, $$; # no other way on the broken windows platform 117 kill 9, $$; # no other way on the broken windows platform
118 # and the above doesn't even work on windows, it seems the only
119 # way to is to leak memory and kill 9 from the parent. yay.
120 }
121
122 require POSIX;
123 POSIX::_exit (0);
124 # and the above kills the parent process on windows
100} 125}
101 126
102=head2 METHODS 127=head2 METHODS
103 128
104=over 4 129=over 4
248 $self->{ww} = AnyEvent->io (fh => $self->{fh}, poll => "w", cb => $self->{ww_cb}) 273 $self->{ww} = AnyEvent->io (fh => $self->{fh}, poll => "w", cb => $self->{ww_cb})
249 if length $self->{wbuf}; 274 if length $self->{wbuf};
250 } 275 }
251} 276}
252 277
253=item $dbh->exec ("statement", @args, $cb->($rows, %extra)) 278=item $dbh->exec ("statement", @args, $cb->($rows, $rv, ...))
254 279
255Executes the given SQL statement with placeholders replaced by 280Executes the given SQL statement with placeholders replaced by
256C<@args>. The statement will be prepared and cached on the server side, so 281C<@args>. The statement will be prepared and cached on the server side, so
257using placeholders is compulsory. 282using placeholders is compulsory.
258 283
259The callback will be called with the result of C<fetchall_arrayref> as 284The callback will be called with the result of C<fetchall_arrayref> as
260first argument and possibly a hash reference with additional information. 285first argument (or C<undef> if the statement wasn't a select statement)
286and the return value of C<execute> as second argument. Additional
287arguments might get passed as well.
261 288
262If an error occurs and the C<on_error> callback returns, then no arguments 289If an error occurs and the C<on_error> callback returns, then no arguments
263will be passed and C<$@> contains the error message. 290will be passed and C<$@> contains the error message.
264 291
265=cut 292=cut
277 304
278L<AnyEvent>, L<DBI>. 305L<AnyEvent>, L<DBI>.
279 306
280=head1 AUTHOR 307=head1 AUTHOR
281 308
282 Marc Lehmann <schmorp@schmorp.de> 309 Marc Lehmann <schmorp@schmorp.de>
283 http://home.schmorp.de/ 310 http://home.schmorp.de/
284 311
285=cut 312=cut
286 313
2871 3141
288 315

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines