DBD::mysql 3.0006 and 3.0006_1 released

[email protected] (Patrick Galbraith) Sun, 11 Jun 2006 10:12:32 -0700
Newsgroups perl.dbi.dev,perl.dbi.users,perl.dbi.announce
Message-ID <[email protected]>
Dear DBD::mysql users,

DBD::mysql version 3.0006 (stable, production) and 3.0006_1 (dev) have 
been released! If you noticed, 3.0005/3.0005_1 was skipped because I had 
to correct the changelog and CPAN doesn't allow replacement of file uploads.

Version 3.0006 is the production version with server-side prepare
statements turned off by default, and 3.0006_1 is the development
version with server-side prepare statements turned on by default.

   * Fix dbd_st_finish in 3.0004 didn't clean up bind buffers resulting
     in a memory leak. See eg/prepare_memory_usage.pl to see how this
     manifests itself. Thanks to Jason Snell for giving me a good script
     to reproduce this!
   * Fix to parse_params, mysql.xs dbh->do, and bind_param to deal with
     passing substr to "do" for placeholder value. Thanks Martin Waite
     for the patch to parse_params (extended to mysql.xs "do" and
     bind_param for server-side prepared statements.


Note: to turn on server-side prepared statements, simply append
";mysql_server_prepare=1" to the connect string or via the driver
handle. Please refer to documentation for further details.

Notes:

* The development (3.0006_1) version supports multiple result sets from
stored procedures. Documentation and sample code (in the ./eg dir) is
included on how to use multiple result sets. Also, the perldoc has
information on multiple result sets.

* To turn off server-side prepare statements to have emulated prepared
statements, append ";mysql_emulated_prepare=0" in the connect string or
via the driver handle.

Thanks to Martin Waitem! He provided a great patch to parse_params, 
which emulated prepared statement code uses to translate placeholders 
into values. The fix he provided enables parse_params to handle passing 
things like substring to "do" using placeholders. I noticed that the 
same problem existed in the server-side prepared code, and his fix gave 
me the idea of how to fix it in the bind_param and mysql.xs do.

Also thanks to Jason Snell, who informed me of a memory leak and 
provided me with a script that ran execute in a continuous loop showing 
the memory leak! With this, I was able to see that "finish" wasn't 
freeing all of the bind members. This script is now in 
"eg/prepare_memory_usage.pl". I would like to eventually put this in the 
test suite, if possible. I just need to find a way to have the test 
suite detect if memory usage increases as a loop iterates.

NOTICE: (as I said in the last release) Very soon, perhaps in a release 
or so, I intend to stabilise the dev release and make that the 
production release. This means that server
side prepared statements will be turned on by default. I intend to test
this thoroughly prior to making the switch, so that users don't have any
problems when upgrading, when the time comes. This prepared statement
API is only available with MySQL server versions 4.1 and above, so if
you're using an older version, you won't notice anything. Though, be
assured that even for the driver emulated handling of prepared
statements, I will continue to make sure the code is improved.

As the community, one think you can do if you are interested in helping
is to turn on server side prepare statements in 3.0006, or try the
development driver, 3.0006_1 to see if there are any problems. I've
tested the code as much as I can, but I know nothing tests code like
1000s of developers thinking of unique ways of using the driver that I
never could have imagined. If you find a bug, please report it to me, or
at http://bugs.mysql.com. I'll fix that bug and add test coverage for it.

Coveati: Please make sure you don't use a threaded Perl with this driver
on Solaris.

Again, if anyone has any problems or questions with the driver, please
feel free to email me, or especially post to [email protected] , and if
you find bugs, please report them to http://bugs.mysql.com

These versions for this module can be found at CPAN:

http://search.cpan.org/dist/DBD-mysql/

The files:

DBD::mysql 3.0006

   file: $CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0006.tar.gz
   size: 114658 bytes
    md5: b6d46ea7df99800082a2d2480056b0ce

DBD::mysql 3.0006_1

   file: $CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0006_1.tar.gz
   size: 111796 bytes
    md5: 417f52d07338422ac16afc038bcc3434

Kind regards,

Patrick Galbraith