protected function getForQuery(IQueryBuilder $builder, $type, $value) { $query = $builder->select(['m.mount_id', 'mount_point', 'storage_backend', 'auth_backend', 'priority', 'm.type'])->from('external_mounts', 'm')->innerJoin('m', 'external_applicable', 'a', 'm.mount_id = a.mount_id')->where($builder->expr()->eq('a.type', $builder->createNamedParameter($type, \PDO::PARAM_INT))); if (is_null($value)) { $query = $query->andWhere($builder->expr()->isNull('a.value')); } else { $query = $query->andWhere($builder->expr()->eq('a.value', $builder->createNamedParameter($value))); } return $query; }
/** * @param IQueryBuilder $query * @param string $user * @param int $since * @param string $sort * * @return array Headers that should be set on the response * * @throws \OutOfBoundsException If $since is not owned by $user */ protected function setOffsetFromSince(IQueryBuilder $query, $user, $since, $sort) { if ($since) { $queryBuilder = $this->connection->getQueryBuilder(); $queryBuilder->select('*')->from('activity')->where($queryBuilder->expr()->eq('activity_id', $queryBuilder->createNamedParameter((int) $since))); $result = $queryBuilder->execute(); $activity = $result->fetch(); $result->closeCursor(); if ($activity) { if ($activity['affecteduser'] !== $user) { throw new \OutOfBoundsException('Invalid since', 2); } $timestamp = (int) $activity['timestamp']; if ($sort === 'DESC') { $query->andWhere($query->expr()->lte('timestamp', $query->createNamedParameter($timestamp))); $query->andWhere($query->expr()->lt('activity_id', $query->createNamedParameter($since))); } else { $query->andWhere($query->expr()->gte('timestamp', $query->createNamedParameter($timestamp))); $query->andWhere($query->expr()->gt('activity_id', $query->createNamedParameter($since))); } return []; } } /** * Couldn't find the since, so find the oldest one and set the header */ $fetchQuery = $this->connection->getQueryBuilder(); $fetchQuery->select('activity_id')->from('activity')->where($fetchQuery->expr()->eq('affecteduser', $fetchQuery->createNamedParameter($user)))->orderBy('timestamp', $sort)->setMaxResults(1); $result = $fetchQuery->execute(); $activity = $result->fetch(); $result->closeCursor(); if ($activity !== false) { return ['X-Activity-First-Known' => (int) $activity['activity_id']]; } return []; }