public function traverse(callable $visitor)
{
if ($this->_query) {
return;
}
if (!$this->_castedExpressions) {
$this->_processExpressions();
}
foreach ($this->_values as $v) {
if ($v instanceof ExpressionInterface) {
$v->traverse($visitor);
}
if (!is_array($v)) {
continue;
}
foreach ($v as $column => $field) {
if ($field instanceof ExpressionInterface) {
$visitor($field);
$field->traverse($visitor);
}
}
}
}