sforkowany z mirror/social
fixing and cleaning
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>feature/noid/sql-rewrite-0929^2
rodzic
dd57e9adec
commit
741a49f09b
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue