1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?php
- /**
- * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
- * SPDX-License-Identifier: AGPL-3.0-only
- */
- namespace OC\DB\QueryBuilder;
- use OCP\DB\QueryBuilder\ICompositeExpression;
- class CompositeExpression implements ICompositeExpression, \Countable {
- public const TYPE_AND = 'AND';
- public const TYPE_OR = 'OR';
- public function __construct(
- private string $type,
- private array $parts = [],
- ) {
- }
- /**
- * Adds multiple parts to composite expression.
- *
- * @param array $parts
- *
- * @return \OCP\DB\QueryBuilder\ICompositeExpression
- */
- public function addMultiple(array $parts = []): ICompositeExpression {
- foreach ($parts as $part) {
- $this->add($part);
- }
- return $this;
- }
- /**
- * Adds an expression to composite expression.
- *
- * @param mixed $part
- *
- * @return \OCP\DB\QueryBuilder\ICompositeExpression
- */
- public function add($part): ICompositeExpression {
- if ($part === null) {
- return $this;
- }
- if ($part instanceof self && count($part) === 0) {
- return $this;
- }
- $this->parts[] = $part;
- return $this;
- }
- /**
- * Retrieves the amount of expressions on composite expression.
- *
- * @return integer
- */
- public function count(): int {
- return count($this->parts);
- }
- /**
- * Returns the type of this composite expression (AND/OR).
- *
- * @return string
- */
- public function getType(): string {
- return $this->type;
- }
- /**
- * Retrieves the string representation of this composite expression.
- *
- * @return string
- */
- public function __toString(): string {
- if ($this->count() === 1) {
- return (string)$this->parts[0];
- }
- return '(' . implode(') ' . $this->type . ' (', $this->parts) . ')';
- }
- public function getParts(): array {
- return $this->parts;
- }
- }
|