diff options
author | Sean Molenaar <sean@seanmolenaar.eu> | 2021-02-23 22:05:03 +0100 |
---|---|---|
committer | Benjamin Brahmer <info@b-brahmer.de> | 2021-02-27 15:12:59 +0100 |
commit | 9d5d35ce2396d0a059b4271ffbd454c0eacab0f8 (patch) | |
tree | d65637e9c46e24dcfec4dc6963ef58331c9263ee /lib/Db | |
parent | 43deed2dbbebb6cc45d1db2b469de106890fc5cf (diff) |
DB: Fix offset quotes
Issue GH-1200
Signed-off-by: Sean Molenaar <sean@seanmolenaar.eu>
Diffstat (limited to 'lib/Db')
-rw-r--r-- | lib/Db/ItemMapperV2.php | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/lib/Db/ItemMapperV2.php b/lib/Db/ItemMapperV2.php index fe4bbabc0..33b4611f9 100644 --- a/lib/Db/ItemMapperV2.php +++ b/lib/Db/ItemMapperV2.php @@ -403,6 +403,22 @@ class ItemMapperV2 extends NewsMapperV2 } /** + * Generate an expression for the offset. + * + * @param bool $oldestFirst Sorting direction + * + * @return string + */ + private function offsetWhere(bool $oldestFirst): string + { + if ($oldestFirst === true) { + return 'items.id > :offset'; + } + + return 'items.id < :offset'; + } + + /** * @param string $userId User identifier * @param int $feedId Feed identifier * @param int $limit Max items to retrieve @@ -424,21 +440,13 @@ class ItemMapperV2 extends NewsMapperV2 ): array { $builder = $this->db->getQueryBuilder(); - if ($oldestFirst === true) { - $offsetWhere = $builder->expr()->lt('items.id', ':offset'); - } else { - $offsetWhere = $builder->expr()->gt('items.id', ':offset'); - } - $builder->select('items.*') ->from($this->tableName, 'items') ->innerJoin('items', FeedMapperV2::TABLE_NAME, 'feeds', 'items.feed_id = feeds.id') ->andWhere('feeds.user_id = :userId') ->andWhere('items.feed_id = :feedId') - ->andWhere($offsetWhere) ->setParameter('userId', $userId) ->setParameter('feedId', $feedId) - ->setParameter('offset', $offset) ->setMaxResults($limit) ->orderBy('items.last_modified', ($oldestFirst ? 'ASC' : 'DESC')) ->addOrderBy('items.id', ($oldestFirst ? 'ASC' : 'DESC')); @@ -451,6 +459,11 @@ class ItemMapperV2 extends NewsMapperV2 } } + if ($offset !== 0) { + $builder->andWhere($this->offsetWhere($oldestFirst)) + ->setParameter('offset', $offset); + } + if ($hideRead === true) { $builder->andWhere('items.unread = 1'); } @@ -486,20 +499,12 @@ class ItemMapperV2 extends NewsMapperV2 $folderWhere = $builder->expr()->eq('feeds.folder_id', new Literal($folderId), IQueryBuilder::PARAM_INT); } - if ($oldestFirst === true) { - $offsetWhere = $builder->expr()->lt('items.id', ':offset'); - } else { - $offsetWhere = $builder->expr()->gt('items.id', ':offset'); - } - $builder->select('items.*') ->from($this->tableName, 'items') ->innerJoin('items', FeedMapperV2::TABLE_NAME, 'feeds', 'items.feed_id = feeds.id') ->andWhere('feeds.user_id = :userId') ->andWhere($folderWhere) - ->andWhere($offsetWhere) ->setParameter('userId', $userId) - ->setParameter('offset', $offset) ->setMaxResults($limit) ->orderBy('items.last_modified', ($oldestFirst ? 'ASC' : 'DESC')) ->addOrderBy('items.id', ($oldestFirst ? 'ASC' : 'DESC')); @@ -512,6 +517,11 @@ class ItemMapperV2 extends NewsMapperV2 } } + if ($offset !== 0) { + $builder->andWhere($this->offsetWhere($oldestFirst)) + ->setParameter('offset', $offset); + } + if ($hideRead === true) { $builder->andWhere('items.unread = 1'); } @@ -540,19 +550,11 @@ class ItemMapperV2 extends NewsMapperV2 ): array { $builder = $this->db->getQueryBuilder(); - if ($oldestFirst === true) { - $offsetWhere = $builder->expr()->lt('items.id', ':offset'); - } else { - $offsetWhere = $builder->expr()->gt('items.id', ':offset'); - } - $builder->select('items.*') ->from($this->tableName, 'items') ->innerJoin('items', FeedMapperV2::TABLE_NAME, 'feeds', 'items.feed_id = feeds.id') ->andWhere('feeds.user_id = :userId') - ->andWhere($offsetWhere) ->setParameter('userId', $userId) - ->setParameter('offset', $offset) ->setMaxResults($limit) ->orderBy('items.last_modified', ($oldestFirst ? 'ASC' : 'DESC')) ->addOrderBy('items.id', ($oldestFirst ? 'ASC' : 'DESC')); @@ -565,6 +567,11 @@ class ItemMapperV2 extends NewsMapperV2 } } + if ($offset !== 0) { + $builder->andWhere($this->offsetWhere($oldestFirst)) + ->setParameter('offset', $offset); + } + switch ($type) { case ListType::STARRED: $builder->andWhere('items.starred = 1'); |