Download & Extend

PDO uses inconsistant error codes between DBs

Project:Drupal core
Version:7.x-dev
Component:simpletest.module
Category:bug report
Priority:critical
Assigned:Unassigned
Status:closed (fixed)
Issue tags:PostgreSQL Surge

Issue Summary

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?

Comments

#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.

AttachmentSizeStatusTest resultOperations
505812-remove-ANSI-SQLSTATE-error-codes.patch975 bytesIdlePassed: 11562 passes, 0 fails, 0 exceptionsView details

#4

Suppose much better to remove this test at all then leave without assert

#5

Status:active» needs review

@andypost, this test does other assertions that are usefull, its merely the error code assertion that is not of any use.

#6

Status:needs review» reviewed & tested by the community

So lets commit this, I see no useful info in this assertion

#7

Status:reviewed & tested by the community» fixed

Committed to CVS HEAD. Thanks!

#8

Status:fixed» closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

#9

FWIW, Sqlite also returns 23000.

#10

nobody click here