diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 57786979..69107972 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,6 +46,7 @@ jobs: - { php: '8.1', packages: 'aws/aws-sdk-php:^3.158', phpspec: 'spec/Gaufrette/Adapter/AwsS3Spec.php' } - { php: '8.1', packages: 'google/apiclient:^2.12', phpspec: 'spec/Gaufrette/Adapter/GoogleCloudStorageSpec.php' } - { php: '8.1', packages: 'doctrine/dbal:^2.3', phpspec: 'spec/Gaufrette/Adapter/DoctrineDbalSpec.php' } + - { php: '8.1', packages: 'doctrine/dbal:^3.4', phpspec: 'spec/Gaufrette/Adapter/DoctrineDbalSpec.php' } - { php: '8.1', packages: 'league/flysystem:^1.0', phpspec: 'spec/Gaufrette/Adapter/FlysystemSpec.php' } - { php: '8.1', packages: 'microsoft/azure-storage-blob:^1.0', phpspec: 'spec/Gaufrette/Adapter/AzureBlobStore' } - { php: '8.1', packages: 'mongodb/mongodb:^1.1', phpspec: 'spec/Gaufrette/Adapter/GridFSSpec.php' } diff --git a/Makefile b/Makefile index fc29c04e..b4942d83 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,7 @@ docker.all-deps: docker.deps ## Install dependencies docker/run-task php${PHP_VERSION} composer require --no-update \ aws/aws-sdk-php:^3.158 \ google/apiclient:^2.12 \ - doctrine/dbal:^2.3 \ + doctrine/dbal:^3.4 \ league/flysystem:^1.0 \ microsoft/azure-storage-blob:^1.0 \ phpseclib/phpseclib:^2.0 \ @@ -67,7 +67,7 @@ require-all-legacy: # kept for compatibility with the old CI config, to be remov composer require --no-update \ aws/aws-sdk-php:^3.158 \ google/apiclient:^2.12 \ - doctrine/dbal:^2.3 \ + doctrine/dbal:^3.4 \ league/flysystem:^1.0 \ microsoft/azure-storage-blob:^1.0 \ phpseclib/phpseclib:^2.0 \ diff --git a/src/Gaufrette/Adapter/DoctrineDbal.php b/src/Gaufrette/Adapter/DoctrineDbal.php index 337b1de6..1d725e3f 100644 --- a/src/Gaufrette/Adapter/DoctrineDbal.php +++ b/src/Gaufrette/Adapter/DoctrineDbal.php @@ -88,7 +88,12 @@ public function checksum($key) */ public function exists($key) { - return (boolean) $this->connection->fetchColumn( + $method = 'fetchOne'; // dbal 3.x + if (!method_exists($this->connection, $method)) { + $method = 'fetchColumn'; // dbal 2.x + } + + return (boolean) $this->connection->$method( sprintf( 'SELECT COUNT(%s) FROM %s WHERE %s = :key', $this->getQuotedColumn('key'), @@ -153,7 +158,12 @@ public function isDirectory($key) private function getColumnValue($key, $column) { - $value = $this->connection->fetchColumn( + $method = 'fetchOne'; // dbal 3.x + if (!method_exists($this->connection, $method)) { + $method = 'fetchColumn'; // dbal 2.x + } + + $value = $this->connection->$method( sprintf( 'SELECT %s FROM %s WHERE %s = :key', $this->getQuotedColumn($column), @@ -173,7 +183,12 @@ public function listKeys($prefix = '') { $prefix = trim($prefix); - $keys = $this->connection->fetchAll( + $method = 'fetchAllAssociative'; // dbal 3.x + if (!method_exists($this->connection, 'fetchAllAssociative')) { + $method = 'fetchAll'; // dbal 2.x + } + + $keys = $this->connection->$method( sprintf( 'SELECT %s AS _key FROM %s WHERE %s LIKE :pattern', $this->getQuotedColumn('key'), diff --git a/tests/Gaufrette/Functional/Adapter/DoctrineDbalTest.php b/tests/Gaufrette/Functional/Adapter/DoctrineDbalTest.php index df53f63c..d2ebf64a 100644 --- a/tests/Gaufrette/Functional/Adapter/DoctrineDbalTest.php +++ b/tests/Gaufrette/Functional/Adapter/DoctrineDbalTest.php @@ -29,7 +29,14 @@ protected function setUp(): void $schema = $this->connection->getSchemaManager()->createSchema(); $table = $schema->createTable('gaufrette'); - $table->addColumn('key', 'string', ['unique' => true]); + $column = $table->addColumn('key', 'string'); + if (method_exists($column, 'setPlatformOption')) { + // dbal 3.4+ + $column->setPlatformOption('unique', true); + } else { + // dbal 2.x + $column->setUnique(true); + } $table->addColumn('content', 'blob'); $table->addColumn('mtime', 'integer'); $table->addColumn('checksum', 'string', ['length' => 32]);