PDO uses inconsistant error codes between DBs
Josh Waihi - June 30, 2009 - 01:05
| Project: | Drupal |
| Version: | 7.x-dev |
| Component: | simpletest.module |
| Category: | bug report |
| Priority: | critical |
| Assigned: | Unassigned |
| Status: | closed |
| Issue tags: | PostgreSQL Surge |
Description
The simpletest 'Invalid data' currently has one fail in Postgresql (and most likely sqlite too) because of this:
<?php
// 23000 means "Integrity constraint violation" according to ANSI SQL.
$this->assertEqual($e->errorInfo[0], '23000', t('Exception has proper SQLSTATE.'));
?>This error code is only returned from MySQL. PostgreSQL returns 23505 - "duplicate key value violates unique constraint", which is more accurate than what MySQL reports back. It would seem to me that were looking for error codes between in the 23000s is that how we want to patch this?

#1
Suppose testing environment should know db type and use local code
#2
Another trouble with that issue - this exception handler works inside simpletest's exception handler so sometimes (depends on php version and env config) bring unpredictable results, for example broke batch while returning exception after JSON data
#3
The simple fact that databases will return different error codes means that this is an unreliable way to write code. It is not a condition Drupal can rely on due to its inconsistantcy between databases.
So lets just remove it and not encourage the use of it in code.
#4
Suppose much better to remove this test at all then leave without assert
#5
@andypost, this test does other assertions that are usefull, its merely the error code assertion that is not of any use.
#6
So lets commit this, I see no useful info in this assertion
#7
Committed to CVS HEAD. Thanks!
#8
Automatically closed -- issue fixed for 2 weeks with no activity.
#9
FWIW, Sqlite also returns 23000.