/** * @internal * @param string|NULL column name or NULL to reload all columns * @param bool */ public function accessColumn($key, $selectColumn = TRUE) { if (!$this->cache) { return; } if ($key === NULL) { $this->accessedColumns = FALSE; $currentKey = key((array) $this->data); } elseif ($this->accessedColumns !== FALSE) { $this->accessedColumns[$key] = $selectColumn; } if ($selectColumn && !$this->sqlBuilder->getSelect() && $this->previousAccessedColumns && ($key === NULL || !isset($this->previousAccessedColumns[$key]))) { $this->previousAccessedColumns = array(); if ($this->sqlBuilder->getLimit()) { $generalCacheKey = $this->generalCacheKey; $sqlBuilder = $this->sqlBuilder; $primaryValues = array(); foreach ((array) $this->rows as $row) { $primary = $row->getPrimary(); $primaryValues[] = is_array($primary) ? array_values($primary) : $primary; } $this->emptyResultSet(FALSE); $this->sqlBuilder = clone $this->sqlBuilder; $this->sqlBuilder->setLimit(NULL, NULL); $this->wherePrimary($primaryValues); $this->generalCacheKey = $generalCacheKey; $this->execute(); $this->sqlBuilder = $sqlBuilder; } else { $this->emptyResultSet(FALSE); $this->execute(); } $this->dataRefreshed = TRUE; // move iterator to specific key if (isset($currentKey)) { while (key($this->data) !== $currentKey) { next($this->data); } } } }
/** * Sets limit clause, more calls rewrite old values. * @param int * @param int * @return self */ public function limit($limit, $offset = NULL) { $this->emptyResultSet(); $this->sqlBuilder->setLimit($limit, $offset); return $this; }