#44861 [Ver->Csd]: scrollable cursor don't work with pgsql

[email protected]
Newsgroups php.bugs
Message-ID <[email protected]>
 ID:               44861
 Updated by:       [email protected]
 Reported By:      php at benjaminschulz dot com
-Status:           Verified
+Status:           Closed
 Bug Type:         PDO related
-Operating System: osx
+Operating System: Irrelevant
 PHP Version:      5.3CVS-2008-04-29 (CVS)
-Assigned To:      
+Assigned To:      mbeccati
 New Comment:

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.




Previous Comments:
------------------------------------------------------------------------

[2009-02-04 00:43:51] matteo at beccati dot com

Here's the patch, including a phpt file:

http://www.beccati.com/misc/pdo_pgsql_bug44861_php_5.3.patch

A bit of explanations... I've changed the ordering when executing the
query so that if a cursor is needed, it's created before any preparation
happens.

The cursor is now declared as SCROLL-able and WITH HOLD to ensure it
can be used even outside transactions. I was previously trying to avoid
WITH HOLD and enforce requirement for a transaction, but things were
going very bad when the destructor was called after the transaction was
closed, which is a common situation when calling commit() without
previusly unsetting the statement variable.

One thing I'm not really sure about is the behaviour of ORI_ABS and
ORI_REL: ORI_ABS will work for offsets >= 1, while ORI_REL can work
with negative numbers as well. I'm sorry, but it's impossible for me to
guess how they should work just by reading the pdo_oci code or the
Oracle documentation of OCIStmtFetch2.

------------------------------------------------------------------------

[2009-01-15 22:30:21] andrew at rook dot ca

Same problem.
PHP 5.2.8 on Fedora 8 (2.6.21.7-5.fc8xen) && PostgreSQL 8.2.11

------------------------------------------------------------------------

[2008-12-12 11:36:07] denis at edistar dot com

Same problem also in PHP 5.2.6.

I think this is a very serious bug.

------------------------------------------------------------------------

[2008-04-29 16:13:24] php at benjaminschulz dot com

Description:
------------
I don't see how to use scrollable cursors with pdo_pgsql

Reproduce code:
---------------
$db = new Pdo("pgsql:...");
$db->setAttribute(Pdo::ATTR_ERRMODE, Pdo::ERRMODE_EXCEPTION);
$res = $db->prepare("SELECT 'row1' UNION SELECT 'row2' UNION SELECT
'row3' UNION SELECT 'row4'", array(PDO::ATTR_CURSOR =>
PDO::CURSOR_SCROLL));
$res->execute();
var_dump($res->fetch());
// $res->fetch(Pdo::FETCH_NUM, PDO::FETCH_ORI_ABS, 2) won't throw an
exception but return false

Expected result:
----------------
array('row1')

Actual result:
--------------
Fatal error: Uncaught exception 'PDOException' with message
'SQLSTATE[34000]: Invalid cursor name: 7 ERROR: cursor
"pdo_pgsql_cursor_00d78a0c" does not exist' in ...


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=44861&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.