[Solar-talk] Solar_Sql function _getTypeSizeScope returns incorrect type

Pierre Oztel pierre.oztel at gmail.com
Mon Jul 2 13:14:00 CDT 2007


The function Solar_Sql::_getSolarType returns incorrect types for PDO mysql
driver.

I tested it with this schema:

CREATE TABLE `bookmark` (
  `id` int(11) NOT NULL auto_increment,
  `url` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` mediumtext,
  `tag` varchar(255) default NULL,
  `created` datetime NOT NULL,
  `updated` datetime NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

-- 
-- Dumping data for table `bookmark`
-- 

INSERT INTO `bookmark` (`id`, `url`, `name`, `description`, `tag`,
`created`, `updated`) VALUES
(1, 'http1', 'name1', 'descr1', 'tag1', '2007-06-23 17:28:52', '2007-06-23
17:28:52'),
(2, 'http2', 'name2', 'descr2', 'tag2', '2007-06-23 17:28:52', '2007-06-23
17:28:52'),
(3, 'http3', 'name3', 'descr3', 'tag3', '2007-06-23 17:28:52', '2007-06-23
17:28:52'),
(4, 'http4', 'name4', 'descr4', 'tag4', '2007-06-23 17:28:52', '2007-06-23
17:28:52'),
(5, 'http5', 'name5', 'descr5', 'tag5', '2007-06-23 17:28:52', '2007-06-23
17:28:52');


Solar_Sql::fetchTableCols() return the following:


*array*
  'id' =>
    *array*
      'name' => string 'id' *(length=2)*
      'type' => string 'int' *(length=3)*
      'size' => string '11' *(length=2)*
      'scope' => null
      'default' => null
      'require' => boolean true
      'primary' => boolean true
      'autoinc' => boolean true
  'url' =>
    *array*
      'name' => string 'url' *(length=3)*
      'type' => string 'varchar' *(length=7)*
      'size' => string '255' *(length=3)*
      'scope' => null
      'default' => string '' *(length=0)*
      'require' => boolean true
      'primary' => boolean false
      'autoinc' => boolean false
  'name' =>
    *array*
      'name' => string 'name' *(length=4)*
      'type' => string 'varchar' *(length=7)*
      'size' => string '255' *(length=3)*
      'scope' => null
      'default' => string '' *(length=0)*
      'require' => boolean true
      'primary' => boolean false
      'autoinc' => boolean false
  'description' =>
    *array*
      'name' => string 'description' *(length=11)*
      'type' => string 'mediumtext' *(length=10)*
      'size' => null
      'scope' => null
      'default' => null
      'require' => boolean false
      'primary' => boolean false
      'autoinc' => boolean false
  'tag' =>
    *array*
      'name' => string 'tag' *(length=3)*
      'type' => string 'varchar' *(length=7)*
      'size' => string '255' *(length=3)*
      'scope' => null
      'default' => null
      'require' => boolean false
      'primary' => boolean false
      'autoinc' => boolean false
  'created' =>
    *array*
      'name' => string 'created' *(length=7)*
      'type' => string 'integer' *(length=7)*
      'size' => null
      'scope' => null
      'default' => string '' *(length=0)*
      'require' => boolean true
      'primary' => boolean false
      'autoinc' => boolean false
  'updated' =>
    *array*
      'name' => string 'updated' *(length=7)*
      'type' => string 'integer' *(length=7)*
      'size' => null
      'scope' => null
      'default' => string '' *(length=0)*
      'require' => boolean true
      'primary' => boolean false
      'autoinc' => boolean false



As such declared 'datetime' fields are recognized as 'integer';


A little modification in the getSolarType makes it works:

---
function _getSolarType() {
if(array_key_exists($type, $this->_describe)) {
 $type = $this->_describe[$type];
}
return $type;
}
---
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman-mail3.webfaction.com/pipermail/solar-talk/attachments/20070702/d4543e28/attachment.html


More information about the Solar-talk mailing list