Commit 8fd22324 authored by Kim Hemsø Rasmussen's avatar Kim Hemsø Rasmussen

Implement ExceptionConverterDriver for drizzle_pdo_mysql

parent 2deaa6a5
......@@ -19,12 +19,15 @@
namespace Doctrine\DBAL\Driver\DrizzlePDOMySql;
use Doctrine\DBAL\Driver\ExceptionConverterDriver;
use Doctrine\DBAL\DBALException;
/**
* Drizzle driver using PDO MySql.
*
* @author Kim Hemsø Rasmussen <kimhemsoe@gmail.com>
*/
class Driver implements \Doctrine\DBAL\Driver
class Driver implements \Doctrine\DBAL\Driver, ExceptionConverterDriver
{
/**
* {@inheritdoc}
......@@ -105,6 +108,40 @@ class Driver implements \Doctrine\DBAL\Driver
*/
public function convertExceptionCode(\Exception $exception)
{
if ($exception->getCode() === "42000") {
return DBALException::ERROR_SYNTAX;
}
if ($exception->getCode() === "42S02") {
return DBALException::ERROR_UNKNOWN_TABLE;
}
if ($exception->getCode() === "42S01") {
return DBALException::ERROR_TABLE_ALREADY_EXISTS;
}
if ($exception->getCode() === "42S22") {
return DBALException::ERROR_BAD_FIELD_NAME;
}
if ($exception->getCode() === "23000") {
if (strpos($exception->getMessage(), 'Duplicate entry') !== false) {
return DBALException::ERROR_DUPLICATE_KEY;
}
if (strpos($exception->getMessage(), 'Cannot delete or update a parent row: a foreign key constraint fails') !== false) {
return DBALException::ERROR_FOREIGN_KEY_CONSTRAINT;
}
if (strpos($exception->getMessage(), ' cannot be null')) {
return DBALException::ERROR_NOT_NULL;
}
if (strpos($exception->getMessage(), 'in field list is ambiguous') !== false) {
return DBALException::ERROR_NON_UNIQUE_FIELD_NAME;
}
}
return 0;
}
}
......@@ -217,6 +217,10 @@ class ExceptionTest extends \Doctrine\Tests\DbalFunctionalTestCase
$this->markTestSkipped("Only skipped if platform is not sqlite");
}
if ($this->_conn->getDatabasePlatform()->getName() == 'drizzle') {
$this->markTestSkipped("Drizzle does not always support authentication");
}
if ($this->_conn->getDatabasePlatform()->getName() == 'postgresql' && isset($params['password'])) {
$this->markTestSkipped("Does not work on Travis");
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment