Commit f8b46957 authored by dazz's avatar dazz Committed by Benjamin Eberlei

[DBAL-407] Implement error detection on duplicate table for mysql and sqlite

parent 94089fd9
...@@ -23,6 +23,7 @@ class DBALException extends \Exception ...@@ -23,6 +23,7 @@ class DBALException extends \Exception
{ {
const ERROR_DUPLICATE_KEY = 1; const ERROR_DUPLICATE_KEY = 1;
const ERROR_UNKNOWN_TABLE = 2; const ERROR_UNKNOWN_TABLE = 2;
const ERROR_TABLE_ALREADY_EXISTS = 3;
/** /**
* @param string $method * @param string $method
......
...@@ -120,6 +120,8 @@ class Driver implements \Doctrine\DBAL\Driver ...@@ -120,6 +120,8 @@ class Driver implements \Doctrine\DBAL\Driver
return DBALException::ERROR_DUPLICATE_KEY; return DBALException::ERROR_DUPLICATE_KEY;
case '42S02': case '42S02':
return DBALException::ERROR_UNKNOWN_TABLE; return DBALException::ERROR_UNKNOWN_TABLE;
case '42S01':
return DBALException::ERROR_TABLE_ALREADY_EXISTS;
} }
return 0; return 0;
......
...@@ -126,6 +126,10 @@ class Driver implements \Doctrine\DBAL\Driver ...@@ -126,6 +126,10 @@ class Driver implements \Doctrine\DBAL\Driver
if (strpos($exception->getMessage(), 'no such table:') !== false) { if (strpos($exception->getMessage(), 'no such table:') !== false) {
return DBALException::ERROR_UNKNOWN_TABLE; return DBALException::ERROR_UNKNOWN_TABLE;
} }
if (strpos($exception->getMessage(), 'already exists') !== false) {
return DBALException::ERROR_TABLE_ALREADY_EXISTS;
}
} }
return 0; return 0;
......
...@@ -31,5 +31,20 @@ class ExceptionTest extends \Doctrine\Tests\DbalFunctionalTestCase ...@@ -31,5 +31,20 @@ class ExceptionTest extends \Doctrine\Tests\DbalFunctionalTestCase
$this->setExpectedException('\Doctrine\DBAL\DBALException', null, DBALException::ERROR_UNKNOWN_TABLE); $this->setExpectedException('\Doctrine\DBAL\DBALException', null, DBALException::ERROR_UNKNOWN_TABLE);
$this->_conn->executeQuery($sql); $this->_conn->executeQuery($sql);
} }
public function testTableAlreadyExists()
{
$table = new \Doctrine\DBAL\Schema\Table("duplicatekey_table");
$table->addColumn('id', 'integer', array());
$table->setPrimaryKey(array('id'));
$this->setExpectedException('\Doctrine\DBAL\DBALException', null, DBALException::ERROR_TABLE_ALREADY_EXISTS);
foreach ($this->_conn->getDatabasePlatform()->getCreateTableSQL($table) AS $sql) {
$this->_conn->executeQuery($sql);
}
foreach ($this->_conn->getDatabasePlatform()->getCreateTableSQL($table) AS $sql) {
$this->_conn->executeQuery($sql);
}
}
} }
\ No newline at end of file
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