From 22b5494fb9065cebe7198a9c7ffae6863f83ae0a Mon Sep 17 00:00:00 2001 From: Benjamin Morel Date: Sun, 19 Jan 2020 11:22:14 +0100 Subject: [PATCH] Fix JOIN with no condition bug --- lib/Doctrine/DBAL/Query/QueryBuilder.php | 8 +++++--- .../Doctrine/Tests/DBAL/Query/QueryBuilderTest.php | 13 ++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/DBAL/Query/QueryBuilder.php b/lib/Doctrine/DBAL/Query/QueryBuilder.php index 587e26656ab..3ad7ebdc3cd 100644 --- a/lib/Doctrine/DBAL/Query/QueryBuilder.php +++ b/lib/Doctrine/DBAL/Query/QueryBuilder.php @@ -1327,9 +1327,11 @@ private function getSQLForJoins($fromAlias, array &$knownAliases) 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']); + $sql .= ' ' . strtoupper($join['joinType']) + . ' JOIN ' . $join['joinTable'] . ' ' . $join['joinAlias']; + if ($join['joinCondition'] !== null) { + $sql .= ' ON ' . $join['joinCondition']; + } $knownAliases[$join['joinAlias']] = true; } diff --git a/tests/Doctrine/Tests/DBAL/Query/QueryBuilderTest.php b/tests/Doctrine/Tests/DBAL/Query/QueryBuilderTest.php index a210ef2fe73..7ac89b5ae79 100644 --- a/tests/Doctrine/Tests/DBAL/Query/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/DBAL/Query/QueryBuilderTest.php @@ -92,11 +92,22 @@ public function testSelectWithJoin() : void $qb->select('u.*', 'p.*') ->from('users', 'u') - ->Join('u', 'phones', 'p', $expr->eq('p.user_id', 'u.id')); + ->join('u', 'phones', 'p', $expr->eq('p.user_id', 'u.id')); self::assertEquals('SELECT u.*, p.* FROM users u INNER JOIN phones p ON p.user_id = u.id', (string) $qb); } + public function testSelectWithJoinNoCondition() : void + { + $qb = new QueryBuilder($this->conn); + + $qb->select('u.*', 'p.*') + ->from('users', 'u') + ->join('u', 'phones', 'p'); + + self::assertEquals('SELECT u.*, p.* FROM users u INNER JOIN phones p', (string) $qb); + } + public function testSelectWithInnerJoin() : void { $qb = new QueryBuilder($this->conn);