/**
* @throws \Exception
*
* @return string
*/
public function convert()
{
$parsed = $this->sqlParser->parse($this->sql);
if (false === $parsed) {
throw new \Exception('SQL query is not valid');
}
$results = [];
foreach ($parsed as $section => $data) {
if ($this->converterFactory->canCreate($section)) {
$converter = $this->converterFactory->create($section);
$results = array_merge($results, $converter->convert($data));
}
}
$table = current(array_filter($results, function ($item) {
return 'table' === $item['name'];
}));
unset($results[array_search($table, $results)]);
array_unshift($results, $table);
foreach ($results as $function) {
$args = isset($function['args']) ? $function['args'] : [];
$this->generator->addFunction($function['name'], $args);
}
$this->generator->addFunction('get');
return $this->generator->generate();
}