/**
  * @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();
 }
 public function convert($select)
 {
     if (count($select) == 1) {
         $value = $this->getValueWithoutQuotes($select[0]);
         if ('*' === $value) {
             return [];
         }
         unset($value);
     }
     $s = [];
     foreach ($select as $item) {
         if ('colref' === $item['expr_type']) {
             $value = $this->getValueWithoutQuotes($item);
             if (isset($item['alias']) && is_array($item['alias'])) {
                 $value .= ' AS ' . $this->getValueWithoutQuotes($item['alias'], 'name');
             }
             $s[] = $value;
         } elseif ('aggregate_function' === $item['expr_type'] || 'function' === $item['expr_type']) {
             $function = strtoupper($item['base_expr']);
             $value = $function . '(' . implode(', ', array_column($item['sub_tree'], 'base_expr')) . ')';
             if (isset($item['alias']) && is_array($item['alias'])) {
                 $value .= ' AS ' . $item['alias']['name'];
             }
             $generator = new Generator('DB');
             $generator->addFunction('raw', [$value]);
             $s[] = $generator;
         }
     }
     if (is_array($s) && count($s)) {
         return [$this->format('select', $s)];
     }
     throw new \Exception('Not valid select');
 }
 /**
  * @return string
  */
 public function convert()
 {
     $parsed = $this->sqlParser->parse($this->sql);
     if (false === $parsed) {
         throw new \Exception('SQL query is not valid');
     }
     foreach ($parsed as $section => $data) {
         if ($this->converterFactory->canCreate($section)) {
             $converter = $this->converterFactory->create($section);
             $result = $converter->convert($data);
             foreach ($result as $function) {
                 $args = isset($function['args']) ? $function['args'] : [];
                 $this->generator->addFunction($function['name'], $args);
             }
         }
     }
     $this->generator->addFunction('get');
     return $this->generator->generate();
 }