summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2019-09-30 18:28:59 +0200
committerMaxence Lange <maxence@artificial-owl.com>2019-09-30 18:28:59 +0200
commit741a49f09bd0d62a7f1477341144f765ca56cc7a (patch)
tree9d5a9ba108218f83bad73d84a236c804393cba48 /lib
parentdd57e9adecf7eaa7fdd8d1cd49c99f2ca9f80572 (diff)
fixing and cleaning
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/Db/SocialCrossQueryBuilder.php49
-rw-r--r--lib/Db/SocialLimitsQueryBuilder.php3
-rw-r--r--lib/Db/StreamRequest.php28
-rw-r--r--lib/Db/StreamRequestBuilder.php2
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;
}