/** * @param array $knownAliases * * @throws QueryException */ private function verifyAllAliasesAreKnown(array $knownAliases) { foreach ($this->sqlParts['join'] as $fromAlias => $joins) { if (!isset($knownAliases[$fromAlias])) { throw QueryException::unknownAlias($fromAlias, array_keys($knownAliases)); } } }
/** * @param string $fromAlias * @param array $knownAliases * * @return string */ private function getSQLForJoins($fromAlias, array &$knownAliases) { $sql = ''; if (isset($this->sqlParts['join'][$fromAlias])) { foreach ($this->sqlParts['join'][$fromAlias] as $join) { if (array_key_exists($join['joinAlias'], $knownAliases)) { throw QueryException::nonUniqueAlias($join['joinAlias'], array_keys($knownAliases)); } $sql .= ' ' . strtoupper($join['joinType']) . ' JOIN ' . $join['joinTable'] . ' ' . $join['joinAlias'] . ' ON ' . (string) $join['joinCondition']; $knownAliases[$join['joinAlias']] = true; $sql .= $this->getSQLForJoins($join['joinAlias'], $knownAliases); } } return $sql; }
private function getSQLForSelect() { $query = 'SELECT ' . implode(', ', $this->sqlParts['select']) . ' FROM '; $fromClauses = array(); $joinsPending = true; $joinAliases = array(); // Loop through all FROM clauses foreach ($this->sqlParts['from'] as $from) { $fromClause = $from['table'] . ' ' . $from['alias']; if ($joinsPending && isset($this->sqlParts['join'][$from['alias']])) { foreach ($this->sqlParts['join'] as $joins) { foreach ($joins as $join) { $fromClause .= ' ' . strtoupper($join['joinType']) . ' JOIN ' . $join['joinTable'] . ' ' . $join['joinAlias'] . ' ON ' . (string) $join['joinCondition']; $joinAliases[$join['joinAlias']] = true; } } $joinsPending = false; } $fromClauses[$from['alias']] = $fromClause; } // loop through all JOIN clauses for validation purpose $knownAliases = array_merge($fromClauses, $joinAliases); foreach ($this->sqlParts['join'] as $fromAlias => $joins) { if (!isset($knownAliases[$fromAlias])) { throw QueryException::unknownAlias($fromAlias, array_keys($knownAliases)); } } $query .= implode(', ', $fromClauses) . ($this->sqlParts['where'] !== null ? ' WHERE ' . (string) $this->sqlParts['where'] : '') . ($this->sqlParts['groupBy'] ? ' GROUP BY ' . implode(', ', $this->sqlParts['groupBy']) : '') . ($this->sqlParts['having'] !== null ? ' HAVING ' . (string) $this->sqlParts['having'] : '') . ($this->sqlParts['orderBy'] ? ' ORDER BY ' . implode(', ', $this->sqlParts['orderBy']) : ''); return $this->maxResults === null && $this->firstResult == null ? $query : $this->connection->getDatabasePlatform()->modifyLimitQuery($query, $this->maxResults, $this->firstResult); }
/** * @return string * * @throws \Doctrine\DBAL\Query\QueryException */ private function getSQLForSelect() { $query = 'SELECT ' . implode(', ', $this->sqlParts['select']) . ' FROM '; $fromClauses = array(); $knownAliases = array(); // Loop through all FROM clauses foreach ($this->sqlParts['from'] as $from) { $knownAliases[$from['alias']] = true; $fromClause = $from['table'] . ' ' . $from['alias'] . $this->getSQLForJoins($from['alias'], $knownAliases); $fromClauses[$from['alias']] = $fromClause; } foreach ($this->sqlParts['join'] as $fromAlias => $joins) { if (!isset($knownAliases[$fromAlias])) { throw QueryException::unknownAlias($fromAlias, array_keys($knownAliases)); } } $query .= implode(', ', $fromClauses) . ($this->sqlParts['where'] !== null ? ' WHERE ' . (string) $this->sqlParts['where'] : '') . ($this->sqlParts['groupBy'] ? ' GROUP BY ' . implode(', ', $this->sqlParts['groupBy']) : '') . ($this->sqlParts['having'] !== null ? ' HAVING ' . (string) $this->sqlParts['having'] : '') . ($this->sqlParts['orderBy'] ? ' ORDER BY ' . implode(', ', $this->sqlParts['orderBy']) : ''); return $this->maxResults === null && $this->firstResult == null ? $query : $this->connection->getDatabasePlatform()->modifyLimitQuery($query, $this->maxResults, $this->firstResult); }