diff --git a/resources/classes/schema.php b/resources/classes/schema.php index 441eda9195..03b8e08eed 100644 --- a/resources/classes/schema.php +++ b/resources/classes/schema.php @@ -641,18 +641,30 @@ //field type has changed else { switch ($field_type) { - case 'numeric': $using = $field_name . "::numeric"; + case 'numeric': + $sql_update .= "ALTER TABLE " . $table_name . " ALTER COLUMN " . $field_name . " TYPE " . $field_type . " USING " . $field_name . "::numeric;\n"; break; case 'timestamp': - case 'datetime': $using = $field_name . "::timestamp without time zone"; + $sql_update .= "ALTER TABLE " . $table_name . " ALTER COLUMN " . $field_name . " TYPE " . $field_type . " USING " . $field_name . "::timestamp with time zone;\n"; break; - case 'timestamptz': $using = $field_name . "::timestamp with time zone"; + case 'datetime': + $sql_update .= "ALTER TABLE " . $table_name . " ALTER COLUMN " . $field_name . " TYPE " . $field_type . " USING " . $field_name . "::timestamp without time zone;\n"; break; - case 'boolean': $using = $field_name . "::text::boolean"; + case 'timestamptz': + $sql_update .= "ALTER TABLE " . $table_name . " ALTER COLUMN " . $field_name . " TYPE " . $field_type . " USING " . $field_name . "::timestamp with time zone;\n"; + break; + case 'boolean': + if ($db_field_type == 'numeric') { + $sql_update .= "ALTER TABLE " . $table_name . " ALTER COLUMN " . $field_name . " TYPE text USING " . $field_name . "::text;\n"; + } + if ($db_field_type == 'text') { + $sql_update .= "UPDATE " . $table_name . " set " . $field_name . " = 'false' where " . $field_name . " = '';\n"; + } + $sql_update .= "ALTER TABLE " . $table_name . " ALTER COLUMN " . $field_name . " TYPE " . $field_type . " USING " . $field_name . "::boolean;\n"; break; default: unset($using); + $sql_update .= "ALTER TABLE " . $table_name . " ALTER COLUMN " . $field_name . " TYPE " . $field_type . "\n"; } - $sql_update .= "ALTER TABLE " . $table_name . " ALTER COLUMN " . $field_name . " TYPE " . $field_type . " " . ($using ? "USING " . $using : null) . ";\n"; } } }