fixing and cleaning

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
pull/768/head
Maxence Lange 2019-09-30 18:28:59 +02:00
rodzic dd57e9adec
commit 741a49f09b
4 zmienionych plików z 68 dodań i 14 usunięć

Wyświetl plik

@ -171,6 +171,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
@ -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);

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);
}

Wyświetl plik

@ -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;
}