diff options
author | Maxence Lange <maxence@artificial-owl.com> | 2019-09-30 18:28:59 +0200 |
---|---|---|
committer | Maxence Lange <maxence@artificial-owl.com> | 2019-09-30 18:28:59 +0200 |
commit | 741a49f09bd0d62a7f1477341144f765ca56cc7a (patch) | |
tree | 9d5a9ba108218f83bad73d84a236c804393cba48 /lib | |
parent | dd57e9adecf7eaa7fdd8d1cd49c99f2ca9f80572 (diff) |
fixing and cleaning
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Db/SocialCrossQueryBuilder.php | 49 | ||||
-rw-r--r-- | lib/Db/SocialLimitsQueryBuilder.php | 3 | ||||
-rw-r--r-- | lib/Db/StreamRequest.php | 28 | ||||
-rw-r--r-- | lib/Db/StreamRequestBuilder.php | 2 |
4 files changed, 68 insertions, 14 deletions
diff --git a/lib/Db/SocialCrossQueryBuilder.php b/lib/Db/SocialCrossQueryBuilder.php index 806790fb..bfd99de7 100644 --- a/lib/Db/SocialCrossQueryBuilder.php +++ b/lib/Db/SocialCrossQueryBuilder.php @@ -172,6 +172,52 @@ class SocialCrossQueryBuilder extends SocialCoreQueryBuilder { /** + * @param string $type + * @param string $subType + * @param string $field + * @param string $aliasDest + * @param string $alias + */ + public function innerJoinDest( + string $type, string $field = 'id_prim', string $aliasDest = 'sd', string $alias = '' + ) { + $this->andWhere($this->exprInnerJoinDest($type, $field, $aliasDest, $alias)); + } + + + /** + * @param string $type + * @param string $subType + * @param string $field + * @param string $aliasDest + * @param string $alias + * + * @return ICompositeExpression + */ + public function exprInnerJoinDest( + string $type, string $field = 'id_prim', string $aliasDest = 'sd', string $alias = '' + ): ICompositeExpression { + $expr = $this->expr(); + $andX = $expr->andX(); + $pf = (($alias === '') ? $this->getdefaultSelectAlias() : $alias) . '.'; + $andX->add($expr->eq($aliasDest . '.stream_id', $pf . $field)); + $andX->add($expr->eq($aliasDest . '.type', $this->createNamedParameter($type))); + + return $andX; + } + + + public function innerJoinDestFollowing( + string $actorId, string $type, string $field = 'id_prim', string $aliasDest = 'sd', + string $aliasFollowing = 'f', string $alias = '' + ) { + $this->andWhere( + $this->exprInnerJoinDestFollowing($actorId, $type, $field, $aliasDest, $aliasFollowing, $alias) + ); + } + + + /** * @param string $actorId * @param string $type * @param string $field @@ -181,12 +227,13 @@ class SocialCrossQueryBuilder extends SocialCoreQueryBuilder { * * @return ICompositeExpression */ - public function innerJoinDestFollowing( + public function exprInnerJoinDestFollowing( string $actorId, string $type, string $field = 'id_prim', string $aliasDest = 'sd', string $aliasFollowing = 'f', string $alias = '' ): ICompositeExpression { $expr = $this->expr(); $andX = $expr->andX(); + $pf = (($alias === '') ? $this->getdefaultSelectAlias() : $alias) . '.'; $idPrim = $this->prim($actorId); diff --git a/lib/Db/SocialLimitsQueryBuilder.php b/lib/Db/SocialLimitsQueryBuilder.php index 53ffd206..188395cc 100644 --- a/lib/Db/SocialLimitsQueryBuilder.php +++ b/lib/Db/SocialLimitsQueryBuilder.php @@ -355,6 +355,7 @@ class SocialLimitsQueryBuilder extends SocialCrossQueryBuilder { ) { if (!$this->hasViewer()) { $this->selectDestFollowing($aliasDest); + $this->innerJoinDest('recipient', 'id_prim', 'sd', 's'); $this->limitToDest(ACore::CONTEXT_PUBLIC, 'recipient', '', $aliasDest); return; @@ -365,7 +366,7 @@ class SocialLimitsQueryBuilder extends SocialCrossQueryBuilder { $orX = $expr->orX(); $actor = $this->getViewer(); - $following = $this->innerJoinDestFollowing( + $following = $this->exprInnerJoinDestFollowing( $actor->getId(), 'recipient', 'id_prim', $aliasDest, $aliasFollowing ); $orX->add($following); diff --git a/lib/Db/StreamRequest.php b/lib/Db/StreamRequest.php index 50441124..550fe51c 100644 --- a/lib/Db/StreamRequest.php +++ b/lib/Db/StreamRequest.php @@ -33,7 +33,6 @@ namespace OCA\Social\Db; use daita\MySmallPhpTools\Exceptions\DateTimeException; use daita\MySmallPhpTools\Model\Cache; use DateTime; -use Doctrine\DBAL\Driver\Statement; use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use Doctrine\DBAL\Query\QueryBuilder; use Exception; @@ -336,10 +335,12 @@ class StreamRequest extends StreamRequestBuilder { */ public function countNotesFromActorId(string $actorId): int { $qb = $this->countNotesSelectSql(); - $qb->limitToAttributedTo($qb->prim($actorId), true); + $qb->limitToAttributedTo($actorId, true); $qb->limitToType(Note::TYPE); - // TODO rewrite this ! - $this->limitToRecipient($qb, ACore::CONTEXT_PUBLIC); + + $qb->selectDestFollowing('sd', ''); + $qb->innerJoinDest('recipient', 'id_prim', 'sd', 's'); + $qb->limitToDest(ACore::CONTEXT_PUBLIC, 'recipient', '', 'sd'); $cursor = $qb->execute(); $data = $cursor->fetch(); @@ -398,7 +399,9 @@ class StreamRequest extends StreamRequestBuilder { $qb = $this->getStreamSelectSql(); $qb->limitPaginate($since, $limit); - $this->limitToRecipient($qb, $actor->getId(), false); + + $qb->selectDestFollowing('sd', ''); + $qb->limitToDest($actor->getId(), 'recipient', '', 'sd'); $qb->limitToType(SocialAppNotification::TYPE); $qb->innerJoinCacheActors('ca', 's.attributed_to_prim'); @@ -425,7 +428,10 @@ class StreamRequest extends StreamRequestBuilder { $qb->limitPaginate($since, $limit); $qb->limitToAttributedTo($actorId); - $this->limitToRecipient($qb, ACore::CONTEXT_PUBLIC); + + $qb->selectDestFollowing('sd', ''); + $qb->innerJoinDest('recipient', 'id_prim', 'sd', 's'); + $qb->limitToDest(ACore::CONTEXT_PUBLIC, 'recipient', '', 'sd'); $qb->innerJoinCacheActors('ca', 's.attributed_to_prim'); $qb->leftJoinStreamAction(); @@ -450,11 +456,13 @@ class StreamRequest extends StreamRequestBuilder { $qb = $this->getStreamSelectSql(); $qb->limitPaginate($since, $limit); - $this->limitToRecipient($qb, $actor->getId(), true); + $qb->selectDestFollowing('sd', ''); + $qb->innerJoinDest('recipient', 'id_prim', 'sd', 's'); + $qb->limitToDest($actor->getId(), 'recipient', '', 'sd'); + $this->filterRecipient($qb, ACore::CONTEXT_PUBLIC); $this->filterRecipient($qb, $actor->getFollowers()); $qb->filterType(SocialAppNotification::TYPE); -// $this->filterHiddenOnTimeline($qb); $qb->innerJoinCacheActors('ca', 's.attributed_to_prim'); @@ -484,11 +492,9 @@ class StreamRequest extends StreamRequestBuilder { $qb->innerJoinCacheActors('ca', 's.attributed_to_prim'); $qb->leftJoinStreamAction(); - // TODO: to: = real public, cc: = unlisted !? - // USE stream_dest.type = 'recipient' and stream_dest.subtype='to' on this one ! $qb->selectDestFollowing('sd', ''); + $qb->innerJoinDest('recipient', 'id_prim', 'sd', 's'); $qb->limitToDest(ACore::CONTEXT_PUBLIC, 'recipient', 'to', 'sd'); -// $this->limitToRecipient($qb, ACore::CONTEXT_PUBLIC, true, ['to']); return $this->getStreamsFromRequest($qb); } diff --git a/lib/Db/StreamRequestBuilder.php b/lib/Db/StreamRequestBuilder.php index e26a2386..d9778bae 100644 --- a/lib/Db/StreamRequestBuilder.php +++ b/lib/Db/StreamRequestBuilder.php @@ -119,7 +119,7 @@ class StreamRequestBuilder extends CoreRequestBuilder { $qb->selectAlias($qb->createFunction('COUNT(*)'), 'count') ->from(self::TABLE_STREAM, 's'); - $this->defaultSelectAlias = 's'; + $qb->setDefaultSelectAlias('s'); return $qb; } |