Issue 9968: Avoid blocking update calls
authorMichael <heluecht@pirati.ca>
Sat, 6 Mar 2021 16:52:36 +0000 (16:52 +0000)
committerMichael <heluecht@pirati.ca>
Sat, 6 Mar 2021 16:52:36 +0000 (16:52 +0000)
database.sql
src/Model/Contact.php
static/dbstructure.config.php

index 7e1d996..b033d40 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 2021.03-rc (Red Hot Poker)
--- DB_UPDATE_VERSION 1408
+-- DB_UPDATE_VERSION 1409
 -- ------------------------------------------
 
 
@@ -186,6 +186,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
         INDEX `blocked_uid` (`blocked`,`uid`),
         INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`,`poll`(64),`archive`),
         INDEX `uid_network_batch` (`uid`,`network`,`batch`(64)),
+        INDEX `batch_contact-type` (`batch`(64),`contact-type`),
         INDEX `addr_uid` (`addr`(128),`uid`),
         INDEX `nurl_uid` (`nurl`(128),`uid`),
         INDEX `nick_uid` (`nick`(128),`uid`),
index 3b65f2a..e4cc882 100644 (file)
@@ -855,7 +855,9 @@ class Contact
                if (!empty($contact['batch']) && !empty($contact['term-date']) && ($contact['term-date'] > DBA::NULL_DATETIME)) {
                        $fields = ['failed' => false, 'term-date' => DBA::NULL_DATETIME, 'archive' => false];
                        $condition = ['uid' => 0, 'network' => Protocol::FEDERATED, 'batch' => $contact['batch'], 'contact-type' => self::TYPE_RELAY];
-                       DBA::update('contact', $fields, $condition);
+                       if (!DBA::exists('contact', array_merge($condition, $fields))) {
+                               DBA::update('contact', $fields, $condition);
+                       }
                }
 
                $condition = ['`id` = ? AND (`term-date` > ? OR `archive`)', $contact['id'], DBA::NULL_DATETIME];
index 2af001e..91356a0 100644 (file)
@@ -55,7 +55,7 @@
 use Friendica\Database\DBA;
 
 if (!defined('DB_UPDATE_VERSION')) {
-       define('DB_UPDATE_VERSION', 1408);
+       define('DB_UPDATE_VERSION', 1409);
 }
 
 return [
@@ -245,6 +245,7 @@ return [
                        "blocked_uid" => ["blocked", "uid"],
                        "uid_rel_network_poll" => ["uid", "rel", "network", "poll(64)", "archive"],
                        "uid_network_batch" => ["uid", "network", "batch(64)"],
+                       "batch_contact-type" => ["batch(64)", "contact-type"],
                        "addr_uid" => ["addr(128)", "uid"],
                        "nurl_uid" => ["nurl(128)", "uid"],
                        "nick_uid" => ["nick(128)", "uid"],