From c95afa525e4a2e8ca97ac88b59f4a61473f8611d Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 12 Nov 2015 08:59:29 +0100 Subject: [PATCH] Some SQL queries were optimized to reduce the amount of write operations. --- include/api.php | 66 ++++++++++++++++++++++++++--------------------- include/items.php | 28 +++++++++++--------- 2 files changed, 53 insertions(+), 41 deletions(-) diff --git a/include/api.php b/include/api.php index 35ebaef034..873006ac24 100644 --- a/include/api.php +++ b/include/api.php @@ -285,7 +285,7 @@ * Unique contact to contact url. */ function api_unique_id_to_url($id){ - $r = q("SELECT url FROM unique_contacts WHERE id=%d LIMIT 1", + $r = q("SELECT `url` FROM `unique_contacts` WHERE `id`=%d LIMIT 1", intval($id)); if ($r) return ($r[0]["url"]); @@ -390,9 +390,9 @@ $r = array(); if ($url != "") - $r = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1", $url); + $r = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", $url); elseif ($nick != "") - $r = q("SELECT * FROM unique_contacts WHERE nick='%s' LIMIT 1", $nick); + $r = q("SELECT * FROM `unique_contacts` WHERE `nick`='%s' LIMIT 1", $nick); if ($r) { // If no nick where given, extract it from the address @@ -505,14 +505,14 @@ } // Fetching unique id - $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url']))); + $r = q("SELECT id FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url']))); // If not there, then add it if (count($r) == 0) { - q("INSERT INTO unique_contacts (url, name, nick, avatar) VALUES ('%s', '%s', '%s', '%s')", + q("INSERT INTO `unique_contacts` (`url`, `name`, `nick`, `avatar`) VALUES ('%s', '%s', '%s', '%s')", dbesc(normalise_link($uinfo[0]['url'])), dbesc($uinfo[0]['name']),dbesc($uinfo[0]['nick']), dbesc($uinfo[0]['micro'])); - $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url']))); + $r = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url']))); } $network_name = network_to_name($uinfo[0]['network'], $uinfo[0]['url']); @@ -552,36 +552,44 @@ function api_item_get_user(&$a, $item) { - $author = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1", + $author = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($item['author-link']))); if (count($author) == 0) { - q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')", - dbesc(normalise_link($item["author-link"])), dbesc($item["author-name"]), dbesc($item["author-avatar"])); + q("INSERT INTO `unique_contacts` (`url`, `name`, `avatar`) VALUES ('%s', '%s', '%s')", + dbesc(normalise_link($item["author-link"])), dbesc($item["author-name"]), dbesc($item["author-avatar"])); - $author = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", + $author = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($item['author-link']))); } else if ($item["author-link"].$item["author-name"] != $author[0]["url"].$author[0]["name"]) { - q("UPDATE unique_contacts SET name = '%s', avatar = '%s' WHERE (`name` != '%s' OR `avatar` != '%s') AND url = '%s'", - dbesc($item["author-name"]), dbesc($item["author-avatar"]), - dbesc($item["author-name"]), dbesc($item["author-avatar"]), - dbesc(normalise_link($item["author-link"]))); + $r = q("SELECT `id` FROM `unique_contacts` WHERE `name` = '%s' AND `avatar` = '%s' AND url = '%s'", + dbesc($item["author-name"]), dbesc($item["author-avatar"]), + dbesc(normalise_link($item["author-link"]))); + + if (!$r) + q("UPDATE `unique_contacts` SET `name` = '%s', `avatar` = '%s' WHERE `url` = '%s'", + dbesc($item["author-name"]), dbesc($item["author-avatar"]), + dbesc(normalise_link($item["author-link"]))); } - $owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", + $owner = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($item['owner-link']))); if (count($owner) == 0) { - q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')", - dbesc(normalise_link($item["owner-link"])), dbesc($item["owner-name"]), dbesc($item["owner-avatar"])); + q("INSERT INTO `unique_contacts` (`url`, `name`, `avatar`) VALUES ('%s', '%s', '%s')", + dbesc(normalise_link($item["owner-link"])), dbesc($item["owner-name"]), dbesc($item["owner-avatar"])); - $owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", + $owner = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($item['owner-link']))); } else if ($item["owner-link"].$item["owner-name"] != $owner[0]["url"].$owner[0]["name"]) { - q("UPDATE unique_contacts SET name = '%s', avatar = '%s' WHERE (`name` != '%s' OR `avatar` != '%s') AND url = '%s'", - dbesc($item["owner-name"]), dbesc($item["owner-avatar"]), - dbesc($item["owner-name"]), dbesc($item["owner-avatar"]), - dbesc(normalise_link($item["owner-link"]))); + $r = q("SELECT `id` FROM `unique_contacts` WHERE `name` = '%s' AND `avatar` = '%s' AND url = '%s'", + dbesc($item["owner-name"]), dbesc($item["owner-avatar"]), + dbesc(normalise_link($item["owner-link"]))); + + if (!$r) + q("UPDATE `unique_contacts` SET `name` = '%s', `avatar` = '%s' WHERE `url` = '%s'", + dbesc($item["owner-name"]), dbesc($item["owner-avatar"]), + dbesc(normalise_link($item["owner-link"]))); } // Comments in threads may appear as wall-to-wall postings. @@ -952,7 +960,7 @@ $in_reply_to_status_id= intval($lastwall['parent']); $in_reply_to_status_id_str = (string) intval($lastwall['parent']); - $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author']))); + $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author']))); if ($r) { if ($r[0]['nick'] == "") $r[0]['nick'] = api_get_nick($r[0]["url"]); @@ -1074,7 +1082,7 @@ $in_reply_to_status_id = intval($lastwall['parent']); $in_reply_to_status_id_str = (string) intval($lastwall['parent']); - $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author']))); + $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author']))); if ($r) { if ($r[0]['nick'] == "") $r[0]['nick'] = api_get_nick($r[0]["url"]); @@ -1135,9 +1143,9 @@ $userlist = array(); if (isset($_GET["q"])) { - $r = q("SELECT id FROM unique_contacts WHERE name='%s'", dbesc($_GET["q"])); + $r = q("SELECT id FROM `unique_contacts` WHERE `name`='%s'", dbesc($_GET["q"])); if (!count($r)) - $r = q("SELECT id FROM unique_contacts WHERE nick='%s'", dbesc($_GET["q"])); + $r = q("SELECT `id` FROM `unique_contacts` WHERE `nick`='%s'", dbesc($_GET["q"])); if (count($r)) { foreach ($r AS $user) { @@ -2180,7 +2188,7 @@ intval(api_user()), intval($in_reply_to_status_id)); if ($r) { - $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($r[0]['author-link']))); + $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($r[0]['author-link']))); if ($r) { if ($r[0]['nick'] == "") @@ -2439,7 +2447,7 @@ $stringify_ids = (x($_REQUEST,'stringify_ids')?$_REQUEST['stringify_ids']:false); - $r = q("SELECT unique_contacts.id FROM contact, unique_contacts WHERE contact.nurl = unique_contacts.url AND `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra", + $r = q("SELECT `unique_contact`.`id` FROM contact, `unique_contacts` WHERE contact.nurl = unique_contacts.url AND `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra", intval(api_user()) ); @@ -2887,7 +2895,7 @@ function api_get_nick($profile) { //} if ($nick != "") { - q("UPDATE unique_contacts SET nick = '%s' WHERE `nick` != '%s' AND url = '%s'", + q("UPDATE `unique_contacts` SET `nick` = '%s' WHERE `nick` != '%s' AND url = '%s'", dbesc($nick), dbesc($nick), dbesc(normalise_link($profile))); return($nick); } diff --git a/include/items.php b/include/items.php index ebda49e9ad..995d4c366a 100644 --- a/include/items.php +++ b/include/items.php @@ -2440,26 +2440,28 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) if ($name_updated > $contact_updated) $contact_updated = $name_updated; - $r = q("select * from contact where uid = %d and id = %d limit 1", + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `id` = %d LIMIT 1", intval($contact['uid']), intval($contact['id']) ); - $x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d", + $x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d AND `name` != '%s'", dbesc(notags(trim($new_name))), dbesc(datetime_convert()), intval($contact['uid']), - intval($contact['id']) + intval($contact['id']), + dbesc(notags(trim($new_name))) ); // do our best to update the name on content items - if(count($r)) { - q("update item set `author-name` = '%s' where `author-name` = '%s' and `author-link` = '%s' and uid = %d", + if(count($r) AND (notags(trim($new_name)) != $r[0]['name'])) { + q("UPDATE `item` SET `author-name` = '%s' WHERE `author-name` = '%s' AND `author-link` = '%s' AND `uid` = %d AND `author-name` != '%s'", dbesc(notags(trim($new_name))), dbesc($r[0]['name']), dbesc($r[0]['url']), - intval($contact['uid']) + intval($contact['uid']), + dbesc(notags(trim($new_name))) ); } } @@ -3178,26 +3180,28 @@ function local_delivery($importer,$data) { if ($name_updated > $contact_updated) $contact_updated = $name_updated; - $r = q("select * from contact where uid = %d and id = %d limit 1", + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `id` = %d LIMIT 1", intval($importer['importer_uid']), intval($importer['id']) ); - $x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d", + $x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d AND `name` != '%s'", dbesc(notags(trim($new_name))), dbesc(datetime_convert()), intval($importer['importer_uid']), - intval($importer['id']) + intval($importer['id']), + dbesc(notags(trim($new_name))) ); // do our best to update the name on content items - if(count($r)) { - q("update item set `author-name` = '%s' where `author-name` = '%s' and `author-link` = '%s' and uid = %d", + if(count($r) AND (notags(trim($new_name)) != $r[0]['name'])) { + q("UPDATE `item` SET `author-name` = '%s' WHERE `author-name` = '%s' AND `author-link` = '%s' AND `uid` = %d AND `author-name` != '%s'", dbesc(notags(trim($new_name))), dbesc($r[0]['name']), dbesc($r[0]['url']), - intval($importer['importer_uid']) + intval($importer['importer_uid']), + dbesc(notags(trim($new_name))) ); } }