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:----s95cfjLGIINkVbrFqnCM0d8FEftRasvDXZAlWqa8NjpgXJ1fCHk3dabYLELll6wpPm2zCDPplsI8z3bOgOdlQqtEh3KNEKlUKhzsYDztWLfcMd9G76Zt1p4niLCFvX0Cq28syTWz7fR1/VXDQ+p0ErAfpfB0VHEbz05ooTfF2YPK3sR/naDj33fA3qqFVDSFswwyeScrjecRE84J1HWk2XUk5SdRr3oybuvEjNujGHvCNXMM6yiujK8UeJgYyL9eXCk4iuGc/6InUOXdLXhovQ1CulNDyVjPXmwNQQ5mvb4Ujj2PcdhWJnclWHjyX2woKOU6d/AmR2r1TSLwTBmtbEKIbolmXSl9ipb6cpXF8QTnVAfMP6TlkhwLfsSj4oX1SjeA/16V4rIii8xSO0Cn9zCHmMNq3OujdxidNEKkAOg57KdVkAsreSE+dRTB6U43MKPrNadSt+6GnEhAMKLLZnkcUadel0hhtpLlKl7EGaH+RBvpazVb0nwiOW2GcOfzaIWuPWnOzAq/TdZezepmyxx/VSxnLpw906lsuOcEF5CxFK2P4BLbWQeCKd2XLK2v4f04YAOOXpb1dYEbd/M0Hzh8gThL7zaQqhLjk1zGPUQaYieFMX/5clq4DQtON5BLGavYGYrghSMkA+HFylIKuETOHskMjgDd38cXOI96PJQ=----ATTACHMENT:----OTY1OTIxMzk1MTU2MjgyMCA5NDgwMTU4NjEyMzE1NzAzIDI3MTY0OTQ1OTc1Nzg3NzE=