... | ... |
@@ -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; |