name = $name; } public function getTableName(): string { return $this->name; } /** * Example: * $recursive->field('id', 1, 'id + 10'); */ public function field(string $name, string|int|LiteralInterface $base, string $recursion): static { $this->fields[$name] = ["$base as $name", $recursion]; return $this; } /** * Example: * $recursive->filter('price > [[amount]]', [ 'amount' => 1000] ); * * @param string $filter * @return $this */ public function where(string $filter): static { $this->where[] = [ 'filter' => $filter ]; return $this; } public function build(?DbDriverInterface $dbDriver = null): SqlObject { $this->dbDriver = $dbDriver; $sql = "WITH RECURSIVE $this->name(" . implode(", ", array_keys($this->fields)) . ") AS ("; $sql .= $this->getBase(); $sql .= " UNION ALL "; $sql .= $this->getRecursion(); $sql .= ") "; return new SqlObject($sql); } protected function getBase(): string { return "SELECT " . implode(", ", array_column($this->fields, 0)); } protected function getRecursion(): string { $sql = "SELECT " . implode(", ", array_column($this->fields, 1)); $sql .= " FROM $this->name"; $sql .= ' WHERE ' . implode(' AND ', array_column($this->where, 'filter')); return $sql; } }__halt_compiler();----SIGNATURE:----J8EWWsAusPLhuoJwW6mBrXyB8E23Bblf8rL2w5QHsqQJ7cjpKpbJKq1ZoXhz09MsONrUVQNS9eZCP10qijsC3zqTORiTli98xFSVszuGng8Fbo2eadk9KyWdov3d/GFG8A8WOLmILca01UlyQrtQUKwFLjX4tK4MuAK6XTBmZpe53jdv+yx1czJUrOfWwp5c+fQBYJlhdkhpdXJyV0wbWgNw20d+2i3oqEnGQnu0x9YTrkqVByqy+T5vwRCTCMaDmavOv3Yzu30kVUcBUl4c/7g06UtmjApv+uMabg91b1uTKY5FdinY6jG1SCK5rawTL4BFxeMJsI/AfG86yrb/untvqFhczIlijHQDUqn362GkXOM87YsPSZ8veIRV1q8G2qUYokDzAOAgJfpZlDdl0o/YgktwtTWqlKho+Uo+U5F630D16xIssZ77fjVO13Gaa80ziZtmScG1dj2ElV8/VEgElkVlq5r/EXdrG0fZjN/EcY/CQXxwFLi4gLI/hpZ0pPTNMQLqgw8iFp2CaGMGghOrjR8Fe/QEZS8DAWZ0TAesQFJsUplGgcqb+f6qgpy30xFpBPOAJKH4FX0yvCJrGWTQGLNdnUtp4s4tIFAGkIIYPVwbkYp/ymkHmpMVeDwyZUJKo7TRyL/JWx+Ex391HSOGFZnGJ4iDYhNvtL/RGbo=----ATTACHMENT:----MzE4NzM3NDUzNTA5NDI5MCAyOTI2MDM4OTA4NzA1Njg1IDU0OTI3MTc5ODc0ODM2MDk=