public function change_column($table_name, $column_name, $type, $options = array())
{
if (empty($table_name)) {
throw new Ruckusing_Exception("Missing table name parameter", Ruckusing_Exception::INVALID_ARGUMENT);
}
if (empty($column_name)) {
throw new Ruckusing_Exception("Missing original column name parameter", Ruckusing_Exception::INVALID_ARGUMENT);
}
if (empty($type)) {
throw new Ruckusing_Exception("Missing type parameter", Ruckusing_Exception::INVALID_ARGUMENT);
}
$column_info = $this->column_info($table_name, $column_name);
//default types
if (!array_key_exists('limit', $options)) {
$options['limit'] = null;
}
if (!array_key_exists('precision', $options)) {
$options['precision'] = null;
}
if (!array_key_exists('scale', $options)) {
$options['scale'] = null;
}
$sql = sprintf("ALTER TABLE %s ALTER COLUMN %s TYPE %s", $this->quote_table_name($table_name), $this->quote_column_name($column_name), $this->type_to_sql($type, $options));
$sql .= $this->add_column_options($type, $options, true);
if (array_key_exists('default', $options)) {
$this->change_column_default($table_name, $column_name, $options['default']);
}
if (array_key_exists('null', $options)) {
$default = array_key_exists('default', $options) ? $options['default'] : null;
$this->change_column_null($table_name, $column_name, $options['null'], $default);
}
return $this->execute_ddl($sql);
}