Skip to content

Commit 8132e71

Browse files
committed
DBAL 4 compatibility
1 parent 6a482c4 commit 8132e71

File tree

6 files changed

+40
-14
lines changed

6 files changed

+40
-14
lines changed

docker/bin/refresh-mysql-database.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99

1010
$dbalContext = (new DbalConnectionFactory($dsn))->createContext();
1111

12-
$dbalContext->getDbalConnection()->getSchemaManager()->dropAndCreateDatabase($database);
13-
$dbalContext->getDbalConnection()->exec('USE '.$database);
12+
$dbalContext->getDbalConnection()->createSchemaManager()->dropDatabase($database);
13+
$dbalContext->getDbalConnection()->createSchemaManager()->createDatabase($database);
14+
$dbalContext->getDbalConnection()->executeQuery('USE '.$database);
1415
$dbalContext->createDataBaseTable();
1516

1617
echo 'MySQL Database is updated'.\PHP_EOL;

docker/bin/refresh-postgres-database.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88

99
$dbalContext = (new DbalConnectionFactory($dsn))->createContext();
1010

11-
$dbalContext->getDbalConnection()->getSchemaManager()->dropAndCreateDatabase('postgres');
11+
$database = 'postgres';
12+
$dbalContext->getDbalConnection()->createSchemaManager()->dropDatabase($database);
13+
$dbalContext->getDbalConnection()->createSchemaManager()->createDatabase($database);
1214
$dbalContext->createDataBaseTable();
1315

1416
echo 'Postgresql Database is updated'.\PHP_EOL;

pkg/dbal/DbalConnectionFactory.php

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\DBAL\Connection;
88
use Doctrine\DBAL\DriverManager;
9+
use Doctrine\DBAL\Tools\DsnParser;
910
use Enqueue\Dsn\Dsn;
1011
use Interop\Queue\ConnectionFactory;
1112
use Interop\Queue\Context;
@@ -142,13 +143,35 @@ private function parseDsn(string $dsn, ?array $config = null): array
142143
];
143144
}
144145

146+
if (class_exists(DsnParser::class)) { // DBAL >= 4
147+
if ($dsnHasProtocolOnly) {
148+
$dsn = $parsedDsn->getScheme().'://root@localhost';
149+
}
150+
151+
$doctrineSupported = [];
152+
foreach ($supported as $k => $v) {
153+
$doctrineSupported[$this->prepareDsnForDoctrine($k)] = $this->prepareDsnForDoctrine($v);
154+
}
155+
$dsnParser = new DsnParser($doctrineSupported);
156+
157+
return [
158+
'lazy' => true,
159+
'connection' => $dsnParser->parse($this->prepareDsnForDoctrine($dsn)),
160+
];
161+
}
162+
163+
$dsn = $dsnHasProtocolOnly ?
164+
$doctrineScheme.'://root@localhost' :
165+
str_replace($parsedDsn->getScheme(), $doctrineScheme, $dsn);
166+
145167
return [
146168
'lazy' => true,
147-
'connection' => [
148-
'url' => $dsnHasProtocolOnly ?
149-
$doctrineScheme.'://root@localhost' :
150-
str_replace($parsedDsn->getScheme(), $doctrineScheme, $dsn),
151-
],
169+
'connection' => ['url' => $dsn],
152170
];
153171
}
172+
173+
private function prepareDsnForDoctrine(string $dsn): string
174+
{
175+
return preg_replace('/^([a-z0-9]+)\+pdo/i', 'pdo-$1', $dsn);
176+
}
154177
}

pkg/dbal/DbalContext.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public function getDbalConnection(): Connection
209209

210210
public function createDataBaseTable(): void
211211
{
212-
$sm = $this->getDbalConnection()->getSchemaManager();
212+
$sm = $this->getDbalConnection()->createSchemaManager();
213213

214214
if ($sm->tablesExist([$this->getTableName()])) {
215215
return;
@@ -223,7 +223,7 @@ public function createDataBaseTable(): void
223223
$table->addColumn('headers', DbalType::TEXT, ['notnull' => false]);
224224
$table->addColumn('properties', DbalType::TEXT, ['notnull' => false]);
225225
$table->addColumn('redelivered', DbalType::BOOLEAN, ['notnull' => false]);
226-
$table->addColumn('queue', DbalType::STRING);
226+
$table->addColumn('queue', DbalType::STRING, ['length' => 255]);
227227
$table->addColumn('priority', DbalType::SMALLINT, ['notnull' => false]);
228228
$table->addColumn('delayed_until', DbalType::BIGINT, ['notnull' => false]);
229229
$table->addColumn('time_to_live', DbalType::BIGINT, ['notnull' => false]);

pkg/dbal/Tests/Spec/Mysql/CreateDbalContextTrait.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ protected function createDbalContext()
1616

1717
$context = $factory->createContext();
1818

19-
if ($context->getDbalConnection()->getSchemaManager()->tablesExist([$context->getTableName()])) {
20-
$context->getDbalConnection()->getSchemaManager()->dropTable($context->getTableName());
19+
if ($context->getDbalConnection()->createSchemaManager()->tablesExist([$context->getTableName()])) {
20+
$context->getDbalConnection()->createSchemaManager()->dropTable($context->getTableName());
2121
}
2222

2323
$context->createDataBaseTable();

pkg/dbal/Tests/Spec/Postgresql/CreateDbalContextTrait.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ protected function createDbalContext()
1616

1717
$context = $factory->createContext();
1818

19-
if ($context->getDbalConnection()->getSchemaManager()->tablesExist([$context->getTableName()])) {
20-
$context->getDbalConnection()->getSchemaManager()->dropTable($context->getTableName());
19+
if ($context->getDbalConnection()->createSchemaManager()->tablesExist([$context->getTableName()])) {
20+
$context->getDbalConnection()->createSchemaManager()->dropTable($context->getTableName());
2121
}
2222

2323
$context->createDataBaseTable();

0 commit comments

Comments
 (0)