X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage.pm;h=eb87d4f63f51be1927789ec1f7ed20f5f07eb048;hb=cb9b5b23a0f1487c92a609af81b97dd1ed710ff1;hp=604ad5b7e8ed936799f5caaf2c35914dfd826fb4;hpb=89028f42595b587599191bad8d1b5fe17f11c131;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage.pm b/lib/DBIx/Class/Storage.pm index 604ad5b..eb87d4f 100644 --- a/lib/DBIx/Class/Storage.pm +++ b/lib/DBIx/Class/Storage.pm @@ -299,21 +299,25 @@ sub svp_rollback { die "Virtual method!" } =for comment -=head2 txn_scope_guard (EXPERIMENTAL) +=head2 txn_scope_guard -An alternative way of using transactions to C: +An alternative way of transaction handling based on +L: - my $txn = $storage->txn_scope_guard; + my $txn_guard = $storage->txn_scope_guard; $row->col1("val1"); $row->update; - $txn->commit; + $txn_guard->commit; -If a exception occurs, the transaction will be rolled back. This is still very -experiemental, and we are not 100% sure it is working right when nested. The -onus is on you as the user to make sure you dont forget to call -$C<$txn->commit>. +If an exception occurs, or the guard object otherwise leaves the scope +before C<< $txn_guard->commit >> is called, the transaction will be rolled +back by an explicit L call. In essence this is akin to +using a L/L pair, without having to worry +about calling L at the right places. Note that since there +is no defined code closure, there will be no retries and other magic upon +database disconnection. If you need such functionality see L. =cut