/**
* @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);
}
}
}
}