浏览代码

Upgrade > Schema: Update schema class to use casting for numeric changes.

fusionate 4 年之前
父节点
当前提交
11e20142e8
共有 1 个文件被更改,包括 14 次插入30 次删除
  1. 14 30
      resources/classes/schema.php

+ 14 - 30
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)."<br>";
-																				$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";
 																	}
 																}
 															}