__PACKAGE__->mk_group_accessors('simple' =>
qw/connect_info _dbh _sql_maker debug cursor/);
+our $TRANSACTION = 0;
+
sub new {
my $new = bless({}, ref $_[0] || $_[0]);
$new->cursor("DBIx::Class::Storage::DBI::Cursor");
return DBI->connect(@info);
}
-=head2 commit
-
- $class->commit;
+=head2 txn_begin
-Issues a commit again the current dbh
+Calls begin_work on the current dbh.
=cut
-sub commit { $_[0]->dbh->commit; }
+sub txn_begin {
+ $_[0]->dbh->begin_work if $TRANSACTION++ == 0 and $_[0]->dbh->{AutoCommit};
+}
-=head2 rollback
+=head2 txn_commit
- $class->rollback;
+Issues a commit against the current dbh.
-Issues a rollback again the current dbh
+=cut
+
+sub txn_commit {
+ if ($TRANSACTION == 0) {
+ $_[0]->dbh->commit;
+ }
+ else {
+ $_[0]->dbh->commit if --$TRANSACTION == 0;
+ }
+}
+
+=head2 txn_rollback
+
+Issues a rollback against the current dbh.
=cut
-sub rollback { $_[0]->dbh->rollback; }
+sub txn_rollback {
+ if ($TRANSACTION == 0) {
+ $_[0]->dbh->rollback;
+ }
+ else {
+ --$TRANSACTION == 0 ? $_[0]->dbh->rollback : die $@;
+ }
+}
sub _execute {
my ($self, $op, $extra_bind, $ident, @args) = @_;