I'm still learning how databases and transactions work so bear with me. How does error handling work?
If I have 5 nested transactions and the 5th transaction fails is this transaction failure supposed to be communicated to the parent or does the fourth transaction try to do error recovery? Ray > Date: Mon, 9 Apr 2007 9:38:16 -0700 > From: <[EMAIL PROTECTED]> > To: sqlite-users@sqlite.org > Cc: Dennis Cote <[EMAIL PROTECTED]> > Subject: Re: [sqlite] SQLite and nested transactions > > > So. If i read this code right. > * The transaction_level keeps track of how many nested transactions have > occurred. > * Only the parent transaction allows the commit. > > In this case, only a single journal is required (the parent journal). > Thanks, > Ray > > > ---- Dennis Cote <[EMAIL PROTECTED]> wrote: > > Darren Duncan wrote: > > > > > > I will clarify that child transactions are just an elegant way of > > > partitioning a larger task, and that parent transactions always > > > overrule children; even if a child transaction commits successfully, a > > > rollback of its parent means there are no lasting changes. > > Darren, > > > > Because of this, and the fact that a transaction is basically a > > guarantee that all or none of the enclosed statements are executed, it > > is much simpler to implement nested transactions using a counter and the > > existing transaction API in a set of wrapper functions. There is no need > > to maintain all the intermediate state information. All you need to know > > is the current nesting level, and if any enclosed transaction was rolled > > back. > > > > The following code shows the basic process. > > > > int transaction_level = 0; > > bool transaction_failed; > > > > void begin_nested_transaction() > > { > > if (transaction_level++ == 0) { > > transaction_failed = false; > > sqlite3_exec("begin"); > > } > > } > > > > void commit_nested_transaction() > > { > > if (--transaction_level == 0) > > if (transaction_failed) > > sqlite3_exec("rollback"); > > else > > sqlite3_exec("commit"); > > } > > > > void rollback_nested_transaction() > > { > > transaction_failed = true; > > commit_transaction(); > > } > > > > HTH > > Dennis Cote > > > > ----------------------------------------------------------------------------- > > To unsubscribe, send email to [EMAIL PROTECTED] > > ----------------------------------------------------------------------------- > > > > > ----------------------------------------------------------------------------- > To unsubscribe, send email to [EMAIL PROTECTED] > ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- To unsubscribe, send email to [EMAIL PROTECTED] -----------------------------------------------------------------------------