Browse Source

Schema Class: Fix Data Type check to work properly.

Nate 5 years ago
parent
commit
2b46a806a1
1 changed files with 24 additions and 9 deletions
  1. 24 9
      resources/classes/schema.php

+ 24 - 9
resources/classes/schema.php

@@ -677,22 +677,37 @@ if (!class_exists('schema')) {
 																	$sql_update .= "AS uuid);\n";
 																	$sql_update .= "AS uuid);\n";
 																}
 																}
 																else {
 																else {
-																	if ($db_field_type = "integer" && strtolower($field_type) == "serial") {
+																	if ($db_field_type == "integer" && strtolower($field_type) == "serial") {
 																		//field type has not changed
 																		//field type has not changed
-																	} elseif ($db_field_type = "timestamp without time zone" && strtolower($field_type) == "timestamp") {
+																	}
+																	else if ($db_field_type == "timestamp without time zone" && strtolower($field_type) == "timestamp") {
 																		//field type has not changed
 																		//field type has not changed
-																	} elseif ($db_field_type = "timestamp without time zone" && strtolower($field_type) == "datetime") {
+																	}
+																	else if ($db_field_type == "timestamp without time zone" && strtolower($field_type) == "datetime") {
 																		//field type has not changed
 																		//field type has not changed
-																	} elseif ($db_field_type = "timestamp with time zone" && strtolower($field_type) == "timestamptz") {
+																	}
+																	else if ($db_field_type == "timestamp with time zone" && strtolower($field_type) == "timestamptz") {
 																		//field type has not changed
 																		//field type has not changed
-																	} elseif ($db_field_type = "integer" && strtolower($field_type) == "numeric") {
+																	}
+																	else if ($db_field_type == "integer" && strtolower($field_type) == "numeric") {
 																		//field type has not changed
 																		//field type has not changed
-																	} elseif ($db_field_type = "character" && strtolower($field_type) == "char") {
+																	}
+																	else if ($db_field_type == "character" && strtolower($field_type) == "char") {
 																		//field type has not changed
 																		//field type has not changed
 																	}
 																	}
 																	else {
 																	else {
-																		//$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";
+																		switch ($field_type) {
+																			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;
+																			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";
+																		}
 																	}
 																	}
 																}
 																}
 															}
 															}
@@ -701,7 +716,7 @@ if (!class_exists('schema')) {
 																if ($type[0] == $field_type) {
 																if ($type[0] == $field_type) {
 																	//do nothing
 																	//do nothing
 																}
 																}
-																elseif ($field_type == "numeric" && $type[0] == "decimal") {
+																else if ($field_type == "numeric" && $type[0] == "decimal") {
 																	//do nothing
 																	//do nothing
 																}
 																}
 																else {
 																else {