Showing 3 changed files with 75 additions and 16 deletions
+2
Changes
... ...
@@ -1,3 +1,5 @@
1
+0.1673
2
+    - fixed dbh() method bug.
1 3
 0.1672
2 4
     - removed EXPERIMENTAL Prefork server safe implementation, my implementation is very buggy.
3 5
     - added EXPERIMETNAL connector() attribute.
+19 -9
lib/DBIx/Custom.pm
... ...
@@ -1,6 +1,6 @@
1 1
 package DBIx::Custom;
2 2
 
3
-our $VERSION = '0.1671';
3
+our $VERSION = '0.1673';
4 4
 
5 5
 use 5.008001;
6 6
 use strict;
... ...
@@ -237,15 +237,25 @@ sub create_query {
237 237
 sub dbh {
238 238
     my $self = shift;
239 239
     
240
-    # From Connction manager
241
-    if (my $connector = $self->connector) {
242
-        croak "connector must have dbh() method"
243
-          unless ref $connector && $connector->can('dbh');
244
-          
245
-        return $connector->dbh;
240
+    # Set
241
+    if (@_) {
242
+        $self->{dbh} = $_[0];
243
+        
244
+        return $self;
245
+    }
246
+    
247
+    # Get
248
+    else {
249
+        # From Connction manager
250
+        if (my $connector = $self->connector) {
251
+            croak "connector must have dbh() method"
252
+              unless ref $connector && $connector->can('dbh');
253
+              
254
+            return $self->{dbh} = $connector->dbh;
255
+        }
256
+        
257
+        return $self->{dbh} ||= $self->_connect;
246 258
     }
247
-
248
-    return $self->{dbh} ||= $self->_connect;
249 259
 }
250 260
 
251 261
 our %DELETE_ARGS
+54 -7
t/dbix-custom-mysql-private.t
... ...
@@ -2,6 +2,8 @@ use Test::More;
2 2
 use strict;
3 3
 use warnings;
4 4
 
5
+use DBIx::Connector;
6
+
5 7
 # user password database
6 8
 our ($USER, $PASSWORD, $DATABASE) = connect_info();
7 9
 
... ...
@@ -33,11 +35,6 @@ my $rows;
33 35
 my $result;
34 36
 
35 37
 # Constant varialbes for test
36
-my $CREATE_TABLE = {
37
-    0 => 'create table table1 (key1 char(255), key2 char(255));'
38
-};
39
-
40
-
41 38
 use DBIx::Custom::MySQL;
42 39
 
43 40
 test 'connect';
... ...
@@ -96,8 +93,58 @@ $rows = $dbi->select(
96 93
 is_deeply($rows, [{key1 => 1, key2 => 2}]);
97 94
 $dbi->delete_all(table => 'table1');
98 95
 
96
+test 'dbh';
97
+{
98
+    my $connector = DBIx::Connector->new(
99
+        "dbi:mysql:database=$DATABASE",
100
+        $USER,
101
+        $PASSWORD,
102
+        DBIx::Custom->new->default_dbi_option
103
+    );
104
+
105
+    my $dbi = DBIx::Custom->connect(connector => $connector);
106
+    $dbi->delete_all(table => 'table1');
107
+    $dbi->do('insert into table1 (key1, key2) values (1, 2)');
108
+    is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
109
+    
110
+    $dbi = DBIx::Custom->new;
111
+    $dbi->dbh('a');
112
+    is($dbi->{dbh}, 'a');
113
+}
114
+
115
+test 'transaction';
116
+test 'dbh';
117
+{
118
+    my $connector = DBIx::Connector->new(
119
+        "dbi:mysql:database=$DATABASE",
120
+        $USER,
121
+        $PASSWORD,
122
+        DBIx::Custom->new->default_dbi_option
123
+    );
124
+
125
+    my $dbi = DBIx::Custom->connect(connector => $connector);
126
+    $dbi->delete_all(table => 'table1');
127
+    
128
+    $dbi->connector->txn(sub {
129
+        $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
130
+        $dbi->insert(table => 'table1', param => {key1 => 3, key2 => 4});
131
+    });
132
+    is_deeply($dbi->select(table => 'table1')->fetch_hash_all,
133
+              [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]);
134
+
135
+    $dbi->delete_all(table => 'table1');
136
+    eval {
137
+        $dbi->connector->txn(sub {
138
+            $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
139
+            die "Error";
140
+            $dbi->insert(table => 'table1', param => {key1 => 3, key2 => 4});
141
+        });
142
+    };
143
+    is_deeply($dbi->select(table => 'table1')->fetch_hash_all,
144
+              []);
145
+}
146
+
99 147
 test 'fork';
100
-use DBIx::Connector;
101 148
 {
102 149
     my $connector = DBIx::Connector->new(
103 150
         "dbi:mysql:database=$DATABASE",
... ...
@@ -106,7 +153,7 @@ use DBIx::Connector;
106 153
         DBIx::Custom->new->default_dbi_option
107 154
     );
108 155
     
109
-    $dbi = DBIx::Custom->new(connector => $connector);
156
+    my $dbi = DBIx::Custom->new(connector => $connector);
110 157
     $dbi->delete_all(table => 'table1');
111 158
     $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
112 159
     die "Can't fork" unless defined (my $pid = fork);