1
0
mirror of https://github.com/dg/dibi.git synced 2025-02-22 18:02:25 +01:00

Connection: added config option onConnect (#303)

onConnect option is an array of SQL queries run by Connection::query() right after a database connection is established.
This commit is contained in:
Miloslav Hůla 2018-09-17 12:55:47 +02:00 committed by David Grudl
parent 168971292d
commit eaf2494d90
2 changed files with 34 additions and 0 deletions

View File

@ -47,6 +47,7 @@ class Connection implements IConnection
* - run (bool) => enable profiler?
* - file => file to log
* - substitutes (array) => map of driver specific substitutes (under development)
* - onConnect (array) => list of SQL queries to execute (by Connection::query()) after connection is established
* @param array $config connection parameters
* @throws Exception
*/
@ -90,6 +91,10 @@ class Connection implements IConnection
}
}
if (isset($config['onConnect']) && !is_array($config['onConnect'])) {
throw new \InvalidArgumentException("Configuration option 'onConnect' must be array.");
}
if (empty($config['lazy'])) {
$this->connect();
}
@ -133,6 +138,11 @@ class Connection implements IConnection
if ($event) {
$this->onEvent($event->done());
}
if (isset($this->config['onConnect'])) {
foreach ($this->config['onConnect'] as $sql) {
$this->query($sql);
}
}
} catch (DriverException $e) {
if ($event) {

View File

@ -50,3 +50,27 @@ test(function () use ($config) {
$conn->disconnect();
Assert::false($conn->isConnected());
});
test(function () use ($config) {
Assert::exception(function () use ($config) {
new Connection($config + ['onConnect' => '']);
}, InvalidArgumentException::class, "Configuration option 'onConnect' must be array.");
$e = Assert::exception(function () use ($config) {
new Connection($config + ['onConnect' => ['STOP']]);
}, Dibi\DriverException::class);
Assert::same('STOP', $e->getSql());
$e = Assert::exception(function () use ($config) {
new Connection($config + ['onConnect' => [['STOP %i', 123]]]);
}, Dibi\DriverException::class);
Assert::same('STOP 123', $e->getSql());
// lazy
$conn = new Connection($config + ['lazy' => true, 'onConnect' => ['STOP']]);
$e = Assert::exception(function () use ($conn) {
$conn->query('SELECT 1');
}, Dibi\DriverException::class);
Assert::same('STOP', $e->getSql());
});