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:----FLTSWoTED4ABWXMjkTykv2SX8rEkEt7YscD+IRvF3HBzesBGMVa4N4O5Uh49sKwUJDuSnMIP80EWkSvnWMuYnyyhtDBnrv53S8Wv4/kTx2ByWNgfHIX26NrR+rYnifkwSMxScxpJDLvo+8sY7fQxh+3jNcwt+CPsBaTBDD+iY/xL8EwMTiRee7UlyhfeGVN6hK5rEHdCOtEaLsOCprCaDr3CdGbbt6CdJnTPgEePzDNklPBxSdTgKyOVco0ALWZi5StFUym1qPNUWRS15oB+jk4ukNoLpLvy6h8nmk5Z035KALG4B3AXCyKmJ2uNGxdUqkFbMDZEV8NYqfgxFRFZT2b5r3u0iOSK46n2zcC3/dubnEu4B+TYznHEiZl8WTiPXg5Pdlor/+Cv7Q2RR7KOa3JYx6EpoMK28BzX6/vuf0Vwurj8LQBD6K8kJuzOh5Qe7CSquSnZ3VgsI8J2RU/xI+4rDA2odQKCc4ScT54i0gsiPmDuxFsqaxe3m+wEfiz297S5UTw+J5uT+spZRLzRB4oXtq/93NsLhzwhF+RPN5f3mM2akdIYp9tdD5/HHrYHDTHNLcHChAIeLniio5ii3YKExKf1W5gxlSTsVUHAO7rMJt47QyGTxK3YFoJkW8zMN9nnIRItsailN957G/OG/fxCZPs4KM5PqqOdNsWxHOU=----ATTACHMENT:----ODc1NDkxODE3OTQ0NTk2NSA5ODQzMjY4NTQzMjg5Mjg0IDUyMDg2OTIyNzE4NzExMjU=