diff --git a/spec/Gaufrette/Adapter/DoctrineDbalSpec.php b/spec/Gaufrette/Adapter/DoctrineDbalSpec.php index 091ee157..24f1d309 100644 --- a/spec/Gaufrette/Adapter/DoctrineDbalSpec.php +++ b/spec/Gaufrette/Adapter/DoctrineDbalSpec.php @@ -6,7 +6,7 @@ require_once 'functions.php'; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Driver\Statement; +use Doctrine\DBAL\Result; use PhpSpec\ObjectBehavior; use Prophecy\Argument; @@ -46,13 +46,18 @@ function it_checks_if_file_exists(Connection $connection) return sprintf('"%s"', $argument[0]); }); + $method = 'fetchOne'; // dbal 3.x + if (!method_exists(Connection::class, 'fetchAllAssociative')) { + $method = 'fetchColumn'; // BC layer for dbal 2.x + } + $connection - ->fetchColumn('SELECT COUNT("key") FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) + ->$method('SELECT COUNT("key") FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) ->willReturn(12); $this->exists('filename')->shouldReturn(true); $connection - ->fetchColumn('SELECT COUNT("key") FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) + ->$method('SELECT COUNT("key") FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) ->willReturn(0); $this->exists('filename')->shouldReturn(false); } @@ -67,8 +72,14 @@ function it_writes_to_new_file(Connection $connection) ->will(function ($argument) { return sprintf('"%s"', $argument[0]); }); + + $method = 'fetchOne'; // dbal 3.x + if (!method_exists(Connection::class, 'fetchAllAssociative')) { + $method = 'fetchColumn'; // BC layer for dbal 2.x + } + $connection - ->fetchColumn('SELECT COUNT("key") FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) + ->$method('SELECT COUNT("key") FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) ->willReturn(false); $connection ->insert( @@ -90,13 +101,18 @@ function it_writes_to_new_file(Connection $connection) */ function it_write_file(Connection $connection) { + $method = 'fetchOne'; // dbal 3.x + if (!method_exists(Connection::class, 'fetchAllAssociative')) { + $method = 'fetchColumn'; // BC layer for dbal 2.x + } + $connection ->quoteIdentifier(Argument::any()) ->will(function ($argument) { return sprintf('"%s"', $argument[0]); }); $connection - ->fetchColumn('SELECT COUNT("key") FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) + ->$method('SELECT COUNT("key") FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) ->willReturn(true); $connection ->update( @@ -120,13 +136,18 @@ function it_write_file(Connection $connection) */ function it_reads_file(Connection $connection) { + $method = 'fetchOne'; // dbal 3.x + if (!method_exists(Connection::class, 'fetchAllAssociative')) { + $method = 'fetchColumn'; // BC layer for dbal 2.x + } + $connection ->quoteIdentifier(Argument::any()) ->will(function ($argument) { return sprintf('"%s"', $argument[0]); }); $connection - ->fetchColumn('SELECT "content" FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) + ->$method('SELECT "content" FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) ->willReturn('some content'); $this->read('filename')->shouldReturn('some content'); @@ -137,13 +158,18 @@ function it_reads_file(Connection $connection) */ function it_calculates_checksum(Connection $connection) { + $method = 'fetchOne'; // dbal 3.x + if (!method_exists(Connection::class, 'fetchAllAssociative')) { + $method = 'fetchColumn'; // BC layer for dbal 2.x + } + $connection ->quoteIdentifier(Argument::any()) ->will(function ($argument) { return sprintf('"%s"', $argument[0]); }); $connection - ->fetchColumn('SELECT "checksum" FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) + ->$method('SELECT "checksum" FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) ->willReturn(1234); $this->checksum('filename')->shouldReturn(1234); @@ -154,13 +180,18 @@ function it_calculates_checksum(Connection $connection) */ function it_gets_mtime(Connection $connection) { + $method = 'fetchOne'; // dbal 3.x + if (!method_exists(Connection::class, 'fetchAllAssociative')) { + $method = 'fetchColumn'; // BC layer for dbal 2.x + } + $connection ->quoteIdentifier(Argument::any()) ->will(function ($argument) { return sprintf('"%s"', $argument[0]); }); $connection - ->fetchColumn('SELECT "mtime" FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) + ->$method('SELECT "mtime" FROM "someTableName" WHERE "key" = :key', ['key' => 'filename']) ->willReturn(1234); $this->mtime('filename')->shouldReturn(1234); @@ -194,11 +225,19 @@ function it_renames_file(Connection $connection) /** * @param \Doctrine\DBAL\Connection $connection - * @param \Doctrine\DBAL\Statement $stmt */ - function it_get_keys(Connection $connection, Statement $stmt) + function it_get_keys(Connection $connection, $result) { - $stmt->fetchAll(\PDO::FETCH_COLUMN)->willReturn(['filename', 'filename1', 'filename2']); + if (class_exists(Result::class)) { + // dbal 3.x + $result->beADoubleOf(Result::class); + $result->fetchAllNumeric()->willReturn(['filename', 'filename1', 'filename2']); + } else { + // BC layer for dbal 2.x + $result->beADoubleOf(\Doctrine\DBAL\Statement::class); + $result->fetchAll(\PDO::FETCH_COLUMN)->willReturn(['filename', 'filename1', 'filename2']); + } + $connection ->quoteIdentifier(Argument::any()) ->will(function ($argument) { @@ -206,7 +245,7 @@ function it_get_keys(Connection $connection, Statement $stmt) }); $connection ->executeQuery('SELECT "key" FROM "someTableName"') - ->willReturn($stmt); + ->willReturn($result); $this->keys()->shouldReturn(['filename', 'filename1', 'filename2']); } diff --git a/src/Gaufrette/Adapter/DoctrineDbal.php b/src/Gaufrette/Adapter/DoctrineDbal.php index 1d725e3f..af3b4159 100644 --- a/src/Gaufrette/Adapter/DoctrineDbal.php +++ b/src/Gaufrette/Adapter/DoctrineDbal.php @@ -2,6 +2,7 @@ namespace Gaufrette\Adapter; +use Doctrine\DBAL\Result; use Gaufrette\Adapter; use Gaufrette\Util; use Doctrine\DBAL\Connection; @@ -52,6 +53,12 @@ public function keys() $this->getQuotedTable() )); + if (class_exists(Result::class)) { + // dbal 3.x + return $stmt->fetchAllNumeric(); + } + + // BC layer for dbal 2.x return $stmt->fetchAll(\PDO::FETCH_COLUMN); } @@ -89,8 +96,8 @@ public function checksum($key) public function exists($key) { $method = 'fetchOne'; // dbal 3.x - if (!method_exists($this->connection, $method)) { - $method = 'fetchColumn'; // dbal 2.x + if (!method_exists(Connection::class, $method)) { + $method = 'fetchColumn'; // BC layer for dbal 2.x } return (boolean) $this->connection->$method( @@ -159,8 +166,8 @@ public function isDirectory($key) private function getColumnValue($key, $column) { $method = 'fetchOne'; // dbal 3.x - if (!method_exists($this->connection, $method)) { - $method = 'fetchColumn'; // dbal 2.x + if (!method_exists(Connection::class, $method)) { + $method = 'fetchColumn'; // BC layer for dbal 2.x } $value = $this->connection->$method( @@ -184,8 +191,8 @@ public function listKeys($prefix = '') $prefix = trim($prefix); $method = 'fetchAllAssociative'; // dbal 3.x - if (!method_exists($this->connection, 'fetchAllAssociative')) { - $method = 'fetchAll'; // dbal 2.x + if (!method_exists(Connection::class, 'fetchAllAssociative')) { + $method = 'fetchAll'; // BC layer for dbal 2.x } $keys = $this->connection->$method(