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]
-----------------------------------------------------------------------------

Reply via email to