]> git.mxchange.org Git - friendica.git/blobdiff - include/dbstructure.php
Merge remote-tracking branch 'upstream/3.5.2rc' into 1705-dbclean-advanced
[friendica.git] / include / dbstructure.php
index e8f1738a7dee01c5f5ee3bc72167250ca03e2a9d..413395905d10aabb1658b98154d3afe3892b92c7 100644 (file)
@@ -1,12 +1,17 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once("boot.php");
 require_once("include/text.php");
 
 define('NEW_UPDATE_ROUTINE_VERSION', 1170);
 
+const DB_UPDATE_NOT_CHECKED = 0; // Database check wasn't executed before
+const DB_UPDATE_SUCCESSFUL = 1;  // Database check was successful
+const DB_UPDATE_FAILED = 2;      // Database check failed
+
 /*
  * Converts all tables from MyISAM to InnoDB
  */
@@ -398,6 +403,14 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
                                $sql3 .= ";";
                        }
 
+                       $field_list = '';
+                       if ($is_unique && $ignore == '') {
+                               foreach ($structure['fields'] AS $fieldname => $parameters) {
+                                       $field_list .= 'ANY_VALUE(`' . $fieldname . '`),';
+                               }
+                               $field_list = rtrim($field_list, ',');
+                       }
+
                        if ($verbose) {
                                // Ensure index conversion to unique removes duplicates
                                if ($is_unique) {
@@ -414,7 +427,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
                                        if ($ignore != "") {
                                                echo "SET session old_alter_table=0;\n";
                                        } else {
-                                               echo "INSERT INTO `".$temp_name."` SELECT * FROM `".$name."`".$group_by.";\n";
+                                               echo "INSERT INTO `".$temp_name."` SELECT ".$field_list." FROM `".$name."`".$group_by.";\n";
                                                echo "DROP TABLE `".$name."`;\n";
                                                echo "RENAME TABLE `".$temp_name."` TO `".$name."`;\n";
                                        }
@@ -445,7 +458,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
                                        if ($ignore != "") {
                                                $db->q("SET session old_alter_table=0;");
                                        } else {
-                                               $r = $db->q("INSERT INTO `".$temp_name."` SELECT * FROM `".$name."`".$group_by.";");
+                                               $r = $db->q("INSERT INTO `".$temp_name."` SELECT ".$field_list." FROM `".$name."`".$group_by.";");
                                                if (!dbm::is_result($r)) {
                                                        $errors .= print_update_error($db, $sql3);
                                                        return $errors;
@@ -471,6 +484,12 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
                Config::set('system', 'maintenance_reason', '');
        }
 
+       if ($errors) {
+               Config::set('system', 'dbupdate', DB_UPDATE_FAILED);
+       } else {
+               Config::set('system', 'dbupdate', DB_UPDATE_SUCCESSFUL);
+       }
+
        return $errors;
 }
 
@@ -799,7 +818,7 @@ function db_definition() {
        $database["conv"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
+                                       "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "recips" => array("type" => "text"),
                                        "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "creator" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1196,7 +1215,7 @@ function db_definition() {
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
                                        "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
-                                       "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
+                                       "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "from-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "from-photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "from-url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1737,7 +1756,7 @@ function dbstructure_run(&$argv, &$argc) {
        global $a, $db;
 
        if (is_null($a)) {
-               $a = new App;
+               $a = new App(dirname(__DIR__));
        }
 
        if (is_null($db)) {