Skip to content

Commit

Permalink
[DBAL-2644] Fix fetchAll(PDO::FETCH_COLUMN) on DB2 with Portability w…
Browse files Browse the repository at this point in the history
…rapper
  • Loading branch information
morozov committed Feb 10, 2017
1 parent 16be549 commit caaedea
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 3 deletions.
6 changes: 3 additions & 3 deletions lib/Doctrine/DBAL/Portability/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,11 @@ public function connect()
} elseif ($this->getDatabasePlatform()->getName() === "sqlite") {
$params['portability'] = $params['portability'] & self::PORTABILITY_SQLITE;
} elseif ($this->getDatabasePlatform()->getName() === "drizzle") {
$params['portability'] = self::PORTABILITY_DRIZZLE;
$params['portability'] = $params['portability'] & self::PORTABILITY_DRIZZLE;
} elseif ($this->getDatabasePlatform()->getName() === 'sqlanywhere') {
$params['portability'] = self::PORTABILITY_SQLANYWHERE;
$params['portability'] = $params['portability'] & self::PORTABILITY_SQLANYWHERE;
} elseif ($this->getDatabasePlatform()->getName() === 'db2') {
$params['portability'] = self::PORTABILITY_DB2;
$params['portability'] = $params['portability'] & self::PORTABILITY_DB2;
} elseif ($this->getDatabasePlatform()->getName() === 'mssql') {
$params['portability'] = $params['portability'] & self::PORTABILITY_SQLSRV;
} else {
Expand Down
12 changes: 12 additions & 0 deletions lib/Doctrine/DBAL/Portability/Statement.php
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,22 @@ public function fetchAll($fetchMode = null, $columnIndex = 0)
return $rows;
}

if ($fetchMode === PDO::FETCH_COLUMN) {
foreach ($rows as $num => $row) {
$rows[$num] = array($row);
}
}

foreach ($rows as $num => $row) {
$rows[$num] = $this->fixRow($row, $iterateRow, $fixCase);
}

if ($fetchMode === PDO::FETCH_COLUMN) {
foreach ($rows as $num => $row) {
$rows[$num] = $row[0];
}
}

return $rows;
}

Expand Down
35 changes: 35 additions & 0 deletions tests/Doctrine/Tests/DBAL/Functional/PortabilityTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,4 +144,39 @@ public function testPortabilitySqlServer()

$this->assertEquals($portability, $connection->getPortability());
}

/**
* @dataProvider fetchAllColumnProvider
*/
public function testFetchAllColumn($field, array $expected)
{
$conn = $this->getPortableConnection();
$stmt = $conn->query('SELECT ' . $field . ' FROM portability_table');

$column = $stmt->fetchAll(PDO::FETCH_COLUMN);
$this->assertEquals($expected, $column);
}

public static function fetchAllColumnProvider()
{
return array(
'int' => array(
'Test_Int',
array(1, 2),
),
'string' => array(
'Test_String',
array('foo', 'foo'),
),
);
}

public function testFetchAllNullColumn()
{
$conn = $this->getPortableConnection();
$stmt = $conn->query('SELECT Test_Null FROM portability_table');

$column = $stmt->fetchAll(PDO::FETCH_COLUMN);
$this->assertSame(array(null, null), $column);
}
}

0 comments on commit caaedea

Please sign in to comment.