From 405b6cf4efe15a28872dd14abd6a7a7e53166c49 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 21 Oct 2017 14:29:55 +0000
Subject: [PATCH] DBStructure: Better handling of temp table

---
 include/dbstructure.php | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/include/dbstructure.php b/include/dbstructure.php
index fd2192665c..2e47111c2e 100644
--- a/include/dbstructure.php
+++ b/include/dbstructure.php
@@ -412,17 +412,18 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
 
 			if ($verbose) {
 				// Ensure index conversion to unique removes duplicates
-				if ($is_unique) {
+				if ($is_unique && ($temp_name != $name)) {
 					if ($ignore != "") {
 						echo "SET session old_alter_table=1;\n";
 					} else {
+						echo "DROP TABLE IF EXISTS `".$temp_name."`;\n";
 						echo "CREATE TABLE `".$temp_name."` LIKE `".$name."`;\n";
 					}
 				}
 
 				echo $sql3."\n";
 
-				if ($is_unique) {
+				if ($is_unique && ($temp_name != $name)) {
 					if ($ignore != "") {
 						echo "SET session old_alter_table=0;\n";
 					} else {
@@ -437,10 +438,16 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
 				Config::set('system', 'maintenance_reason', sprintf(t('%s: updating %s table.'), dbm::date().' '.date('e'), $name));
 
 				// Ensure index conversion to unique removes duplicates
-				if ($is_unique) {
+				if ($is_unique && ($temp_name != $name)) {
 					if ($ignore != "") {
 						dba::e("SET session old_alter_table=1;");
 					} else {
+						dba::e("DROP TABLE IF EXISTS `".$temp_name."`;");
+						if (!dbm::is_result($r)) {
+							$errors .= print_update_error($sql3);
+							return $errors;
+						}
+
 						$r = dba::e("CREATE TABLE `".$temp_name."` LIKE `".$name."`;");
 						if (!dbm::is_result($r)) {
 							$errors .= print_update_error($sql3);
@@ -453,7 +460,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
 				if (!dbm::is_result($r)) {
 					$errors .= print_update_error($sql3);
 				}
-				if ($is_unique) {
+				if ($is_unique && ($temp_name != $name)) {
 					if ($ignore != "") {
 						dba::e("SET session old_alter_table=0;");
 					} else {
-- 
2.39.5