Index: MDB2/Driver/Datatype/mssql.php =================================================================== RCS file: /repository/pear/MDB2/MDB2/Driver/Datatype/mssql.php,v retrieving revision 1.26 diff -u -p -r1.26 mssql.php --- MDB2/Driver/Datatype/mssql.php 16 Jan 2006 12:55:55 -0000 1.26 +++ MDB2/Driver/Datatype/mssql.php 21 Feb 2006 05:23:30 -0000 @@ -202,6 +202,66 @@ class MDB2_Driver_Datatype_mssql extends { return ($value ? 1 : 0); } + + // }}} + // {{{ mapNativeDatatype() + + /** + * Maps a native array description of a field to a MDB2 datatype and length + * + * @param array $field native field description + * @return array containing the various possible types and the length + * @access public + */ + function mapNativeDatatype($field) + { + $db_type = preg_replace('/\d/','', strtolower($field['type']) ); + $length = $field['length']; + if ($length == '-1' && array_key_exists('atttypmod', $field)) { + $length = $field['atttypmod'] - 4; + } + if ((int)$length <= 0) { + $length = null; + } + $type = array(); + $unsigned = null; + switch ($db_type) { + case 'bit': + $type[0] = 'boolean'; + break; + case 'int': + $type[0] = 'integer'; + break; + case 'datetime': + $type[0] = 'timestamp'; + break; + case 'float': + case 'real': + case 'numeric': + $type[0] = 'float'; + break; + case 'decimal': + case 'money': + $type[0] = 'decimal'; + break; + case 'text': + case 'char': + case 'varchar': + $type[0] = 'text'; + break; + default: + $db =& $this->getDBInstance(); + if (PEAR::isError($db)) { + return $db; + } + + return $db->raiseError(MDB2_ERROR, null, null, + 'mapNativeDatatype: unknown database attribute type: '.$db_type); + } + + return array($type, $length, $unsigned); + } + // }}} } -?> \ No newline at end of file +?> Index: MDB2/Driver/Reverse/mssql.php =================================================================== RCS file: /repository/pear/MDB2/MDB2/Driver/Reverse/mssql.php,v retrieving revision 1.19 diff -u -p -r1.19 mssql.php --- MDB2/Driver/Reverse/mssql.php 10 Dec 2005 17:06:34 -0000 1.19 +++ MDB2/Driver/Reverse/mssql.php 21 Feb 2006 05:23:30 -0000 @@ -133,6 +133,7 @@ class MDB2_Driver_Reverse_mssql extends $res['num_fields'] = $count; } + $db->loadModule('Datatype', null, true); for ($i = 0; $i < $count; $i++) { $res[$i] = array( 'table' => $got_string ? $case_func($result) : '', @@ -143,8 +144,11 @@ class MDB2_Driver_Reverse_mssql extends 'flags' => $got_string ? $this->_mssql_field_flags($result, @mssql_field_name($id, $i)) : '', ); - // todo: implement $db->datatype->mapNativeDatatype(); - $res[$i]['mdb2type'] = $res[$i]['type']; + $mdb2type_info = $db->datatype->mapNativeDatatype($res[$i]); + if (PEAR::isError($mdb2type_info)) { + return $mdb2type_info; + } + $res[$i]['mdb2type'] = $mdb2type_info[0][0]; if ($mode & MDB2_TABLEINFO_ORDER) { $res['order'][$res[$i]['name']] = $i; }