Showing 1 changed files with 23 additions and 6 deletions
+23 -6
lib/DBI/Custom.pm
... ...
@@ -59,8 +59,9 @@ sub filters : Attr { type => 'hash', deref => 1, auto_build => sub { shift->filt
59 59
 sub add_filter { shift->filters(@_) }
60 60
 
61 61
 sub result_class : Attr { auto_build => sub { shift->result_class('DBI::Custom::Result') }}
62
-sub dbh          : Attr { auto_build => sub { shift->connect } }
62
+sub dbh          : Attr {}
63 63
 sub sql_template : Attr { auto_build => sub { shift->sql_template(DBI::Custom::SQLTemplate->new) } }
64
+sub auto_commit  : Attr {}
64 65
 
65 66
 
66 67
 our %VALID_CONNECT_INFO = map {$_ => 1} qw/data_source user password options/;
... ...
@@ -93,13 +94,13 @@ sub connect {
93 94
 
94 95
 sub DESTROY {
95 96
     my $self = shift;
96
-    $self->disconnect;
97
+    $self->disconnect if $self->connected;
97 98
 }
98 99
 
99 100
 # Is connected?
100 101
 sub connected {
101 102
     my $self = shift;
102
-    return exists $self->{dbh} && eval {$self->dbh->can('prepare')};
103
+    return exists $self->{dbh} && eval {$self->{dbh}->can('prepare')};
103 104
 }
104 105
 
105 106
 # Disconnect
... ...
@@ -118,6 +119,18 @@ sub reconnect {
118 119
     $self->connect;
119 120
 }
120 121
 
122
+# Commit
123
+sub commit {
124
+    my $self = shift;
125
+    return $self->dbh->commit;
126
+}
127
+
128
+# Rollback
129
+sub rollback {
130
+    my $self = shift;
131
+    return $self->dbh->rollback;
132
+}
133
+
121 134
 sub dbh_option {
122 135
     my $self = shift;
123 136
     croak("Not connected") unless $self->connected;
... ...
@@ -153,6 +166,9 @@ sub query {
153 166
     $filter ||= $self->bind_filter;
154 167
     
155 168
     my ($sql, @bind) = $self->create_sql($template, $values, $filter);
169
+    
170
+    $self->connect unless $self->connected;
171
+    
156 172
     my $sth = $self->dbh->prepare($sql);
157 173
     
158 174
     if ($sth_options) {
... ...
@@ -161,7 +177,7 @@ sub query {
161 177
         }
162 178
     }
163 179
     
164
-    $sth->execute(@bind);
180
+    my $ret_val = $sth->execute(@bind);
165 181
     
166 182
     # Select
167 183
     if ($sth->{NUM_OF_FIELDS}) {
... ...
@@ -169,18 +185,19 @@ sub query {
169 185
         my $result = $result_class->new({sth => $sth});
170 186
         return $result;
171 187
     }
172
-    return;
188
+    return $ret_val;
173 189
 }
174 190
 
175 191
 
176 192
 sub query_raw_sql {
177 193
     my ($self, $sql, @bind) = @_;
194
+    
195
+    $sefl->connect unless $self->connected;
178 196
     my $sth = $self->dbh->prepare($sql);
179 197
     $sth->execute(@bind);
180 198
     return $sth;
181 199
 }
182 200
 
183
-sub auto_commit : Attr {}
184 201
 
185 202
 
186 203
 Object::Simple->build_class;