public function selectSub($query, $as)
{
if ($query instanceof Closure) {
$callback = $query;
$callback($query = $this->newQuery());
}
if ($query instanceof self) {
$bindings = $query->getBindings();
$query = $query->toSql();
} elseif (is_string($query)) {
$bindings = [];
} else {
throw new InvalidArgumentException();
}
return $this->selectRaw('(' . $query . ') as ' . $this->grammar->wrap($as), $bindings);
}