From 91db7a549cdd50ea06ca0b53fc20369ad088141b Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 19 Jun 2016 08:32:38 +0200 Subject: [PATCH] Optimised the amount of function for the item query --- include/conversation.php | 103 +++++++++++---------------------------- mod/community.php | 13 ++--- mod/notes.php | 15 +++--- 3 files changed, 40 insertions(+), 91 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index 411ffe388..ffd9d45e2 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -383,68 +383,10 @@ function item_query() { } /** - * @brief All fieldlists that are needed for the item query + * @brief List of all data fields that are needed for displaying items */ function item_fieldlists() { - return item_fieldlist().", ".zcontact_fieldlist().", ".contact_fieldlist(); -} - -/** - * @brief SQL join for contacts - */ -function item_joins() { - - return contact_join()." ".zcontact_join(); -} - -/** - * @brief Fieldlist for author and owner - */ -function zcontact_fieldlist() { - - return "`author`.`thumb` AS `author-thumb`, `owner`.`thumb` AS `owner-thumb`"; -} - -/** - * @brief Join for author and owner - */ -function zcontact_join() { - - return "LEFT JOIN `contact` AS `author` ON `author`.`id`=`item`.`author-id` - LEFT JOIN `contact` AS `owner` ON `owner`.`id`=`item`.`author-id`"; -} - -/** - * @brief List of all contact fields that are needed for the conversation function - */ -function contact_fieldlist() { - - return "`contact`.`network`, `contact`.`url`, `contact`.`name`, `contact`.`writable`, - `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`alias`"; -} - -/** - * @brief SQL condition for contacts - */ -function contact_condition() { - - return "NOT `contact`.`blocked` AND NOT `contact`.`pending`"; -} - -/** - * @brief SQL join for contacts - */ -function contact_join() { - - return "INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND ".contact_condition(); -} - -/** - * @brief List of all item fields that are needed for the conversation function - */ -function item_fieldlist() { - /* These Fields are not added below (yet). They are here to for bug search. `item`.`type`, @@ -475,21 +417,37 @@ These Fields are not added below (yet). They are here to for bug search. */ return "`item`.`author-link`, `item`.`author-name`, `item`.`author-avatar`, - `item`.`owner-link`, `item`.`owner-name`, `item`.`owner-avatar`, - `item`.`contact-id`, `item`.`uid`, `item`.`id`, `item`.`parent`, - `item`.`uri`, `item`.`thr-parent`, `item`.`parent-uri`, - `item`.`commented`, `item`.`created`, `item`.`edited`, - `item`.`verb`, `item`.`object-type`, `item`.`postopts`, `item`.`plink`, - `item`.`guid`, `item`.`wall`, `item`.`private`, `item`.`starred`, - `item`.`title`, `item`.`body`, `item`.`file`, `item`.`event-id`, - `item`.`location`, `item`.`coord`, `item`.`app`, - `item`.`rendered-hash`, `item`.`rendered-html`, - `item`.`allow_cid`, `item`.`allow_gid`, `item`.`deny_cid`, `item`.`deny_gid`, - `item`.`id` AS `item_id`, `item`.`network` AS `item_network`"; + `item`.`owner-link`, `item`.`owner-name`, `item`.`owner-avatar`, + `item`.`contact-id`, `item`.`uid`, `item`.`id`, `item`.`parent`, + `item`.`uri`, `item`.`thr-parent`, `item`.`parent-uri`, + `item`.`commented`, `item`.`created`, `item`.`edited`, + `item`.`verb`, `item`.`object-type`, `item`.`postopts`, `item`.`plink`, + `item`.`guid`, `item`.`wall`, `item`.`private`, `item`.`starred`, + `item`.`title`, `item`.`body`, `item`.`file`, `item`.`event-id`, + `item`.`location`, `item`.`coord`, `item`.`app`, + `item`.`rendered-hash`, `item`.`rendered-html`, + `item`.`allow_cid`, `item`.`allow_gid`, `item`.`deny_cid`, `item`.`deny_gid`, + `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, + + `author`.`thumb` AS `author-thumb`, `owner`.`thumb` AS `owner-thumb`, + + `contact`.`network`, `contact`.`url`, `contact`.`name`, `contact`.`writable`, + `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`alias`"; } /** - * @brief SQL condition for items + * @brief SQL join for contacts that are needed for displaying items + */ +function item_joins() { + + return "STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND + NOT `contact`.`blocked` AND NOT `contact`.`pending` + LEFT JOIN `contact` AS `author` ON `author`.`id`=`item`.`author-id` + LEFT JOIN `contact` AS `owner` ON `owner`.`id`=`item`.`author-id`"; +} + +/** + * @brief SQL condition for items that are needed for displaying items */ function item_condition() { @@ -923,8 +881,6 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { function best_link_url($item,&$sparkle,$ssl_state = false) { - $a = get_app(); - $best_url = ''; $sparkle = false; @@ -951,7 +907,6 @@ function best_link_url($item,&$sparkle,$ssl_state = false) { if(! function_exists('item_photo_menu')){ function item_photo_menu($item){ - $a = get_app(); $ssl_state = false; diff --git a/mod/community.php b/mod/community.php index 535e7dc3f..06a96c740 100644 --- a/mod/community.php +++ b/mod/community.php @@ -120,18 +120,17 @@ function community_getitems($start, $itemspage) { if (get_config('system','community_page_style') == CP_GLOBAL_COMMUNITY) return(community_getpublicitems($start, $itemspage)); - $r = q("SELECT %s, %s, `user`.`nickname` + $r = q("SELECT %s FROM `thread` FORCE INDEX (`wall_private_received`) INNER JOIN `user` ON `user`.`uid` = `thread`.`uid` AND NOT `user`.`hidewall` INNER JOIN `item` ON `item`.`id` = `thread`.`iid` AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' - INNER JOIN `contact` ON `contact`.`id` = `thread`.`contact-id` - AND %s AND `contact`.`self` + %s AND `contact`.`self` WHERE `thread`.`visible` AND NOT `thread`.`deleted` AND NOT `thread`.`moderated` AND NOT `thread`.`private` AND `thread`.`wall` ORDER BY `thread`.`received` DESC LIMIT %d, %d", - item_fieldlist(), contact_fieldlist(), contact_condition(), + item_fieldlists(), item_joins(), intval($start), intval($itemspage) ); @@ -141,14 +140,12 @@ function community_getitems($start, $itemspage) { function community_getpublicitems($start, $itemspage) { - $r = q("SELECT %s, %s, `author-name` AS `name`, `owner-avatar` AS `photo`, - `owner-link` AS `url`, `owner-avatar` AS `thumb` + $r = q("SELECT %s FROM `thread` INNER JOIN `item` ON `item`.`id` = `thread`.`iid` %s WHERE `thread`.`uid` = 0 ORDER BY `thread`.`created` DESC LIMIT %d, %d", - item_fieldlist(), zcontact_fieldlist(), - zcontact_join(), + item_fieldlists(), item_joins(), intval($start), intval($itemspage) ); diff --git a/mod/notes.php b/mod/notes.php index 24d541be5..a25d090ed 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -73,11 +73,11 @@ function notes_content(&$a,$update = false) { $sql_extra = " AND `allow_cid` = '<" . $a->contact['id'] . ">' "; $r = q("SELECT COUNT(*) AS `total` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND %s + FROM `item` %s WHERE %s AND `item`.`uid` = %d AND `item`.`type` = 'note' AND `contact`.`self` AND `item`.`id` = `item`.`parent` AND NOT `item`.`wall` $sql_extra ", - contact_condition(), item_condition(), + item_joins(), item_condition(), intval(local_user()) ); @@ -87,13 +87,12 @@ function notes_content(&$a,$update = false) { $a->set_pager_itemspage(40); } - $r = q("SELECT `item`.`id` AS `item_id` FROM `item` - LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND %s AND `contact`.`self` + $r = q("SELECT `item`.`id` AS `item_id` FROM `item` %s WHERE %s AND `item`.`uid` = %d AND `item`.`type` = 'note' AND `item`.`id` = `item`.`parent` AND NOT `item`.`wall` $sql_extra ORDER BY `item`.`created` DESC LIMIT %d ,%d ", - contact_condition(), item_condition(), + item_joins(), item_condition(), intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage']) @@ -108,13 +107,11 @@ function notes_content(&$a,$update = false) { $parents_arr[] = $rr['item_id']; $parents_str = implode(', ', $parents_arr); - $r = q("SELECT %s FROM `item` - LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND %s + $r = q("SELECT %s FROM `item` %s WHERE %s AND `item`.`uid` = %d AND `item`.`parent` IN (%s) $sql_extra ORDER BY `parent` DESC, `gravity` ASC, `item`.`id` ASC ", - item_fieldlist(), contact_fieldlist(), - contact_condition(), item_condition(), + item_fieldlists(), item_joins(), item_condition(), intval(local_user()), dbesc($parents_str) );