/**
  * It parses the given SQL statement and generates a detailled 
  * output array for every part of the statement. The method can 
  * also generate [position] fields within the output, which hold 
  * the character position for every statement part. The calculation 
  * of the positions needs some time, if you don't need positions in
  * your application, set the parameter to false.
  * 
  * @param String  $sql           The SQL statement.
  * @param boolean $calcPositions True, if the output should contain [position], false otherwise.
  * 
  * @return array An associative array with all meta information about the SQL statement.
  */
 public function parse($sql, $calcPositions = false)
 {
     $processor = new DefaultProcessor();
     $queries = $processor->process($sql);
     // calc the positions of some important tokens
     if ($calcPositions) {
         $calculator = new PositionCalculator();
         $queries = $calculator->setPositionsWithinSQL($sql, $queries);
     }
     // store the parsed queries
     $this->parsed = $queries;
     return $this->parsed;
 }
 public function parse($sql, $calcPositions = false)
 {
     #lex the SQL statement
     $inputArray = $this->split_sql($sql);
     #This is the highest level lexical analysis.  This is the part of the
     #code which finds UNION and UNION ALL query parts
     $queries = $this->processUnion($inputArray);
     # If there was no UNION or UNION ALL in the query, then the query is
     # stored at $queries[0].
     if (!$this->isUnion($queries)) {
         $queries = $this->processSQL($queries[0]);
     }
     # calc the positions of some important tokens
     if ($calcPositions) {
         $calculator = new PositionCalculator();
         $queries = $calculator->setPositionsWithinSQL($sql, $queries);
     }
     # store the parsed queries
     $this->parsed = $queries;
     return $this->parsed;
 }