public function accessColumn($key, $selectColumn = TRUE)
{
if (!$this->cache) {
return FALSE;
}
if ($key === NULL) {
$this->accessedColumns = FALSE;
$currentKey = key((array) $this->data);
} elseif ($this->accessedColumns !== FALSE) {
$this->accessedColumns[$key] = $selectColumn;
}
if ($selectColumn && $this->previousAccessedColumns && ($key === NULL || !isset($this->previousAccessedColumns[$key])) && !$this->sqlBuilder->getSelect()) {
if ($this->sqlBuilder->getLimit()) {
$generalCacheKey = $this->generalCacheKey;
$sqlBuilder = $this->sqlBuilder;
$primaryValues = [];
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->previousAccessedColumns = [];
$this->execute();
$this->sqlBuilder = $sqlBuilder;
} else {
$this->emptyResultSet(FALSE);
$this->previousAccessedColumns = [];
$this->execute();
}
$this->dataRefreshed = TRUE;
// move iterator to specific key
if (isset($currentKey)) {
while (key($this->data) !== NULL && key($this->data) !== $currentKey) {
next($this->data);
}
}
}
return $this->dataRefreshed;
}