From f998aff6f1b0c57613be5979708fd7b1d9de29fd Mon Sep 17 00:00:00 2001 From: zYne Date: Fri, 29 Dec 2006 21:08:07 +0000 Subject: [PATCH] added Firebird exception class --- lib/Doctrine/DataDict/Firebird.php | 115 +++++++-------- lib/Doctrine/DataDict/Firebird/Exception.php | 34 +++++ lib/Doctrine/DataDict/Mysql.php | 144 +++++++++---------- 3 files changed, 164 insertions(+), 129 deletions(-) create mode 100644 lib/Doctrine/DataDict/Firebird/Exception.php diff --git a/lib/Doctrine/DataDict/Firebird.php b/lib/Doctrine/DataDict/Firebird.php index 0c46f321a..a08ef4b2d 100644 --- a/lib/Doctrine/DataDict/Firebird.php +++ b/lib/Doctrine/DataDict/Firebird.php @@ -107,71 +107,72 @@ class Doctrine_DataDict_Firebird extends Doctrine_DataDict $type = array(); $unsigned = $fixed = null; - $db_type = strtolower($field['type']); + $dbType = strtolower($field['type']); $field['field_sub_type'] = !empty($field['field_sub_type']) ? strtolower($field['field_sub_type']) : null; - switch ($db_type) { - case 'smallint': - case 'integer': - case 'int64': - //these may be 'numeric' or 'decimal' - if (isset($field['field_sub_type'])) { - $field['type'] = $field['field_sub_type']; - return $this->mapNativeDatatype($field); - } - case 'bigint': - case 'quad': - $type[] = 'integer'; - if ($length == '1') { - $type[] = 'boolean'; - if (preg_match('/^(is|has)/', $field['name'])) { - $type = array_reverse($type); + + switch ($dbType) { + case 'smallint': + case 'integer': + case 'int64': + //these may be 'numeric' or 'decimal' + if (isset($field['field_sub_type'])) { + $field['type'] = $field['field_sub_type']; + return $this->getPortableDeclaration($field); } - } - break; - case 'varchar': - $fixed = false; - case 'char': - case 'cstring': - $type[] = 'text'; - if ($length == '1') { - $type[] = 'boolean'; - if (preg_match('/^(is|has)/', $field['name'])) { - $type = array_reverse($type); + case 'bigint': + case 'quad': + $type[] = 'integer'; + if ($length == '1') { + $type[] = 'boolean'; + if (preg_match('/^(is|has)/', $field['name'])) { + $type = array_reverse($type); + } } - } - if ($fixed !== false) { - $fixed = true; - } break; - case 'date': - $type[] = 'date'; - $length = null; + case 'varchar': + $fixed = false; + case 'char': + case 'cstring': + $type[] = 'text'; + if ($length == '1') { + $type[] = 'boolean'; + if (preg_match('/^(is|has)/', $field['name'])) { + $type = array_reverse($type); + } + } + if ($fixed !== false) { + $fixed = true; + } break; - case 'timestamp': - $type[] = 'timestamp'; - $length = null; + case 'date': + $type[] = 'date'; + $length = null; break; - case 'time': - $type[] = 'time'; - $length = null; + case 'timestamp': + $type[] = 'timestamp'; + $length = null; break; - case 'float': - case 'double': - case 'double precision': - case 'd_float': - $type[] = 'float'; - break; - case 'decimal': - case 'numeric': - $type[] = 'decimal'; - break; - case 'blob': - $type[] = ($field['field_sub_type'] == 'text') ? 'clob' : 'blob'; - $length = null; - break; - default: - throw new Doctrine_DataDict_Firebird_Exception('unknown database attribute type: '.$db_type); + case 'time': + $type[] = 'time'; + $length = null; + break; + case 'float': + case 'double': + case 'double precision': + case 'd_float': + $type[] = 'float'; + break; + case 'decimal': + case 'numeric': + $type[] = 'decimal'; + break; + case 'blob': + $type[] = ($field['field_sub_type'] == 'text') ? 'clob' : 'blob'; + $length = null; + break; + default: + throw new Doctrine_DataDict_Firebird_Exception('unknown database attribute type: '.$dbType); } return array($type, $length, $unsigned, $fixed); diff --git a/lib/Doctrine/DataDict/Firebird/Exception.php b/lib/Doctrine/DataDict/Firebird/Exception.php new file mode 100644 index 000000000..6b8ca8ab2 --- /dev/null +++ b/lib/Doctrine/DataDict/Firebird/Exception.php @@ -0,0 +1,34 @@ +. + */ +Doctrine::autoload('Doctrine_DataDict_Exception'); +/** + * Doctrine_DataDict_Sqlite_Exception + * + * @package Doctrine + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision$ + * @author Konsta Vesterinen + */ +class Doctrine_DataDict_Firebird_Exception extends Doctrine_DataDict_Exception +{ } diff --git a/lib/Doctrine/DataDict/Mysql.php b/lib/Doctrine/DataDict/Mysql.php index 75cd92e53..1b226a565 100644 --- a/lib/Doctrine/DataDict/Mysql.php +++ b/lib/Doctrine/DataDict/Mysql.php @@ -134,82 +134,82 @@ class Doctrine_DataDict_Mysql extends Doctrine_DataDict public function getNativeDeclaration($field) { switch ($field['type']) { - case 'char': - $length = (! empty($field['length'])) ? $field['length'] : false; - - return $length ? 'CHAR('.$length.')' : 'CHAR(255)'; - case 'varchar': - case 'array': - case 'object': - case 'string': - - if ( ! isset($field['length'])) { - if (array_key_exists('default', $field)) { - $field['length'] = $this->conn->varchar_max_length; - } else { - $field['length'] = false; + case 'char': + $length = (! empty($field['length'])) ? $field['length'] : false; + + return $length ? 'CHAR('.$length.')' : 'CHAR(255)'; + case 'varchar': + case 'array': + case 'object': + case 'string': + + if ( ! isset($field['length'])) { + if (array_key_exists('default', $field)) { + $field['length'] = $this->conn->varchar_max_length; + } else { + $field['length'] = false; + } } - } - - $length = ($field['length'] < $this->conn->varchar_max_length) ? $field['length'] : false; - $fixed = (isset($field['fixed'])) ? $field['fixed'] : false; - - return $fixed ? ($length ? 'CHAR('.$length.')' : 'CHAR(255)') - : ($length ? 'VARCHAR(' . $length . ')' : 'TEXT'); - case 'clob': - if (!empty($field['length'])) { - $length = $field['length']; - if ($length <= 255) { - return 'TINYTEXT'; - } elseif ($length <= 65532) { - return 'TEXT'; - } elseif ($length <= 16777215) { - return 'MEDIUMTEXT'; + + $length = ($field['length'] < $this->conn->varchar_max_length) ? $field['length'] : false; + $fixed = (isset($field['fixed'])) ? $field['fixed'] : false; + + return $fixed ? ($length ? 'CHAR('.$length.')' : 'CHAR(255)') + : ($length ? 'VARCHAR(' . $length . ')' : 'TEXT'); + case 'clob': + if (!empty($field['length'])) { + $length = $field['length']; + if ($length <= 255) { + return 'TINYTEXT'; + } elseif ($length <= 65532) { + return 'TEXT'; + } elseif ($length <= 16777215) { + return 'MEDIUMTEXT'; + } } - } - return 'LONGTEXT'; - case 'blob': - if (!empty($field['length'])) { - $length = $field['length']; - if ($length <= 255) { - return 'TINYBLOB'; - } elseif ($length <= 65532) { - return 'BLOB'; - } elseif ($length <= 16777215) { - return 'MEDIUMBLOB'; + return 'LONGTEXT'; + case 'blob': + if (!empty($field['length'])) { + $length = $field['length']; + if ($length <= 255) { + return 'TINYBLOB'; + } elseif ($length <= 65532) { + return 'BLOB'; + } elseif ($length <= 16777215) { + return 'MEDIUMBLOB'; + } } - } - return 'LONGBLOB'; - case 'integer': - case 'enum': - if (!empty($field['length'])) { - $length = $field['length']; - if ($length <= 1) { - return 'TINYINT'; - } elseif ($length == 2) { - return 'SMALLINT'; - } elseif ($length == 3) { - return 'MEDIUMINT'; - } elseif ($length == 4) { - return 'INT'; - } elseif ($length > 4) { - return 'BIGINT'; + return 'LONGBLOB'; + case 'integer': + case 'enum': + if (!empty($field['length'])) { + $length = $field['length']; + if ($length <= 1) { + return 'TINYINT'; + } elseif ($length == 2) { + return 'SMALLINT'; + } elseif ($length == 3) { + return 'MEDIUMINT'; + } elseif ($length == 4) { + return 'INT'; + } elseif ($length > 4) { + return 'BIGINT'; + } } - } - return 'INT'; - case 'boolean': - return 'TINYINT(1)'; - case 'date': - return 'DATE'; - case 'time': - return 'TIME'; - case 'timestamp': - return 'DATETIME'; - case 'float': - return 'DOUBLE'; - case 'decimal': - $length = !empty($field['length']) ? $field['length'] : 18; - return 'DECIMAL(' . $length . ',' . 0 . ')'; //$this->dbh->options['decimal_places'] . ')'; + return 'INT'; + case 'boolean': + return 'TINYINT(1)'; + case 'date': + return 'DATE'; + case 'time': + return 'TIME'; + case 'timestamp': + return 'DATETIME'; + case 'float': + return 'DOUBLE'; + case 'decimal': + $length = !empty($field['length']) ? $field['length'] : 18; + return 'DECIMAL(' . $length . ',' . 0 . ')'; //$this->dbh->options['decimal_places'] . ')'; } return ''; }