ID:               50755
 User updated by:  ssufficool at gmail dot com
 Reported By:      ssufficool at gmail dot com
 Status:           Open
 Bug Type:         PDO related
 Operating System: Linux 2.6.30-gentoo-r2
 PHP Version:      5.3.1
 New Comment:

I have a patch that removes client side buffering and allows for large
rowset queries without memory consumption. Compiled and tested
http://svn.php.net/repository/php/php-src/branches/PHP_5_2

SVN Revision: 293557

I can send patch via e-mail.


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

[2010-01-14 19:09:48] ssufficool at gmail dot com

Description:
------------
When querying large tables (> 800,000 rows) with PDO DBLIB I get out of
memory.

The same select query works fine using:

linux# tsql -H host -U user -P pass 
SELECT * from aVeryLargeTable
go
quit

on the command line using the freetds (dblib) library without consuming
client-side memory.

Reproduce code:
---------------
$pdo = new PDO('dblib:host=host','user','pass');
echo "Creating table...\n";
$pdo->query("CREATE TABLE large_table (field_1 nvarchar(4000))");
$pdo->query("DECLARE @n int;
set @n = 0;
WHILE (@n < 50000) BEGIN
  insert into large_table values( replicate(4000,'-') );
  set @n = @n + 1;
END");
echo "Prepare\n";
$rs = $pdo->prepare("SELECT * FROM large_table");
echo "Execute\n";
/*********OOM HERE**************/
$rs->execute( );


Expected result:
----------------
A valid handle to a resultset in $rs


Actual result:
--------------
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to
allocate 48 bytes) in /home/ssufficool/tds_test.php on line 12

It looks like the guts of
ext/pdo_dblib/dblib_stmt.c:pdo_dblib_stmt_execute()
at "/* let's fetch all the data */"

Should be moved to:
  pdo_dblib_stmt_fetch()

and only when a scrollable cursor is requested should the data be
buffered at the client (not required for ct-lib)


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


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

Reply via email to