From bf6655a534a6775d30cafa67bd801276bda1d98d Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 13 Aug 2024 23:45:21 +0200 Subject: =?UTF-8?q?VERSION=200.2=20doctrine=20ORM=20et=20entit=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Query/Expression/CompositeExpression.php | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php (limited to 'vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php') diff --git a/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php b/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php new file mode 100644 index 0000000..efe307a --- /dev/null +++ b/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php @@ -0,0 +1,98 @@ + + */ + private array $parts; + + /** @internal Use the and() / or() factory methods. */ + public function __construct( + private readonly string $type, + self|string $part, + self|string ...$parts, + ) { + $this->parts = array_merge([$part], array_values($parts)); + } + + public static function and(self|string $part, self|string ...$parts): self + { + return new self(self::TYPE_AND, $part, ...$parts); + } + + public static function or(self|string $part, self|string ...$parts): self + { + return new self(self::TYPE_OR, $part, ...$parts); + } + + /** + * Returns a new CompositeExpression with the given parts added. + */ + public function with(self|string $part, self|string ...$parts): self + { + $that = clone $this; + + $that->parts = array_merge($that->parts, [$part], array_values($parts)); + + return $that; + } + + /** + * Retrieves the amount of expressions on composite expression. + * + * @psalm-return int<0, max> + */ + public function count(): int + { + return count($this->parts); + } + + /** + * Retrieves the string representation of this composite expression. + */ + public function __toString(): string + { + if ($this->count() === 1) { + return (string) $this->parts[0]; + } + + return '(' . implode(') ' . $this->type . ' (', $this->parts) . ')'; + } + + /** + * Returns the type of this composite expression (AND/OR). + */ + public function getType(): string + { + return $this->type; + } +} -- cgit v1.2.3