Skip to content

Commit b73f255

Browse files
committed
Attempt to reconnect after goneaway error
1 parent aef5f50 commit b73f255

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

composer.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"infinityloop-dev/utils": "^2.1",
1616
"nette/utils": "^3.0",
1717
"nette/database": "^3.1",
18+
"nette/di": "^3.0",
1819
"nette/robot-loader": "^3.3",
1920
"symfony/console": "^5.2"
2021
},
@@ -43,5 +44,11 @@
4344
"psr-4": {
4445
"CoolBeans\\Tests\\": "tests/"
4546
}
47+
},
48+
"config": {
49+
"allow-plugins": {
50+
"dealerdirect/phpcodesniffer-composer-installer": true,
51+
"infection/extension-installer": true
52+
}
4653
}
4754
}

src/Bridge/Nette/Connection.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
declare(strict_types = 1);
4+
5+
namespace CoolBeans\Bridge\Nette;
6+
7+
final class Connection extends \Nette\Database\Connection
8+
{
9+
public function query(string $sql, ...$params): \Nette\Database\ResultSet
10+
{
11+
try {
12+
return parent::query($sql, $params);
13+
} catch (\PDOException $e) {
14+
if ($e->getCode() === 'HY000' && \str_contains($e->getMessage(), 'gone away')) {
15+
$this->reconnect();
16+
17+
return parent::query($sql, $params); // retry
18+
}
19+
20+
throw $e;
21+
}
22+
}
23+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
declare(strict_types = 1);
4+
5+
namespace CoolBeans\Bridge\Nette;
6+
7+
final class CoolbeansExtension extends \Nette\DI\CompilerExtension
8+
{
9+
public function beforeCompile() : void
10+
{
11+
$builder = $this->getContainerBuilder();
12+
13+
foreach ($builder->findByType(\Nette\Database\Connection::class) as $definition) {
14+
\assert($definition instanceof \Nette\DI\Definitions\ServiceDefinition);
15+
16+
$definition->setFactory(new \Nette\DI\Definitions\Statement(Connection::class, $definition->getFactory()->arguments));
17+
}
18+
}
19+
}

0 commit comments

Comments
 (0)