__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 $new;
}
-sub get_simple {
- my ($self, $get) = @_;
- return $self->{$get};
-}
-
-sub set_simple {
- my ($self, $set, $val) = @_;
- return $self->{$set} = $val;
-}
-
=head1 NAME
DBIx::Class::Storage::DBI - DBI storage handler
=head1 METHODS
-=over 4
-
=cut
sub dbh {
return DBI->connect(@info);
}
-=item 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};
+}
-=item 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) = @_;
1;
-=back
-
=head1 AUTHORS
Matt S. Trout <mst@shadowcatsystems.co.uk>