Skip to content

Commit

Permalink
Fix JOIN with no condition bug
Browse files Browse the repository at this point in the history
  • Loading branch information
BenMorel committed Jan 18, 2020
1 parent c950aab commit 73adb67
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 6 deletions.
7 changes: 4 additions & 3 deletions lib/Doctrine/DBAL/Query/QueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -1303,9 +1303,10 @@ private function getSQLForJoins(string $fromAlias, array &$knownAliases) : strin
if (array_key_exists($join->alias, $knownAliases)) {
throw NonUniqueAlias::new($join->alias, array_keys($knownAliases));
}
$sql .= ' ' . $join->type
. ' JOIN ' . $join->table . ' ' . $join->alias
. ' ON ' . ((string) $join->condition);
$sql .= ' ' . $join->type . ' JOIN ' . $join->table . ' ' . $join->alias;
if ($join->condition !== null) {
$sql .= ' ON ' . $join->condition;
}
$knownAliases[$join->alias] = true;
}

Expand Down
39 changes: 36 additions & 3 deletions tests/Doctrine/Tests/DBAL/Query/QueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,25 @@ public function testSelectWithLeftJoin() : void
self::assertEquals('SELECT u.*, p.* FROM users u LEFT JOIN phones p ON p.user_id = u.id', (string) $qb);
}

public function testSelectWithLeftJoinNoCondition() : void
{
$qb = new QueryBuilder($this->conn);

$qb->select('u.*', 'p.*')
->from('users', 'u')
->leftJoin('u', 'phones', 'p');

self::assertEquals('SELECT u.*, p.* FROM users u LEFT JOIN phones p', (string) $qb);
}

public function testSelectWithJoin() : void
{
$qb = new QueryBuilder($this->conn);
$expr = $qb->expr();

$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);
}
Expand All @@ -111,18 +122,40 @@ public function testSelectWithInnerJoin() : void
self::assertEquals('SELECT u.*, p.* FROM users u INNER JOIN phones p ON p.user_id = u.id', (string) $qb);
}

public function testSelectWithInnerJoinNoCondition() : void
{
$qb = new QueryBuilder($this->conn);

$qb->select('u.*', 'p.*')
->from('users', 'u')
->innerJoin('u', 'phones', 'p');

self::assertEquals('SELECT u.*, p.* FROM users u INNER JOIN phones p', (string) $qb);
}

public function testSelectWithRightJoin() : void
{
$qb = new QueryBuilder($this->conn);
$expr = $qb->expr();

$qb->select('u.*', 'p.*')
->from('users', 'u')
->rightJoin('u', 'phones', 'p', $expr->eq('p.user_id', 'u.id'));
->from('users', 'u')
->rightJoin('u', 'phones', 'p', $expr->eq('p.user_id', 'u.id'));

self::assertEquals('SELECT u.*, p.* FROM users u RIGHT JOIN phones p ON p.user_id = u.id', (string) $qb);
}

public function testSelectWithRightJoinNoCondition() : void
{
$qb = new QueryBuilder($this->conn);

$qb->select('u.*', 'p.*')
->from('users', 'u')
->rightJoin('u', 'phones', 'p');

self::assertEquals('SELECT u.*, p.* FROM users u RIGHT JOIN phones p', (string) $qb);
}

public function testSelectWithAndWhereConditions() : void
{
$qb = new QueryBuilder($this->conn);
Expand Down

0 comments on commit 73adb67

Please sign in to comment.