db_transaction codeWhat it does:
Executes the contained code in a single database transaction.Defined in: /web/philip/packages/acs-core/10-database-procs.tcl
Source code:
global ad_conn
db_with_handle db {
# Preserve the handle, since db_with_handle kills it after executing
# this block.
set dbh $db
# Remember that there's a transaction happening on this handle.
if { ![info exists ad_conn(db,transaction_level,$db)] } {
set ad_conn(db,transaction_level,$db) 0
}
set level [incr ad_conn(db,transaction_level,$db)]
if { $level == 1 } {
ns_db dml $db "begin transaction"
}
}
set errno [catch [list uplevel $code] error]
incr ad_conn(db,transaction_level,$dbh) -1
if { $errno == 1 && ![string compare $error "<<AD_ABORT_TRANSACTION>>"] } {
# Abort the transaction. If this the outermost transaction, actually perform
# the "abort transaction" DML; if not, propagate the error.
if { $level == 1 } {
ns_db dml $dbh "abort transaction"
}
if { $level != 1 } {
error "<<AD_ABORT_TRANSACTION>>"
}
} elseif { $errno } {
# Propagate the error
global errorInfo
error $error $errorInfo $errno
} else {
# Success!
if { $level == 1 } {
ns_db dml $dbh "end transaction"
}
}