/** * 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; }