protected function execute() { if ($this->rows !== NULL) { return; } $referencing = & $this->refTable->referencing[$this->getSql()]; if ($referencing === NULL) { $limit = $this->limit; $rows = count($this->refTable->rows); if ($this->limit && $rows > 1) { $this->limit = NULL; } parent::execute(); $this->limit = $limit; $referencing = array(); $offset = array(); foreach ($this->rows as $key => $row) { $ref = & $referencing[$row[$this->column]]; $skip = & $offset[$row[$this->column]]; if ($limit === NULL || $rows <= 1 || (count($ref) < $limit && $skip >= $this->offset)) { $ref[$key] = $row; } else { unset($this->rows[$key]); } $skip++; unset($ref, $skip); } } $this->data = & $referencing[$this->active]; if ($this->data === NULL) { $this->data = array(); } }