As it turns out, the testing of this is far more difficult than I
originally suspected. Not because it fails, but because emulated
queries were behaving badly to begin with, so a number of tests were
testing bad behavior. For example, bug 44327:
https://github.com/ircmaxell/php-src/blob/master/ext/pdo_mysql/tests/bug44327.phpt
It runs the following code:
$stmt = $db->prepare('foo');
@$stmt->execute();
$row = $stmt->fetch();
var_dump($row->queryString);
And expects:
Notice: Trying to get property of non-object in %s on line %d
NULL
Whereas the proper behavior is for the syntax error to be thrown from
prepare
. PDO emulation doesn't do that, because it doesn't parse
until execute
, hence the error delays until that point.
When I run it, I get:
Warning: PDO::prepare(): SQLSTATE[42000]: Syntax error or access
violation: 1064 You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'foo' at line 1 in %s on line %d
Because it's sent back at prepare() instead of at execute (and prepare
doesn't have an @).
There are at least a few more failures of this nature.
To fix this, is going to take some significant refactoring of a number
of tests. Plus, without this patch, I'm still getting 2 warnings and 6
failures:
=====================================================================
Number of tests : 166 157
Tests skipped : 9 ( 5.4%) --------
Tests warned : 2 ( 1.2%) ( 1.3%)
Tests failed : 6 ( 3.6%) ( 3.8%)
Expected fail : 1 ( 0.6%) ( 0.6%)
Tests passed : 148 ( 89.2%) ( 94.3%)
---------------------------------------------------------------------
Time taken : 43 seconds
=====================================================================
=====================================================================
EXPECTED FAILED TEST SUMMARY
---------------------------------------------------------------------
PECL Bug #7976 (Calling stored procedure several times)
[ext/pdo_mysql/tests/bug_pecl_7976.phpt] XFAIL REASON: Works with
mysqlnd. It is not supported by libmysql. For libmysql is good enough
to see no crash.
=====================================================================
=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
Bug #39858 (Lost connection to MySQL server during query by a repeated
call stored proced) [ext/pdo_mysql/tests/bug_39858.phpt]
PDO MySQL Bug #41997 (stored procedure call returning single rowset
blocks future queries) [ext/pdo_mysql/tests/bug_41997.phpt]
MySQL PDO->__construct() - Generic + DSN
[ext/pdo_mysql/tests/pdo_mysql___construct.phpt]
MySQL PDO->exec(), affected rows
[ext/pdo_mysql/tests/pdo_mysql_exec_load_data.phpt]
MySQL PDOStatement->nextRowSet()
[ext/pdo_mysql/tests/pdo_mysql_stmt_nextrowset.phpt]
MySQL Prepared Statements and different column counts
[ext/pdo_mysql/tests/pdo_mysql_stmt_variable_columncount.phpt]
=====================================================================
=====================================================================
WARNED TEST SUMMARY
---------------------------------------------------------------------
Bug #44454 (Unexpected exception thrown in foreach() statement)
[ext/pdo_mysql/tests/bug_44454.phpt] (warn: XFAIL section but test
passes)
MySQL PDO->prepare(), emulated PS
[ext/pdo_mysql/tests/pdo_mysql_prepare_emulated.phpt] (warn: XFAIL
section but test passes)
=====================================================================
Whereas with the patch, there are a few more failures:
=====================================================================
Number of tests : 166 157
Tests skipped : 9 ( 5.4%) --------
Tests warned : 2 ( 1.2%) ( 1.3%)
Tests failed : 18 ( 10.8%) ( 11.5%)
Expected fail : 1 ( 0.6%) ( 0.6%)
Tests passed : 136 ( 81.9%) ( 86.6%)
---------------------------------------------------------------------
Time taken : 53 seconds
=====================================================================
So to do this, I'd need to fix those as well... (at least all but the XFAIL)
So I'm going to keep at it, but it's going to take a while (and would
like some insight into if this is the best approach to fixing the
tests)...
Thanks,
Anthony
On Thu, Jun 21, 2012 at 2:57 AM, Ulf Wendel <[email protected]> wrote:
> Am 20.06.2012 08:39, schrieb Pierre Joye:
>
>> hi Chris,
>>
>> On Tue, Jun 19, 2012 at 11:45 PM, Christopher Jones
>> <[email protected]> wrote:
>>
>>> We should take this offline - I can see cases where I'd strongly
>>> disagree.
>>
>>
>> I see no reason to move a discussion offline or off list, this is a
>> topic that interests many other readers or developers.
>
>
> Agreed. There was enough trouble around PDO and discussions going on in the
> hidden.
>
> However, this does not impact the original topic.
>
> Ulf
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>