in reply to Re: Re: DBI AutoCommit clarification
in thread DBI AutoCommit clarification

And then there is always the $dbh->begin_work() method, but I don't know how many drivers support it at this time; I know that neither DBD::mysql nor DBD::Pg support it right now. Oracle?

The nice thing about  $dbh->begin_work() over local($dbh->{AutoCommit}) = 0; is that $dbh->begin_work() will not automatically commit on exiting scope which could be a bad thing if you missed catching an exception or forgot to rollback in the exception handler.

Replies are listed 'Best First'.
Re: Re: Re: Re: DBI AutoCommit clarification
by mpeppler (Vicar) on Sep 19, 2003 at 15:57 UTC
    If you check the DBI sources, begin_work() is nothing more than $dbh->{AutoCommit} = 0;...

    The nice thing about $dbh->begin_work() over local($dbh->{AutoCommit}) = 0; is that $dbh->begin_work() will not automatically commit on exiting scope...
    That's a good point. My first reaction was that no driver should do that, but then I looked at my sources and realized that DBD::Sybase does indeed commit silently when AutoCommit is turned back on. I'm not sure that I like that behavior - I should probably issue a message about un-committed work at that point - if you have AutoCommit turned off you should really be forced to explicitly commit or rollback any changes, and just flipping AutoCommit back on isn't the same thing.

    Michael