diff --git a/resources/classes/schema.php b/resources/classes/schema.php index 8f907df2a6..a10a6be5f1 100644 --- a/resources/classes/schema.php +++ b/resources/classes/schema.php @@ -689,40 +689,24 @@ if (!class_exists('schema')) { $sql_update .= "AS uuid);\n"; } else { - if ($db_field_type == "integer" && strtolower($field_type) == "serial") { - //field type has not changed - } - else if ($db_field_type == "timestamp without time zone" && strtolower($field_type) == "timestamp") { - //field type has not changed - } - else if ($db_field_type == "timestamp without time zone" && strtolower($field_type) == "datetime") { - //field type has not changed - } - else if ($db_field_type == "timestamp with time zone" && strtolower($field_type) == "timestamptz") { - //field type has not changed - } - else if ($db_field_type == "integer" && strtolower($field_type) == "numeric") { - //field type has not changed - } - else if ($db_field_type == "character" && strtolower($field_type) == "char") { - //field type has not changed - } + //field type has not changed + if ($db_field_type == "integer" && strtolower($field_type) == "serial") { } + else if ($db_field_type == "timestamp without time zone" && strtolower($field_type) == "timestamp") { } + else if ($db_field_type == "timestamp without time zone" && strtolower($field_type) == "datetime") { } + else if ($db_field_type == "timestamp with time zone" && strtolower($field_type) == "timestamptz") { } + else if ($db_field_type == "integer" && strtolower($field_type) == "numeric") { } + else if ($db_field_type == "character" && strtolower($field_type) == "char") { } + //field type has changed else { switch ($field_type) { + case 'numeric': $using = $field_name."::numeric"; break; case 'timestamp': - 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 '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': - $sql_update .= "ALTER TABLE ".$table_name." ALTER COLUMN ".$field_name." TYPE ".$field_type." USING ".$field_name."::boolean;\n"; - break; - default: - //$sql_update .= "-- $db_type, $db_name, $table_name, $field_name ".db_column_data_type ($db_type, $db_name, $table_name, $field_name)."
"; - $sql_update .= "ALTER TABLE ".$table_name." ALTER COLUMN ".$field_name." TYPE ".$field_type.";\n"; + case 'datetime': $using = $field_name."::timestamp without time zone"; break; + case 'timestamptz': $using = $field_name."::timestamp with time zone"; break; + case 'boolean': $using = $field_name."::boolean"; break; + default: unset($using); } + $sql_update .= "ALTER TABLE ".$table_name." ALTER COLUMN ".$field_name." TYPE ".$field_type." ".($using ? "USING ".$using : null).";\n"; } } }