RWDE
view release on metacpan or search on metacpan
lib/RWDE/DB/Record.pm view on Meta::CPAN
# -
# Before executing the enclosed code block the RWDE::DB::DbRegistry will signal the database backend to start a transaction
# on the first connection utilized within the code. The underlying logic only affords a transaction to operate across one
# connection - so in the event that the code block requires more than one connection an exception will be thrown.
# -
# Note that transaction closures may be nested within each-other however any nested transactions are essentially no-ops.
# This enables you to guarantee that any particular method will be within a transaction if you require.
# -
# In the event that you require transactions across multiple connections you should see "prepare_transaction"
# ¶m code the requested code to be executed within a transaction
sub transaction(&) {
my $code = shift;
if (!RWDE::DB::DbRegistry->transaction_signalled) {
try {
RWDE::DB::DbRegistry->signal_transaction();
&$code();
RWDE::DB::DbRegistry->commit_transaction();
}
catch Error with {
my $ex = shift;
lib/RWDE/DB/Record.pm view on Meta::CPAN
# -
# my $named = prepare_transaction {
# database_operation();
# };
# -
# Before executing the enclosed code, RWDE::DB::DbRegistry will signal the database backend to start a transaction on the first connection
# that is utilized within the code. A transaction can only operate on one connection at a time - otherwise an exception is thrown.
# In the event that you want to submit or abort the prepared transaction see "commit_transaction" & "abort_transaction"
# @param code the requested code to be executed within a transaction
# @return string representing the database handle of the prepared transaction
sub prepare_transaction(&) {
my $code = shift;
if (RWDE::DB::DbRegistry->transaction_signalled) {
throw RWDE::DevelException({ info => "Attempt to nest a named transaction within a previously established transaction." });
}
my $transaction_name = undef;
try {
RWDE::DB::DbRegistry->signal_transaction();
( run in 2.093 seconds using v1.01-cache-2.11-cpan-49f99fa48dc )