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:
parent
168971292d
commit
eaf2494d90
@ -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) {
|
||||
|
@ -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());
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user