/**
  * Parses the query and returns the SQL statement parts.
  *
  * @param Tx_Extbase_Persistence_QueryInterface $query The query
  * @return array The SQL statement parts
  */
 public function parseQuery(Tx_Extbase_Persistence_QueryInterface $query, array &$parameters)
 {
     $sql = array();
     $sql['keywords'] = array();
     $sql['tables'] = array();
     $sql['unions'] = array();
     $sql['fields'] = array();
     $sql['where'] = array();
     $sql['additionalWhereClause'] = array();
     $sql['orderings'] = array();
     $sql['limit'] = array();
     $source = $query->getSource();
     $this->parseSource($source, $sql, $parameters);
     $this->parseConstraint($query->getConstraint(), $source, $sql, $parameters);
     $this->parseOrderings($query->getOrderings(), $source, $sql);
     $this->parseLimitAndOffset($query->getLimit(), $query->getOffset(), $sql);
     $tableNames = array_unique(array_keys($sql['tables'] + $sql['unions']));
     foreach ($tableNames as $tableName) {
         if (is_string($tableName) && strlen($tableName) > 0) {
             $this->addAdditionalWhereClause($query->getQuerySettings(), $tableName, $sql);
         }
     }
     return $sql;
 }