public function handleField(AbstractField $field) { $name = $field->getName(); $defaultValue = $field->getDefaultValue(); $required = $field->isRequired(); $default = ''; if ($required) { $default = 'NOT NULL'; if ($defaultValue) { if ($defaultValue instanceof RawSQL) { $default .= ' DEFAULT ' . $defaultValue->get() . ''; } else { $default .= ' DEFAULT "' . $defaultValue . '"'; } } } else { if ($defaultValue instanceof RawSQL) { $default = $defaultValue->get(); } else { $default = 'DEFAULT NULL'; } } if (in_array($name, $this->primary_keys)) { $default = 'NOT NULL'; } switch ($field->getType()) { case 'primary': $type = 'INT(10) unsigned'; $default = 'NOT NULL'; if ($field->getAutoId()) { $default .= ' AUTO_INCREMENT'; } break; case 'text': case 'password': case 'email': $type = 'VARCHAR(' . $field->getSize() . ')'; break; case 'enum': $type = 'VARCHAR(32)'; break; case 'datetime': $type = 'TIMESTAMP'; break; case 'date': $type = 'DATE'; break; case 'time': $type = 'TIME'; break; case 'textarea': $type = 'TEXT'; break; case 'boolean': $type = 'TINYINT(1)'; break; case 'int': $type = 'INT'; break; case 'float': $type = 'DOUBLE'; break; case 'many2one': $type = 'INT(10) unsigned'; if (substr($name, -3) !== '_id') { return FALSE; } break; default: return FALSE; } $this->fields[$name] = '`' . $name . '` ' . $type . ' ' . $default; return TRUE; }