ID:               42496
 Comment by:       michael dot virnstein at brodos dot de
 Reported By:      iddekingej at lycos dot com
 Status:           Open
 Bug Type:         OCI8 related
 Operating System: win 2000
 PHP Version:      5.2.4
 New Comment:

Thanks, this fix works for lobs, but i investigated a bit further and
realized, that the same problem occures when returning cursors. 
To totally remove the problem you would have to remove
"zend_list_addref(outcol->statement->id);" from SQLT_RSET in
php_oci_define_callback() also. 
I don't know if this is the right solution at all, i'm not that much
into the php-engine, oci8-library and C in general. Wouldn't it be
better to close all related cursors when closing the "main"-cursor
instead of not registering them?


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

[2007-11-29 18:01:29] [EMAIL PROTECTED]

This was reproduced with 5.2.3 on Linux.
Please try this patch AND LET US KNOW THE RESULT - thanks!

In php_oci_define_callback function [oci8_statement.c],
zend_list_addref is called for every lob column of each row.  When we
commented out this increment, the statements were destroyed and no
cursor leaks were seen.

case SQLT_RDD:
case SQLT_BLOB:
case SQLT_CLOB:
case SQLT_BFILE: {
...
descr = php_oci_lob_create(outcol->statement->connection, dtype
TSRMLS_CC);
               if (!descr) {
                   return OCI_ERROR;
               }
               /*zend_list_addref(outcol->statement->id); Commented out
*/


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

[2007-11-29 16:38:45] michael dot virnstein at brodos dot de

I recognized, that when calling oci_free_statement() for every lob
column that is returned by the select, the cursor gets closed
correctly.
So if i have three lob columns in the query, i have to call
oci_free_statment() three times on the statement handle to have it
closed correctly.

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

[2007-11-22 10:01:34] ghosh at q-one dot com

I'm using OCI8 1.2.4 with Oracle 11g. A previous version doesnt seem to
work, so I cannot test with 1.2.3. It also says so in the changelog for
1.2.4: Add Oracle 11g support. Now, whenever I select (c)lobs (even with
only 1 lob column),, the table v$temporary_lobs keeps filling up and UGA
memory is consumed for each row that's being read until the server
aborts with an out-of-memory error. This does not happen when I run my
statements directly via SQLplus, so it seems to be an OCI8/PHP bug. So,
is this related to this bug or should I file a new one?

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

[2007-11-15 13:55:42] markus dot knecht at psi dot ch

What i see after upgrading to PHP 5.2.5:
NOT Working: oci8 1.2.4,$Revision: 1.269.2.16.2.38 $
Working    : oci8 1.2.3,$Revision: 1.269.2.16.2.29 $

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

[2007-11-13 21:38:44] iarenuno at eteo dot mondragon dot edu

I can confirm that 1.2.4 has the bug, but 1.2.3 ($Revision:
1.269.2.16.2.30 $) doesn't have it.

Saludos. IƱaki.

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/42496

-- 
Edit this bug report at http://bugs.php.net/?id=42496&edit=1

Reply via email to