diff --git a/database.sql b/database.sql index c8010e1e2..73547b305 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 3.5.2-dev (Asparagus) --- DB_UPDATE_VERSION 1220 +-- DB_UPDATE_VERSION 1221 -- ------------------------------------------ diff --git a/include/dba.php b/include/dba.php index 8686760ea..93df40b40 100644 --- a/include/dba.php +++ b/include/dba.php @@ -753,6 +753,32 @@ class dba { return self::e($sql, $param); } + /** + * @brief Updates rows + * + * @param string $table Table name + * @param array $fields contains the fields that are updated + * @param array $condition condition array with the key values + * + * @return boolean was the update successfull? + */ + static public function update($table, $fields, $condition) { + + $sql = "UPDATE `".self::$dbo->escape($table)."` SET `". + implode("` = ?, `", array_keys($fields))."` = ? WHERE `". + implode("` = ? AND `", array_keys($condition))."` = ?"; + + $params = array(); + foreach ($fields AS $value) { + $params[] = $value; + } + foreach ($condition AS $value) { + $params[] = $value; + } + + self::e($sql, $params); + } + /** * @brief Closes the current statement * diff --git a/include/dbstructure.php b/include/dbstructure.php index 156d3eb64..98a4a9c30 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -820,7 +820,7 @@ function db_definition() { "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( - "PRIMARY" => array("item-uri", "protocol"), + "PRIMARY" => array("item-uri"), "conversation-uri" => array("conversation-uri"), ) ); diff --git a/include/items.php b/include/items.php index dcc99e8bd..98b40f1ee 100644 --- a/include/items.php +++ b/include/items.php @@ -716,7 +716,15 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f $conversation['source'] = $arr['source']; } - dba::insert('conversation', $conversation); + $conv = dba::fetch_first("SELECT `protocol` FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']); + if (dbm::is_result($conv)) { + // Replace the conversation entry when the new one is better + if (($conv['protocol'] == 0) OR ($conv['protocol'] > $conversation['protocol'])) { + dba::update('conversation', $conversation, array('item-uri' => $conversation['item-uri'])); + } + } else { + dba::insert('conversation', $conversation); + } } unset($arr['conversation-uri']);