Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 1.12.3

Bug #6414 DB module attempts to guess which statements modify the database, incorrectly
Submitted: 2006-01-04 15:40 UTC
From: chris at mysociety dot org Assigned:
Status: Duplicate Package: DB
PHP Version: Irrelevant OS: irrelevant
Roadmaps: (Not assigned)    
Subscription  


 [2006-01-04 15:40 UTC] chris at mysociety dot org
Description: ------------ DB::isManip attempts to guess whether a given statement is going to modify the database. The PostgreSQL module uses this (a) to determine whether to start a transaction, and (b) to decide whether any database changes have occured during the given transaction. Unfortunately the method does not and can not determine the answer to the question accurately. For instance, isManip will return false for the query, select function_with_side_effects_and_return_value(...); whereas it should return true. Similarly, if you do a select ... for update, then the driver should begin a transaction (so that the lock obtained by the query will persist over the transaction), but isManip also returns false for this case. It's possible to work around this by doing $db->query("commit") explicitly, but that's nasty and anyway the behaviour isn't documented, so this might break in a future version. Test script: --------------- /* $db is a connection to a PostgreSQL database */ $db->query("select function_with_side_effects_and_return_value(...)"); $db->commit(); Expected result: ---------------- Results of function committed. Actual result: -------------- Results of function not committed.

Comments

 [2006-03-11 10:12 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!