On Monday, November 18, 2002, at 02:15 AM, Tim Bunce wrote:
I'm quite sure that in PostgreSQL, transactions have to be started explicitly.Many databases, like Oracle, automatically start a transaction at the server as soon as it's needed. The application doesn't have to do it explicitly. (DBD::Informix is probably a good example of a driver that needs to start transactions explicitly.)
According to Tom Lane, idle transactions are problematic, so I think I'll code it up to start the transaction when its needed -- presumably by checking and setting the relevant flags in execute().Drivers are free to defer starting a new transaction until it's needed. Or they can start one right away, but that may cause problems on the server if there are many 'idle transactions'. (Also beware that some databases don't allow certain statements, like some 'alter session ...', to be issued while a transaction is active. If that applies to Pg then you may have a problem.)
drivers do *not* need to define their own begin_work method.
What they _should_ do is make their commit and rollback methods
check for BegunWork being true (it's a bit flag in the com structure)
and if true then turn AutoCommit back on instead of starting a new transaction.
(If they don't do that then the DBI handles it but it's faster,
cleaner, and safer for teh driver to do it.)
Okay, then that's what I'll do. Do I check it like this?
if (DBIc_has(imp_dbh, DBIcf_BegunWork)) {...}
It appears that they return false when imp_dbh->conn is NULL. That would count as an error, I think. DBD::Pg doesn't report it as an error, though -- it just returns false. Should I add an appropriate call to do_error() in such a case?* Also in dbd_db_commit() and dbd_db_rollback(), I notice that the last
return statement returns 0. Shouldn't these be returning true?
Yes, when using Driver.xst, if there's no error.
Yes, I've thought about that. You can at least expect a bit of clean up (grammar, etc.), but I might well add more. It'd probably be good to do so as a newbie who wants to help other newbies along...Okay, sorry for all the questions. My motivation is to make a new PostgreSQL DBI driver that's one of the best DBI drivers around. Any help would go a long way toward helping me to reach my goal.I'd really appreciate any feedback (ie patches :) you might have for the DBI::DBD document. It's a bit thin and/or dated in places.
Regards,
David
--
David Wheeler AIM: dwTheory
[EMAIL PROTECTED] ICQ: 15726394
http://david.wheeler.net/ Yahoo!: dew7e
Jabber: [EMAIL PROTECTED]
