From de446d2e73f811f4c6ccc715ca83dd630c79d6fe Mon Sep 17 00:00:00 2001 From: zYne Date: Fri, 10 Nov 2006 22:34:16 +0000 Subject: [PATCH] added portable error codes to mysql driver exception --- lib/Doctrine/Connection/Mysql/Exception.php | 60 +++++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/Connection/Mysql/Exception.php b/lib/Doctrine/Connection/Mysql/Exception.php index e97f057da..ff3540460 100644 --- a/lib/Doctrine/Connection/Mysql/Exception.php +++ b/lib/Doctrine/Connection/Mysql/Exception.php @@ -22,8 +22,60 @@ Doctrine::autoload('Doctrine_Connection_Exception'); /** * Doctrine_Connection_Mysql_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 (PEAR MDB2 library) + * @since 1.0 + * @version $Id$ */ -class Doctrine_Connection_Mysql_Exception extends Doctrine_Connection_Exception { } +class Doctrine_Connection_Mysql_Exception extends Doctrine_Connection_Exception { + /** + * @var array $errorRegexps an array that is used for determining portable + * error code from a native database error code + */ + protected static $errorCodeMap = array( + 1004 => Doctrine_Db::ERR_CANNOT_CREATE, + 1005 => Doctrine_Db::ERR_CANNOT_CREATE, + 1006 => Doctrine_Db::ERR_CANNOT_CREATE, + 1007 => Doctrine_Db::ERR_ALREADY_EXISTS, + 1008 => Doctrine_Db::ERR_CANNOT_DROP, + 1022 => Doctrine_Db::ERR_ALREADY_EXISTS, + 1044 => Doctrine_Db::ERR_ACCESS_VIOLATION, + 1046 => Doctrine_Db::ERR_NODBSELECTED, + 1048 => Doctrine_Db::ERR_CONSTRAINT, + 1049 => Doctrine_Db::ERR_NOSUCHDB, + 1050 => Doctrine_Db::ERR_ALREADY_EXISTS, + 1051 => Doctrine_Db::ERR_NOSUCHTABLE, + 1054 => Doctrine_Db::ERR_NOSUCHFIELD, + 1061 => Doctrine_Db::ERR_ALREADY_EXISTS, + 1062 => Doctrine_Db::ERR_ALREADY_EXISTS, + 1064 => Doctrine_Db::ERR_SYNTAX, + 1091 => Doctrine_Db::ERR_NOT_FOUND, + 1100 => Doctrine_Db::ERR_NOT_LOCKED, + 1136 => Doctrine_Db::ERR_VALUE_COUNT_ON_ROW, + 1142 => Doctrine_Db::ERR_ACCESS_VIOLATION, + 1146 => Doctrine_Db::ERR_NOSUCHTABLE, + 1216 => Doctrine_Db::ERR_CONSTRAINT, + 1217 => Doctrine_Db::ERR_CONSTRAINT, + ); + /** + * 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 error info array + * @since 1.0 + * @return array + */ + public function processErrorInfo(array $errorInfo) { + $code = $errorInfo[1]; + if(isset(self::$errorCodeMap[$code])) + $errorInfo[3] = self::$errorCodeMap[$code]; + + return $errorInfo; + } +}