From 3972fe62fe8afb3791e9d6526e7665501a577b81 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 8 Oct 2021 04:10:45 +0000 Subject: [PATCH 1/5] More replaced "q" calls --- include/api.php | 22 ++++++------ mod/fbrowser.php | 24 ++++++------- mod/message.php | 8 ++--- mod/photos.php | 58 +++++++++++++++--------------- mod/ping.php | 34 +++++++++--------- src/Model/Photo.php | 24 ++++++------- src/Module/Settings/UserExport.php | 29 ++++++++------- 7 files changed, 99 insertions(+), 100 deletions(-) diff --git a/include/api.php b/include/api.php index b6f2ab889f..3820ccd0b9 100644 --- a/include/api.php +++ b/include/api.php @@ -3915,13 +3915,13 @@ function api_direct_messages_box($type, $box, $verbose) $sql_extra .= " AND `contact`.`nick` = '" . DBA::escape($screen_name). "'"; } - $r = q( - "SELECT `mail`.*, `contact`.`nurl` AS `contact-url` FROM `mail`,`contact` WHERE `mail`.`contact-id` = `contact`.`id` AND `mail`.`uid`=%d AND $sql_extra AND `mail`.`id` > %d ORDER BY `mail`.`id` DESC LIMIT %d,%d", - intval(api_user()), - intval($since_id), - intval($start), - intval($count) - ); + $r = DBA::toArray(DBA::p( + "SELECT `mail`.*, `contact`.`nurl` AS `contact-url` FROM `mail`,`contact` WHERE `mail`.`contact-id` = `contact`.`id` AND `mail`.`uid` = ? AND $sql_extra AND `mail`.`id` > ? ORDER BY `mail`.`id` DESC LIMIT ?,?", + api_user(), + $since_id, + $start, + $count + )); if ($verbose == "true" && !DBA::isResult($r)) { $answer = ['result' => 'error', 'message' => 'no mails available']; return api_format_data("direct_messages_all", $type, ['$result' => $answer]); @@ -4123,12 +4123,12 @@ function api_fr_photos_list($type) if (api_user() === false) { throw new ForbiddenException(); } - $r = q( + $r = DBA::toArray(DBA::p( "SELECT `resource-id`, MAX(scale) AS `scale`, `album`, `filename`, `type`, MAX(`created`) AS `created`, MAX(`edited`) AS `edited`, MAX(`desc`) AS `desc` FROM `photo` - WHERE `uid` = %d AND `album` != 'Contact Photos' GROUP BY `resource-id`, `album`, `filename`, `type`", - intval(local_user()) - ); + WHERE `uid` = ? AND NOT `album` IN (?, ?) GROUP BY `resource-id`, `album`, `filename`, `type`", + local_user(), Photo::CONTACT_PHOTOS, DI::l10n()->t(Photo::CONTACT_PHOTOS) + )); $typetoext = [ 'image/jpeg' => 'jpg', 'image/png' => 'png', diff --git a/mod/fbrowser.php b/mod/fbrowser.php index 45e960fece..c68b44a1ed 100644 --- a/mod/fbrowser.php +++ b/mod/fbrowser.php @@ -45,12 +45,12 @@ function fbrowser_content(App $a) $sql_extra = ""; $sql_extra2 = " ORDER BY created DESC LIMIT 0, 10"; - if (DI::args()->getArgc()==2) { - $photos = q("SELECT distinct(`album`) AS `album` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' ", - intval(local_user()), - DBA::escape(Photo::CONTACT_PHOTOS), - DBA::escape(DI::l10n()->t(Photo::CONTACT_PHOTOS)) - ); + if (DI::args()->getArgc() == 2) { + $photos = DBA::toArray(DBA::p("SELECT distinct(`album`) AS `album` FROM `photo` WHERE `uid` = ? AND NOT `album` IN (?, ?)", + local_user(), + Photo::CONTACT_PHOTOS, + DI::l10n()->t(Photo::CONTACT_PHOTOS) + )); $albums = array_column($photos, 'album'); } @@ -62,14 +62,14 @@ function fbrowser_content(App $a) $path[$album] = $album; } - $r = q("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, ANY_VALUE(`type`) AS `type`, + $r = DBA::toArray(DBA::p("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, ANY_VALUE(`type`) AS `type`, min(`scale`) AS `hiq`, max(`scale`) AS `loq`, ANY_VALUE(`desc`) AS `desc`, ANY_VALUE(`created`) AS `created` - FROM `photo` WHERE `uid` = %d $sql_extra AND `album` != '%s' AND `album` != '%s' + FROM `photo` WHERE `uid` = ? $sql_extra AND NOT `album` IN (?, ?) GROUP BY `resource-id` $sql_extra2", - intval(local_user()), - DBA::escape(Photo::CONTACT_PHOTOS), - DBA::escape(DI::l10n()->t(Photo::CONTACT_PHOTOS)) - ); + local_user(), + Photo::CONTACT_PHOTOS, + DI::l10n()->t(Photo::CONTACT_PHOTOS) + )); function _map_files1($rr) { diff --git a/mod/message.php b/mod/message.php index 7324840a0e..dff0531032 100644 --- a/mod/message.php +++ b/mod/message.php @@ -213,12 +213,12 @@ function message_content(App $a) $o .= $header; $total = 0; - $r = q("SELECT count(*) AS `total`, ANY_VALUE(`created`) AS `created` FROM `mail` - WHERE `mail`.`uid` = %d GROUP BY `parent-uri` ORDER BY `created` DESC", - intval(local_user()) + $r = DBA::fetchFirst("SELECT count(*) AS `total`, ANY_VALUE(`created`) AS `created` FROM `mail` + WHERE `mail`.`uid` = ? GROUP BY `parent-uri` ORDER BY `created` DESC", + local_user() ); if (DBA::isResult($r)) { - $total = $r[0]['total']; + $total = $r['total']; } $pager = new Pager(DI::l10n(), DI::args()->getQueryString()); diff --git a/mod/photos.php b/mod/photos.php index 52ab42bf1f..0d8744055a 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -230,16 +230,16 @@ function photos_post(App $a) // get the list of photos we are about to delete if ($visitor) { - $r = q("SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d AND `album` = '%s'", - intval($visitor), - intval($page_owner_uid), - DBA::escape($album) - ); + $r = DBA::toArray(DBA::p("SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `contact-id` = ? AND `uid` = ? AND `album` = ?", + $visitor, + $page_owner_uid, + $album + )); } else { - $r = q("SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `uid` = %d AND `album` = '%s'", - intval(local_user()), - DBA::escape($album) - ); + $r = DBA::toArray(DBA::p("SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `uid` = ? AND `album` = ?", + local_user(), + $album + )); } if (DBA::isResult($r)) { @@ -977,11 +977,11 @@ function photos_content(App $a) $album = hex2bin($datum); $total = 0; - $r = q("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s' + $r = DBA::toArray(DBA::p("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = ? AND `album` = ? AND `scale` <= 4 $sql_extra GROUP BY `resource-id`", - intval($owner_uid), - DBA::escape($album) - ); + $owner_uid, + $album + )); if (DBA::isResult($r)) { $total = count($r); } @@ -996,16 +996,16 @@ function photos_content(App $a) $order = 'DESC'; } - $r = q("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, + $r = DBA::toArray(DBA::p("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, ANY_VALUE(`type`) AS `type`, max(`scale`) AS `scale`, ANY_VALUE(`desc`) as `desc`, ANY_VALUE(`created`) as `created` - FROM `photo` WHERE `uid` = %d AND `album` = '%s' - AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` $order LIMIT %d , %d", + FROM `photo` WHERE `uid` = ? AND `album` = ? + AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` $order LIMIT ? , ?", intval($owner_uid), DBA::escape($album), $pager->getStart(), $pager->getItemsPerPage() - ); + )); if ($cmd === 'drop') { $drop_url = DI::args()->getQueryString(); @@ -1561,29 +1561,29 @@ function photos_content(App $a) // Default - show recent photos with upload link (if applicable) //$o = ''; $total = 0; - $r = q("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' + $r = DBA::toArray(DBA::p("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = ? AND NOT `album` IN (?, ?) $sql_extra GROUP BY `resource-id`", - intval($user['uid']), - DBA::escape(Photo::CONTACT_PHOTOS), - DBA::escape(DI::l10n()->t(Photo::CONTACT_PHOTOS)) - ); + $user['uid'], + Photo::CONTACT_PHOTOS, + DI::l10n()->t(Photo::CONTACT_PHOTOS) + )); if (DBA::isResult($r)) { $total = count($r); } $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), 20); - $r = q("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, + $r = DBA::toArray(DBA::p("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, ANY_VALUE(`type`) AS `type`, ANY_VALUE(`album`) AS `album`, max(`scale`) AS `scale`, ANY_VALUE(`created`) AS `created` FROM `photo` - WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' - $sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT %d , %d", - intval($user['uid']), - DBA::escape(Photo::CONTACT_PHOTOS), - DBA::escape(DI::l10n()->t(Photo::CONTACT_PHOTOS)), + WHERE `uid` = ? AND NOT `album` IN (?, ?) + $sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT ? , ?", + $user['uid'], + Photo::CONTACT_PHOTOS, + DI::l10n()->t(Photo::CONTACT_PHOTOS), $pager->getStart(), $pager->getItemsPerPage() - ); + )); $photos = []; if (DBA::isResult($r)) { diff --git a/mod/ping.php b/mod/ping.php index 178d297a42..1b4cfb3332 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -175,20 +175,20 @@ function ping_init(App $a) } } - $intros1 = q( + $intros1 = DBA::toArray(DBA::p( "SELECT `intro`.`id`, `intro`.`datetime`, `fcontact`.`name`, `fcontact`.`url`, `fcontact`.`photo` FROM `intro` INNER JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id` - WHERE `intro`.`uid` = %d AND NOT `intro`.`blocked` AND NOT `intro`.`ignore` AND `intro`.`fid` != 0", - intval(local_user()) - ); - $intros2 = q( + WHERE `intro`.`uid` = ? AND NOT `intro`.`blocked` AND NOT `intro`.`ignore` AND `intro`.`fid` != 0", + local_user() + )); + $intros2 = DBA::toArray(DBA::p( "SELECT `intro`.`id`, `intro`.`datetime`, `contact`.`name`, `contact`.`url`, `contact`.`photo` FROM `intro` INNER JOIN `contact` ON `intro`.`contact-id` = `contact`.`id` - WHERE `intro`.`uid` = %d AND NOT `intro`.`blocked` AND NOT `intro`.`ignore` AND `intro`.`contact-id` != 0 AND (`intro`.`fid` = 0 OR `intro`.`fid` IS NULL)", - intval(local_user()) - ); + WHERE `intro`.`uid` = ? AND NOT `intro`.`blocked` AND NOT `intro`.`ignore` AND `intro`.`contact-id` != 0 AND (`intro`.`fid` = 0 OR `intro`.`fid` IS NULL)", + local_user() + )); $intro_count = count($intros1) + count($intros2); $intros = $intros1 + $intros2; @@ -397,17 +397,17 @@ function ping_get_notifications($uid) $quit = false; do { - $r = q( + $r = DBA::toArray(DBA::p( "SELECT `notify`.*, `post`.`visible`, `post`.`deleted` FROM `notify` LEFT JOIN `post` ON `post`.`uri-id` = `notify`.`uri-id` - WHERE `notify`.`uid` = %d AND `notify`.`msg` != '' - AND NOT (`notify`.`type` IN (%d, %d)) - AND $seensql `notify`.`seen` ORDER BY `notify`.`date` $order LIMIT %d, 50", - intval($uid), - intval(Notification\Type::INTRO), - intval(Notification\Type::MAIL), - intval($offset) - ); + WHERE `notify`.`uid` = ? AND `notify`.`msg` != '' + AND NOT (`notify`.`type` IN (?, ?)) + AND $seensql `notify`.`seen` ORDER BY `notify`.`date` $order LIMIT ?, 50", + $uid, + Notification\Type::INTRO, + Notification\Type::MAIL, + $offset + )); if (!$r && !$seen) { $seen = true; diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 7d97d6398c..4636038043 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -651,23 +651,23 @@ class Photo if (!DI::config()->get("system", "no_count", false)) { /// @todo This query needs to be renewed. It is really slow // At this time we just store the data in the cache - $albums = q("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created` + $albums = DBA::toArray(DBA::p("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created` FROM `photo` - WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra + WHERE `uid` = ? AND `album` != ? AND `album` != ? $sql_extra GROUP BY `album` ORDER BY `created` DESC", - intval($uid), - DBA::escape(self::CONTACT_PHOTOS), - DBA::escape(DI::l10n()->t(self::CONTACT_PHOTOS)) - ); + $uid, + self::CONTACT_PHOTOS, + DI::l10n()->t(self::CONTACT_PHOTOS) + )); } else { // This query doesn't do the count and is much faster - $albums = q("SELECT DISTINCT(`album`), '' AS `total` + $albums = DBA::toArray(DBA::p("SELECT DISTINCT(`album`), '' AS `total` FROM `photo` USE INDEX (`uid_album_scale_created`) - WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra", - intval($uid), - DBA::escape(self::CONTACT_PHOTOS), - DBA::escape(DI::l10n()->t(self::CONTACT_PHOTOS)) - ); + WHERE `uid` = ? AND `album` != ? AND `album` != ? $sql_extra", + $uid, + self::CONTACT_PHOTOS, + DI::l10n()->t(self::CONTACT_PHOTOS) + )); } DI::cache()->set($key, $albums, Duration::DAY); } diff --git a/src/Module/Settings/UserExport.php b/src/Module/Settings/UserExport.php index 03519b1130..aad76c4fbc 100644 --- a/src/Module/Settings/UserExport.php +++ b/src/Module/Settings/UserExport.php @@ -164,25 +164,24 @@ class UserExport extends BaseSettings $table = $match[1]; $result = []; - $r = q($query); - if (DBA::isResult($r)) { - foreach ($r as $rr) { - foreach ($rr as $k => $v) { - if (empty($dbStructure[$table]['fields'][$k])) { - continue; - } + $rows = DBA::p($query); + while ($row = DBA::fetch($rows)) { + foreach ($row as $k => $v) { + if (empty($dbStructure[$table]['fields'][$k])) { + continue; + } - switch ($dbStructure[$table]['fields'][$k]['type']) { - case 'datetime': - $result[$k] = $v ?? DBA::NULL_DATETIME; - break; - default: - $result[$k] = $v; - break; - } + switch ($dbStructure[$table]['fields'][$k]['type']) { + case 'datetime': + $result[$k] = $v ?? DBA::NULL_DATETIME; + break; + default: + $result[$k] = $v; + break; } } } + DBA::close($rows); return $result; } From a32c10b354f22aef325eedc43661d0df36dd1251 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 8 Oct 2021 04:24:59 +0000 Subject: [PATCH 2/5] Simplifid query --- src/Model/Photo.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 4636038043..c30da19bd8 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -653,7 +653,7 @@ class Photo // At this time we just store the data in the cache $albums = DBA::toArray(DBA::p("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created` FROM `photo` - WHERE `uid` = ? AND `album` != ? AND `album` != ? $sql_extra + WHERE `uid` = ? AND NOT `album` IN (?, ?) $sql_extra GROUP BY `album` ORDER BY `created` DESC", $uid, self::CONTACT_PHOTOS, @@ -663,7 +663,7 @@ class Photo // This query doesn't do the count and is much faster $albums = DBA::toArray(DBA::p("SELECT DISTINCT(`album`), '' AS `total` FROM `photo` USE INDEX (`uid_album_scale_created`) - WHERE `uid` = ? AND `album` != ? AND `album` != ? $sql_extra", + WHERE `uid` = ? AND NOT `album` IN (?, ?) $sql_extra", $uid, self::CONTACT_PHOTOS, DI::l10n()->t(self::CONTACT_PHOTOS) From fdf47ef88f46ac3b3c9d154f36e4abf4797c7e10 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 8 Oct 2021 06:01:07 +0000 Subject: [PATCH 3/5] Count via "distinct" --- mod/message.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/mod/message.php b/mod/message.php index dff0531032..1c6502ee15 100644 --- a/mod/message.php +++ b/mod/message.php @@ -212,14 +212,7 @@ function message_content(App $a) $o .= $header; - $total = 0; - $r = DBA::fetchFirst("SELECT count(*) AS `total`, ANY_VALUE(`created`) AS `created` FROM `mail` - WHERE `mail`.`uid` = ? GROUP BY `parent-uri` ORDER BY `created` DESC", - local_user() - ); - if (DBA::isResult($r)) { - $total = $r['total']; - } + $total = DBA::count('mail', ['uid' => local_user()], ['distinct' => true, 'expression' => 'parent-uri']); $pager = new Pager(DI::l10n(), DI::args()->getQueryString()); From 56f033fa957092a48d683f842a33c6463e62f3bc Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 8 Oct 2021 10:01:15 +0000 Subject: [PATCH 4/5] Some more "q" calls handled --- include/api.php | 15 ++------------- mod/photos.php | 12 ++---------- 2 files changed, 4 insertions(+), 23 deletions(-) diff --git a/include/api.php b/include/api.php index 3820ccd0b9..5937481e81 100644 --- a/include/api.php +++ b/include/api.php @@ -3727,15 +3727,8 @@ function api_direct_messages_destroy($type) // add parent-uri to sql command if specified by calling app $sql_extra = ($parenturi != "" ? " AND `parent-uri` = '" . DBA::escape($parenturi) . "'" : ""); - // get data of the specified message id - $r = q( - "SELECT `id` FROM `mail` WHERE `uid` = %d AND `id` = %d" . $sql_extra, - intval($uid), - intval($id) - ); - // error message if specified id is not in database - if (!DBA::isResult($r)) { + if (!DBA::exists('mail', ["`uid` = ? AND `id` = ? " . $sql_extra, $uid, $id])) { if ($verbose == "true") { $answer = ['result' => 'error', 'message' => 'message id not in database']; return api_format_data("direct_messages_delete", $type, ['$result' => $answer]); @@ -3745,11 +3738,7 @@ function api_direct_messages_destroy($type) } // delete message - $result = q( - "DELETE FROM `mail` WHERE `uid` = %d AND `id` = %d" . $sql_extra, - intval($uid), - intval($id) - ); + $result = DBA::delete('mail', ["`uid` = ? AND `id` = ? " . $sql_extra, $uid, $id]); if ($verbose == "true") { if ($result) { diff --git a/mod/photos.php b/mod/photos.php index 0d8744055a..f3b907dd80 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1101,11 +1101,7 @@ function photos_content(App $a) // Display one photo if ($datatype === 'image') { // fetch image, item containing image, then comments - $ph = q("SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' - $sql_extra ORDER BY `scale` ASC ", - intval($owner_uid), - DBA::escape($datum) - ); + $ph = Photo::selectToArray([], ["`uid` = ? AND `resource-id` = ? " . $sql_extra, $owner_uid, $datum], ['order' => ['scale' => true]]); if (!DBA::isResult($ph)) { if (DBA::exists('photo', ['resource-id' => $datum, 'uid' => $owner_uid])) { @@ -1149,11 +1145,7 @@ function photos_content(App $a) $order = 'DESC'; } - $prvnxt = q("SELECT `resource-id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `scale` = 0 - $sql_extra ORDER BY `created` $order ", - DBA::escape($ph[0]['album']), - intval($owner_uid) - ); + $prvnxt = Photo::selectToArray(['resource-id'], ["`album` = ? AND `uid` = ? AND `scale` = ?" . $sql_extra, $ph[0]['album'], $owner_uid, 0]); if (DBA::isResult($prvnxt)) { $prv = null; From 020112bf4afeedbc5ae2d3eaac7c166c8ec8b56c Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 8 Oct 2021 10:28:28 +0000 Subject: [PATCH 5/5] Query replaced --- mod/photos.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/mod/photos.php b/mod/photos.php index f3b907dd80..05767d4a4c 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1245,14 +1245,7 @@ function photos_content(App $a) // The difference is that we won't be displaying the conversation head item // as a "post" but displaying instead the photo it is linked to - /// @todo Rewrite this query. To do so, $sql_extra must be changed - $linked_items = q("SELECT `id` FROM `post-user-view` WHERE `resource-id` = '%s' $sql_extra LIMIT 1", - DBA::escape($datum) - ); - if (DBA::isResult($linked_items)) { - // This is a workaround to not being forced to rewrite the while $sql_extra handling - $link_item = Post::selectFirst([], ['id' => $linked_items[0]['id']]); - } + $link_item = Post::selectFirst([], ["`resource-id` = ?" . $sql_extra, $datum]); if (!empty($link_item['parent']) && !empty($link_item['uid'])) { $condition = ["`parent` = ? AND `gravity` = ?", $link_item['parent'], GRAVITY_COMMENT];