public function sql() : string
{
return \array_reduce($this->parts, function (string $sql, array $part) : string {
if ($this->isGroup($part['condition'])) {
// (...)
$statement = '(' . $part['condition']->sql() . ')';
} else {
// foo = ?
$statement = $part['condition'];
}
if ($sql) {
switch ($part['type']) {
case 'AND':
case 'OR':
$statement = $part['type'] . ' ' . $statement;
break;
default:
throw new RuntimeException(\sprintf('Invalid joiner %s', $part['type']));
}
}
return \trim($sql . ' ' . $statement);
}, '');
}