[DBAL-371] DBALException doesn't forward the SQL exception code Created: 24/Oct/12  Updated: 09/May/13  Resolved: 09/May/13

Status: Resolved
Project: Doctrine DBAL
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Matthieu Napoli Assignee: Benjamin Eberlei
Resolution: Won't Fix Votes: 0
Labels: None


 Description   

PDO exceptions carry the SQL error code. However DBALException doesn't forward any error code from the SQL exception.

Here is a (really poor/quick) example of usage:

try {
    $em->flush();
} catch (DBALException $e) {
    if ($e->getCode() === 23000) {
        echo '';
    } else {
        throw $e;
    }
}

I think I found where the problem is:

public static function driverExceptionDuringQuery(\Exception $driverEx, $sql, array $params = array())
{
    $msg = "An exception occurred while executing '".$sql."'";
    if ($params) {
        $msg .= " with params ".json_encode($params);
    }
    $msg .= ":\n\n".$driverEx->getMessage();

    return new self($msg, 0, $driverEx);
}

In return new self($msg, 0, $driverEx);, the exception is created with an error code of 0.

Is there a reason for this: is that that the driver exception may not always have a defined error code? (for example if the sql driver is not PDO or the SQL system doesn't support that, but in this case then the error code would be 0 would that be a problem?)



 Comments   
Comment by Matthieu Napoli [ 24/Oct/12 ]

Pull request here: https://github.com/doctrine/dbal/pull/221

Comment by Doctrine Bot [ 09/May/13 ]

A related Github Pull-Request [GH-221] was closed:
https://github.com/doctrine/dbal/pull/221

Generated at Tue Jul 29 19:11:42 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.