1
0
mirror of synced 2024-12-13 14:56:01 +03:00

Doctrine_Connection_Sqlite_Exception : added portable error codes

This commit is contained in:
zYne 2006-11-10 22:29:20 +00:00
parent 1e464e98ea
commit 38a181690b

View File

@ -22,8 +22,53 @@ Doctrine::autoload('Doctrine_Connection_Exception');
/**
* Doctrine_Connection_Sqlite_Exception
*
* @package Doctrine ORM
* @url www.phpdoctrine.com
* @license LGPL
* @package Doctrine
* @url http://www.phpdoctrine.com
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @author Konsta Vesterinen
* @author Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
* @since 1.0
* @version $Id$
*/
class Doctrine_Connection_Sqlite_Exception extends Doctrine_Connection_Exception { }
class Doctrine_Connection_Sqlite_Exception extends Doctrine_Connection_Exception {
/**
* @var array $errorRegexps an array that is used for determining portable
* error code from a native database error message
*/
protected static $errorRegexps = array(
'/^no such table:/' => Doctrine::ERR_NOSUCHTABLE,
'/^no such index:/' => Doctrine::ERR_NOT_FOUND,
'/^(table|index) .* already exists$/' => Doctrine::ERR_ALREADY_EXISTS,
'/PRIMARY KEY must be unique/i' => Doctrine::ERR_CONSTRAINT,
'/is not unique/' => Doctrine::ERR_CONSTRAINT,
'/columns .* are not unique/i' => Doctrine::ERR_CONSTRAINT,
'/uniqueness constraint failed/' => Doctrine::ERR_CONSTRAINT,
'/may not be NULL/' => Doctrine::ERR_CONSTRAINT_NOT_NULL,
'/^no such column:/' => Doctrine::ERR_NOSUCHFIELD,
'/column not present in both tables/i' => Doctrine::ERR_NOSUCHFIELD,
'/^near ".*": syntax error$/' => Doctrine::ERR_SYNTAX,
'/[0-9]+ values for [0-9]+ columns/i' => Doctrine::ERR_VALUE_COUNT_ON_ROW,
);
/**
* This method checks if native error code/message can be
* converted into a portable code and then adds this
* portable error code to errorInfo array and returns the modified array
*
* the portable error code is added at the end of array
*
* @param array $errorInfo
* @since 1.0
* @return array
*/
public function processErrorInfo(array $errorInfo) {
foreach (self::$errorRegexps as $regexp => $code) {
if (preg_match($regexp, $errorInfo[2])) {
$errorInfo[3] = $code;
break;
}
}
return $errorInfo;
}
}