On Mon, 16 Jan 2006 23:15:59 +0000 (UTC), Jeremy Nixon wrote:
> There are two
> ways to put a transaction into that mode: you can open a transaction and
> then "set transaction isolation level serializable", or you can open the
> transaction by doing "begin transaction isolation level serializable".
>
> DBI won't let you do the latter at all, it just tells you to use DBI
> methods for transactions, and there is no DBI method for that. You can't
> do the first option when AutoCommit is off, because you can't do "begin",
> but if you do the "set transaction" it tells you there is no transaction
> open. So I have to turn AutoCommit on, open a transaction, then send
> the "set transaction" query. Then I have to remember, for that particular
> database handle, to put AutoCommit back where it was before after a
> commit or rollback -- which means I have to keep state on each handle I
> have open.
>
> I do so wish for an AutoCommit mode that tells DBI, "just let me handle
> it, ok thanks". Pass-through mode. Get-the-heck-out-of-my-way mode.
> I've honestly considered dropping DBI completely and just using the
> direct C library interface.
If you have AutoCommit on, there *is* a DBI method to explicitly start a
transaction, and you'll go back to normal at the next commit()/rollback():
$dbh->begin_work;
$dbh->do('set transaction isolation level serializable');
Or, if AutoCommit is off, you could force a transaction to start, then set
the isolation level:
$dbh->do('select 1'); # Or an update which doesn't match anything
$dbh->do('set transaction isolation level serializable');
Or, if you want this isolation level to apply to everything, say so when
you connect:
$dbh->do("set default_transaction_isolation to 'serializable'");
I haven't tested any of these, since I haven't needed to change the isolation
level since the bad old days of Illustra, when "read uncommitted" was
necessary to even approach reasonable performance on our horrible system.
--
Peter Haworth [EMAIL PROTECTED]
"I am the Supreme Being, you know. I'm not entirely dim."
-- God (in Time Bandits)