Showing 3 changed files with 31 additions and 6 deletions
+3 -1
Changes
... ...
@@ -1,4 +1,6 @@
1
-0.2108
1
+0.2110
2
+  - added EXPERIMETNAL aysnc_conf attribute
3
+0.2109
2 4
   - select method can be called even if table name is not specified
3 5
 0.2108
4 6
   - added async database access support using AnyEvent
+20 -2
lib/DBIx/Custom.pm
... ...
@@ -1,7 +1,7 @@
1 1
 package DBIx::Custom;
2 2
 use Object::Simple -base;
3 3
 
4
-our $VERSION = '0.2109';
4
+our $VERSION = '0.2110';
5 5
 use 5.008001;
6 6
 
7 7
 use Carp 'croak';
... ...
@@ -22,6 +22,7 @@ use Scalar::Util qw/weaken/;
22 22
 
23 23
 has [qw/connector dsn password quote user exclude_table user_table_info
24 24
      user_column_info safety_character/],
25
+  async_conf => sub { {} },
25 26
   cache => 0,
26 27
   cache_method => sub {
27 28
     sub {
... ...
@@ -346,6 +347,7 @@ sub execute {
346 347
   my %opt = @_;
347 348
   
348 349
   # Async query
350
+  $opt{prepare_attr} = $self->async_conf->{prepare_attr} if $opt{async};
349 351
   if ($opt{async} && !$self->{_new_connection}) {
350 352
     my $dsn = $self->dsn;
351 353
     croak qq/Data source must be specified when "async" option is used/
... ...
@@ -612,7 +614,7 @@ sub execute {
612 614
     my $watcher;
613 615
     weaken $self;
614 616
     $watcher = AnyEvent->io(
615
-      fh => $self->{dbh}->mysql_fd,
617
+      fh => $self->async_conf->{fh}->($self),
616 618
       poll => 'r',
617 619
       cb   => sub {
618 620
         $cb->($self, $result);
... ...
@@ -2183,6 +2185,22 @@ L<DBIx::Custom::Order>
2183 2185
 
2184 2186
 =head1 ATTRIBUTES
2185 2187
 
2188
+=head2 C<async_conf> EXPERIMENTAL
2189
+
2190
+  my $async_conf = $dbi->async_conf;
2191
+  $dbi = $dbi->async_conf($conf);
2192
+
2193
+Setting when C<async> option is used.
2194
+
2195
+  # MySQL
2196
+  $dbi->async_conf({
2197
+    prepare_attr => {async => 1},
2198
+    fh => sub { shift->dbh->mysql_fd }
2199
+  })
2200
+
2201
+C<prepare_attr> is DBI's C<prepare> method second argument,
2202
+C<fh> is callback that return file handle to watch.
2203
+
2186 2204
 =head2 C<connector>
2187 2205
 
2188 2206
   my $connector = $dbi->connector;
+8 -3
t/mysql-async-opt.t
... ...
@@ -67,8 +67,13 @@ my $timer = AnyEvent->timer(
67 67
 
68 68
 my $count = 0;
69 69
 
70
+$dbi->async_conf({
71
+  prepare_attr => {async => 1},
72
+  fh => sub { shift->dbh->mysql_fd }
73
+});
74
+
70 75
 $dbi->execute('SELECT SLEEP(1), 3', undef,
71
-  prepare_attr => {async => 1}, select => 1,
76
+  select => 1,
72 77
   async => sub {
73 78
     my ($dbi, $result) = @_;
74 79
     my $row = $result->fetch_one;
... ...
@@ -77,12 +82,12 @@ $dbi->execute('SELECT SLEEP(1), 3', undef,
77 82
   }
78 83
 );
79 84
 
80
-$dbi->select('key1', table => 'table1', prepare_attr => {async => 1},
85
+$dbi->select('key1', table => 'table1',
81 86
   async => sub {
82 87
     my ($dbi, $result) = @_;
83 88
     my $row = $result->fetch_one;
84 89
     is($row->[0], 1, 'after1');
85
-    $dbi->select('key1', table => 'table1', prepare_attr => {async => 1},
90
+    $dbi->select('key1', table => 'table1',
86 91
       async => sub {
87 92
         my ($dbi, $result) = @_;
88 93
         my $row = $result->fetch_one;