Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3d46b81

Browse files
committed
support decorated drivers by fetching true driver from the DatabasePlatform
1 parent ba7e97d commit 3d46b81

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111

1212
namespace Symfony\Component\Cache\Tests\Adapter;
1313

14+
use Doctrine\DBAL\Configuration;
15+
use Doctrine\DBAL\Connection;
16+
use Doctrine\DBAL\Driver;
1417
use Doctrine\DBAL\DriverManager;
1518
use PHPUnit\Framework\SkippedTestSuiteError;
1619
use Psr\Cache\CacheItemPoolInterface;
@@ -43,4 +46,68 @@ public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterfac
4346
{
4447
return new PdoAdapter(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]), '', $defaultLifetime);
4548
}
49+
50+
public function testConfigureSchemaDecoratedDbalDriver()
51+
{
52+
$connection = DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]);
53+
if (interface_exists(\Doctrine\DBAL\Driver\Middleware::class, false)) {
54+
$middleware = $this->createMock(\Doctrine\DBAL\Driver\Middleware::class);
55+
$middleware
56+
->method('wrap')
57+
->willReturn(new DriverWrapper($connection->getDriver()));
58+
59+
$config = new Configuration();
60+
$config->setMiddlewares([$middleware]);
61+
62+
$connection = DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile], $config);
63+
} else {
64+
$reflectionProperty = new \ReflectionProperty($connection, '_driver');
65+
$reflectionProperty->setAccessible(true);
66+
$reflectionProperty->setValue($connection, new DriverWrapper($reflectionProperty->getValue($connection)));
67+
$reflectionProperty->setAccessible(false);
68+
}
69+
70+
$adapter = new PdoAdapter($connection);
71+
$adapter->createTable();
72+
73+
$item = $adapter->getItem('key');
74+
$item->set('value');
75+
$this->assertTrue($adapter->save($item));
76+
}
77+
}
78+
79+
class DriverWrapper implements Driver
80+
{
81+
/** @var Driver $driver */
82+
private $driver;
83+
84+
public function __construct(Driver $driver)
85+
{
86+
$this->driver = $driver;
87+
}
88+
89+
public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
90+
{
91+
return $this->driver->connect($params, $username, $password, $driverOptions);
92+
}
93+
94+
public function getDatabasePlatform()
95+
{
96+
return $this->driver->getDatabasePlatform();
97+
}
98+
99+
public function getSchemaManager(Connection $conn)
100+
{
101+
return $this->driver->getSchemaManager($conn);
102+
}
103+
104+
public function getName()
105+
{
106+
return $this->driver->getName();
107+
}
108+
109+
public function getDatabase(Connection $conn)
110+
{
111+
return $this->driver->getDatabase($conn);
112+
}
46113
}

src/Symfony/Component/Cache/Traits/PdoTrait.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,15 @@ private function getConnection()
448448
case $driver instanceof \Doctrine\DBAL\Driver\PDO\SQLSrv\Driver:
449449
$this->driver = 'sqlsrv';
450450
break;
451+
case $driver instanceof \Doctrine\DBAL\Driver:
452+
$this->driver = [
453+
'mssql' => 'sqlsrv',
454+
'oracle' => 'oci',
455+
'postgresql' => 'pgsql',
456+
'sqlite' => 'sqlite',
457+
'mysql' => 'mysql',
458+
][$driver->getDatabasePlatform()->getName()] ?? \get_class($driver);
459+
break;
451460
default:
452461
$this->driver = \get_class($driver);
453462
break;

0 commit comments

Comments
 (0)