mirror of
https://github.com/nextcloud/server.git
synced 2026-06-11 01:30:50 -04:00
fix(db)!: Too few arguments to function Doctrine\DBAL\Query\Expression\ExpressionBuilder::or(), 0 passed and atleast 1 expected
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
8b7f8e14d6
commit
5fdc5d5011
9 changed files with 83 additions and 71 deletions
|
|
@ -29,24 +29,24 @@ class CardSearchDao {
|
|||
$cardQuery = $this->db->getQueryBuilder();
|
||||
$propQuery = $this->db->getQueryBuilder();
|
||||
|
||||
$propOr = $propQuery->expr()->orX();
|
||||
$additionalWheres = [];
|
||||
if ($uid !== null) {
|
||||
$propOr->add($propQuery->expr()->andX(
|
||||
$additionalWheres[] = $propQuery->expr()->andX(
|
||||
$propQuery->expr()->eq('name', $cardQuery->createNamedParameter('UID')),
|
||||
$propQuery->expr()->eq('value', $cardQuery->createNamedParameter($uid))
|
||||
));
|
||||
);
|
||||
}
|
||||
if ($email !== null) {
|
||||
$propOr->add($propQuery->expr()->andX(
|
||||
$additionalWheres[] = $propQuery->expr()->andX(
|
||||
$propQuery->expr()->eq('name', $cardQuery->createNamedParameter('EMAIL')),
|
||||
$propQuery->expr()->eq('value', $cardQuery->createNamedParameter($email))
|
||||
));
|
||||
);
|
||||
}
|
||||
if ($cloudId !== null) {
|
||||
$propOr->add($propQuery->expr()->andX(
|
||||
$additionalWheres[] = $propQuery->expr()->andX(
|
||||
$propQuery->expr()->eq('name', $cardQuery->createNamedParameter('CLOUD')),
|
||||
$propQuery->expr()->eq('value', $cardQuery->createNamedParameter($cloudId))
|
||||
));
|
||||
);
|
||||
}
|
||||
$addressbooksQuery->selectDistinct('id')
|
||||
->from('addressbooks')
|
||||
|
|
@ -54,8 +54,12 @@ class CardSearchDao {
|
|||
$propQuery->selectDistinct('cardid')
|
||||
->from('cards_properties')
|
||||
->where($propQuery->expr()->in('addressbookid', $propQuery->createFunction($addressbooksQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY))
|
||||
->andWhere($propOr)
|
||||
->groupBy('cardid');
|
||||
|
||||
if (!empty($additionalWheres)) {
|
||||
$propQuery->andWhere($propQuery->expr()->orX(...$additionalWheres));
|
||||
}
|
||||
|
||||
$cardQuery->select('carddata')
|
||||
->from('cards')
|
||||
->where($cardQuery->expr()->in('id', $cardQuery->createFunction($propQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY))
|
||||
|
|
|
|||
|
|
@ -61,23 +61,25 @@ class RecentContactMapper extends QBMapper {
|
|||
?string $cloudId): array {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
|
||||
$or = $qb->expr()->orX();
|
||||
$additionalWheres = [];
|
||||
if ($uid !== null) {
|
||||
$or->add($qb->expr()->eq('uid', $qb->createNamedParameter($uid)));
|
||||
$additionalWheres[] = $qb->expr()->eq('uid', $qb->createNamedParameter($uid));
|
||||
}
|
||||
if ($email !== null) {
|
||||
$or->add($qb->expr()->eq('email', $qb->createNamedParameter($email)));
|
||||
$additionalWheres[] = $qb->expr()->eq('email', $qb->createNamedParameter($email));
|
||||
}
|
||||
if ($cloudId !== null) {
|
||||
$or->add($qb->expr()->eq('federated_cloud_id', $qb->createNamedParameter($cloudId)));
|
||||
$additionalWheres[] = $qb->expr()->eq('federated_cloud_id', $qb->createNamedParameter($cloudId));
|
||||
}
|
||||
|
||||
$select = $qb
|
||||
->select('*')
|
||||
->from($this->getTableName())
|
||||
->where($or)
|
||||
->andWhere($qb->expr()->eq('actor_uid', $qb->createNamedParameter($user->getUID())));
|
||||
->where($qb->expr()->eq('actor_uid', $qb->createNamedParameter($user->getUID())));
|
||||
|
||||
if (!empty($additionalWheres)) {
|
||||
$select->andWhere($select->expr()->orX(...$additionalWheres));
|
||||
}
|
||||
return $this->findEntities($select);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1874,12 +1874,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
}
|
||||
|
||||
if (!empty($searchProperties)) {
|
||||
$or = $innerQuery->expr()->orX();
|
||||
$or = [];
|
||||
foreach ($searchProperties as $searchProperty) {
|
||||
$or->add($innerQuery->expr()->eq('op.name',
|
||||
$outerQuery->createNamedParameter($searchProperty)));
|
||||
$or[] = $innerQuery->expr()->eq('op.name',
|
||||
$outerQuery->createNamedParameter($searchProperty));
|
||||
}
|
||||
$innerQuery->andWhere($or);
|
||||
$innerQuery->andWhere($innerQuery->expr()->orX(...$or));
|
||||
}
|
||||
|
||||
if ($pattern !== '') {
|
||||
|
|
@ -1923,12 +1923,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
}
|
||||
|
||||
if (!empty($options['types'])) {
|
||||
$or = $outerQuery->expr()->orX();
|
||||
$or = [];
|
||||
foreach ($options['types'] as $type) {
|
||||
$or->add($outerQuery->expr()->eq('componenttype',
|
||||
$outerQuery->createNamedParameter($type)));
|
||||
$or[] = $outerQuery->expr()->eq('componenttype',
|
||||
$outerQuery->createNamedParameter($type));
|
||||
}
|
||||
$outerQuery->andWhere($or);
|
||||
$outerQuery->andWhere($outerQuery->expr()->orX(...$or));
|
||||
}
|
||||
|
||||
$outerQuery->andWhere($outerQuery->expr()->in('c.id', $outerQuery->createFunction($innerQuery->getSQL())));
|
||||
|
|
@ -2149,16 +2149,17 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
$escapePattern = !\array_key_exists('escape_like_param', $options) || $options['escape_like_param'] !== false;
|
||||
|
||||
$calendarObjectIdQuery = $this->db->getQueryBuilder();
|
||||
$calendarOr = $calendarObjectIdQuery->expr()->orX();
|
||||
$searchOr = $calendarObjectIdQuery->expr()->orX();
|
||||
$calendarOr = [];
|
||||
$searchOr = [];
|
||||
|
||||
// Fetch calendars and subscription
|
||||
$calendars = $this->getCalendarsForUser($principalUri);
|
||||
$subscriptions = $this->getSubscriptionsForUser($principalUri);
|
||||
foreach ($calendars as $calendar) {
|
||||
$calendarAnd = $calendarObjectIdQuery->expr()->andX();
|
||||
$calendarAnd->add($calendarObjectIdQuery->expr()->eq('cob.calendarid', $calendarObjectIdQuery->createNamedParameter((int)$calendar['id'])));
|
||||
$calendarAnd->add($calendarObjectIdQuery->expr()->eq('cob.calendartype', $calendarObjectIdQuery->createNamedParameter(self::CALENDAR_TYPE_CALENDAR)));
|
||||
$calendarAnd = $calendarObjectIdQuery->expr()->andX(
|
||||
$calendarObjectIdQuery->expr()->eq('cob.calendarid', $calendarObjectIdQuery->createNamedParameter((int)$calendar['id'])),
|
||||
$calendarObjectIdQuery->expr()->eq('cob.calendartype', $calendarObjectIdQuery->createNamedParameter(self::CALENDAR_TYPE_CALENDAR)),
|
||||
);
|
||||
|
||||
// If it's shared, limit search to public events
|
||||
if (isset($calendar['{http://owncloud.org/ns}owner-principal'])
|
||||
|
|
@ -2166,12 +2167,13 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
$calendarAnd->add($calendarObjectIdQuery->expr()->eq('co.classification', $calendarObjectIdQuery->createNamedParameter(self::CLASSIFICATION_PUBLIC)));
|
||||
}
|
||||
|
||||
$calendarOr->add($calendarAnd);
|
||||
$calendarOr[] = $calendarAnd;
|
||||
}
|
||||
foreach ($subscriptions as $subscription) {
|
||||
$subscriptionAnd = $calendarObjectIdQuery->expr()->andX();
|
||||
$subscriptionAnd->add($calendarObjectIdQuery->expr()->eq('cob.calendarid', $calendarObjectIdQuery->createNamedParameter((int)$subscription['id'])));
|
||||
$subscriptionAnd->add($calendarObjectIdQuery->expr()->eq('cob.calendartype', $calendarObjectIdQuery->createNamedParameter(self::CALENDAR_TYPE_SUBSCRIPTION)));
|
||||
$subscriptionAnd = $calendarObjectIdQuery->expr()->andX(
|
||||
$calendarObjectIdQuery->expr()->eq('cob.calendarid', $calendarObjectIdQuery->createNamedParameter((int)$subscription['id'])),
|
||||
$calendarObjectIdQuery->expr()->eq('cob.calendartype', $calendarObjectIdQuery->createNamedParameter(self::CALENDAR_TYPE_SUBSCRIPTION)),
|
||||
);
|
||||
|
||||
// If it's shared, limit search to public events
|
||||
if (isset($subscription['{http://owncloud.org/ns}owner-principal'])
|
||||
|
|
@ -2179,28 +2181,30 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
$subscriptionAnd->add($calendarObjectIdQuery->expr()->eq('co.classification', $calendarObjectIdQuery->createNamedParameter(self::CLASSIFICATION_PUBLIC)));
|
||||
}
|
||||
|
||||
$calendarOr->add($subscriptionAnd);
|
||||
$calendarOr[] = $subscriptionAnd;
|
||||
}
|
||||
|
||||
foreach ($searchProperties as $property) {
|
||||
$propertyAnd = $calendarObjectIdQuery->expr()->andX();
|
||||
$propertyAnd->add($calendarObjectIdQuery->expr()->eq('cob.name', $calendarObjectIdQuery->createNamedParameter($property, IQueryBuilder::PARAM_STR)));
|
||||
$propertyAnd->add($calendarObjectIdQuery->expr()->isNull('cob.parameter'));
|
||||
$propertyAnd = $calendarObjectIdQuery->expr()->andX(
|
||||
$calendarObjectIdQuery->expr()->eq('cob.name', $calendarObjectIdQuery->createNamedParameter($property, IQueryBuilder::PARAM_STR)),
|
||||
$calendarObjectIdQuery->expr()->isNull('cob.parameter'),
|
||||
);
|
||||
|
||||
$searchOr->add($propertyAnd);
|
||||
$searchOr[] = $propertyAnd;
|
||||
}
|
||||
foreach ($searchParameters as $property => $parameter) {
|
||||
$parameterAnd = $calendarObjectIdQuery->expr()->andX();
|
||||
$parameterAnd->add($calendarObjectIdQuery->expr()->eq('cob.name', $calendarObjectIdQuery->createNamedParameter($property, IQueryBuilder::PARAM_STR)));
|
||||
$parameterAnd->add($calendarObjectIdQuery->expr()->eq('cob.parameter', $calendarObjectIdQuery->createNamedParameter($parameter, IQueryBuilder::PARAM_STR_ARRAY)));
|
||||
$parameterAnd = $calendarObjectIdQuery->expr()->andX(
|
||||
$calendarObjectIdQuery->expr()->eq('cob.name', $calendarObjectIdQuery->createNamedParameter($property, IQueryBuilder::PARAM_STR)),
|
||||
$calendarObjectIdQuery->expr()->eq('cob.parameter', $calendarObjectIdQuery->createNamedParameter($parameter, IQueryBuilder::PARAM_STR_ARRAY)),
|
||||
);
|
||||
|
||||
$searchOr->add($parameterAnd);
|
||||
$searchOr[] = $parameterAnd;
|
||||
}
|
||||
|
||||
if ($calendarOr->count() === 0) {
|
||||
if (empty($calendarOr)) {
|
||||
return [];
|
||||
}
|
||||
if ($searchOr->count() === 0) {
|
||||
if (empty($searchOr)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
|
|
@ -2208,8 +2212,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
->from($this->dbObjectPropertiesTable, 'cob')
|
||||
->leftJoin('cob', 'calendarobjects', 'co', $calendarObjectIdQuery->expr()->eq('co.id', 'cob.objectid'))
|
||||
->andWhere($calendarObjectIdQuery->expr()->in('co.componenttype', $calendarObjectIdQuery->createNamedParameter($componentTypes, IQueryBuilder::PARAM_STR_ARRAY)))
|
||||
->andWhere($calendarOr)
|
||||
->andWhere($searchOr)
|
||||
->andWhere($calendarObjectIdQuery->expr()->orX(...$calendarOr))
|
||||
->andWhere($calendarObjectIdQuery->expr()->orX(...$searchOr))
|
||||
->andWhere($calendarObjectIdQuery->expr()->isNull('deleted_at'));
|
||||
|
||||
if ($pattern !== '') {
|
||||
|
|
|
|||
|
|
@ -1148,20 +1148,20 @@ class CardDavBackend implements BackendInterface, SyncSupport {
|
|||
/**
|
||||
* FIXME Find a way to match only 4 last digits
|
||||
* BDAY can be --1018 without year or 20001019 with it
|
||||
* $bDayOr = $query2->expr()->orX();
|
||||
* $bDayOr = [];
|
||||
* if ($options['since'] instanceof DateTimeFilter) {
|
||||
* $bDayOr->add(
|
||||
* $bDayOr[] =
|
||||
* $query2->expr()->gte('SUBSTR(cp_bday.value, -4)',
|
||||
* $query2->createNamedParameter($options['since']->get()->format('md')))
|
||||
* $query2->createNamedParameter($options['since']->get()->format('md'))
|
||||
* );
|
||||
* }
|
||||
* if ($options['until'] instanceof DateTimeFilter) {
|
||||
* $bDayOr->add(
|
||||
* $bDayOr[] =
|
||||
* $query2->expr()->lte('SUBSTR(cp_bday.value, -4)',
|
||||
* $query2->createNamedParameter($options['until']->get()->format('md')))
|
||||
* $query2->createNamedParameter($options['until']->get()->format('md'))
|
||||
* );
|
||||
* }
|
||||
* $query2->andWhere($bDayOr);
|
||||
* $query2->andWhere($query2->expr()->orX(...$bDayOr));
|
||||
*/
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -203,12 +203,12 @@ class JobList implements IJobList {
|
|||
$query->andWhere($query->expr()->eq('time_sensitive', $query->createNamedParameter(IJob::TIME_SENSITIVE, IQueryBuilder::PARAM_INT)));
|
||||
}
|
||||
|
||||
if ($jobClasses !== null && count($jobClasses) > 0) {
|
||||
$orClasses = $query->expr()->orx();
|
||||
if (!empty($jobClasses)) {
|
||||
$orClasses = [];
|
||||
foreach ($jobClasses as $jobClass) {
|
||||
$orClasses->add($query->expr()->eq('class', $query->createNamedParameter($jobClass, IQueryBuilder::PARAM_STR)));
|
||||
$orClasses[] = $query->expr()->eq('class', $query->createNamedParameter($jobClass, IQueryBuilder::PARAM_STR));
|
||||
}
|
||||
$query->andWhere($orClasses);
|
||||
$query->andWhere($query->expr()->orX(...$orClasses));
|
||||
}
|
||||
|
||||
$result = $query->executeQuery();
|
||||
|
|
|
|||
|
|
@ -459,22 +459,22 @@ class Connection extends PrimaryReadReplicaConnection {
|
|||
foreach ($values as $name => $value) {
|
||||
$updateQb->set($name, $updateQb->createNamedParameter($value, $this->getType($value)));
|
||||
}
|
||||
$where = $updateQb->expr()->andX();
|
||||
$where = [];
|
||||
$whereValues = array_merge($keys, $updatePreconditionValues);
|
||||
foreach ($whereValues as $name => $value) {
|
||||
if ($value === '') {
|
||||
$where->add($updateQb->expr()->emptyString(
|
||||
$where[] = $updateQb->expr()->emptyString(
|
||||
$name
|
||||
));
|
||||
);
|
||||
} else {
|
||||
$where->add($updateQb->expr()->eq(
|
||||
$where[] = $updateQb->expr()->eq(
|
||||
$name,
|
||||
$updateQb->createNamedParameter($value, $this->getType($value)),
|
||||
$this->getType($value)
|
||||
));
|
||||
);
|
||||
}
|
||||
}
|
||||
$updateQb->where($where);
|
||||
$updateQb->where($updateQb->expr()->andX(...$where));
|
||||
$affected = $updateQb->executeStatement();
|
||||
|
||||
if ($affected === 0 && !empty($updatePreconditionValues)) {
|
||||
|
|
|
|||
|
|
@ -838,9 +838,10 @@ class QueryBuilder implements IQueryBuilder {
|
|||
* // You can optionally programmatically build and/or expressions
|
||||
* $qb = $conn->getQueryBuilder();
|
||||
*
|
||||
* $or = $qb->expr()->orx();
|
||||
* $or->add($qb->expr()->eq('u.id', 1));
|
||||
* $or->add($qb->expr()->eq('u.id', 2));
|
||||
* $or = $qb->expr()->orx(
|
||||
* $qb->expr()->eq('u.id', 1),
|
||||
* $qb->expr()->eq('u.id', 2),
|
||||
* );
|
||||
*
|
||||
* $qb->update('users', 'u')
|
||||
* ->set('u.password', md5('password'))
|
||||
|
|
|
|||
|
|
@ -59,16 +59,16 @@ class TaskMapper extends QBMapper {
|
|||
->setMaxResults(1)
|
||||
->orderBy('last_updated', 'ASC');
|
||||
|
||||
if (count($taskTypes) > 0) {
|
||||
$filter = $qb->expr()->orX();
|
||||
if (!empty($taskTypes)) {
|
||||
$filter = [];
|
||||
foreach ($taskTypes as $taskType) {
|
||||
$filter->add($qb->expr()->eq('type', $qb->createPositionalParameter($taskType)));
|
||||
$filter[] = $qb->expr()->eq('type', $qb->createPositionalParameter($taskType));
|
||||
}
|
||||
|
||||
$qb->andWhere($filter);
|
||||
$qb->andWhere($qb->expr()->orX(...$filter));
|
||||
}
|
||||
|
||||
if (count($taskIdsToIgnore) > 0) {
|
||||
if (!empty($taskIdsToIgnore)) {
|
||||
$qb->andWhere($qb->expr()->notIn('id', $qb->createNamedParameter($taskIdsToIgnore, IQueryBuilder::PARAM_INT_ARRAY)));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -608,9 +608,10 @@ interface IQueryBuilder {
|
|||
* // You can optionally programmatically build and/or expressions
|
||||
* $qb = $conn->getQueryBuilder();
|
||||
*
|
||||
* $or = $qb->expr()->orx();
|
||||
* $or->add($qb->expr()->eq('u.id', 1));
|
||||
* $or->add($qb->expr()->eq('u.id', 2));
|
||||
* $or = $qb->expr()->orx(
|
||||
* $qb->expr()->eq('u.id', 1),
|
||||
* $qb->expr()->eq('u.id', 2),
|
||||
* );
|
||||
*
|
||||
* $qb->update('users', 'u')
|
||||
* ->set('u.password', md5('password'))
|
||||
|
|
|
|||
Loading…
Reference in a new issue