mirror of
https://github.com/dg/dibi.git
synced 2025-02-23 02:12: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?
|
* - run (bool) => enable profiler?
|
||||||
* - file => file to log
|
* - file => file to log
|
||||||
* - substitutes (array) => map of driver specific substitutes (under development)
|
* - 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
|
* @param array $config connection parameters
|
||||||
* @throws Exception
|
* @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'])) {
|
if (empty($config['lazy'])) {
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
@ -133,6 +138,11 @@ class Connection implements IConnection
|
|||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done());
|
$this->onEvent($event->done());
|
||||||
}
|
}
|
||||||
|
if (isset($this->config['onConnect'])) {
|
||||||
|
foreach ($this->config['onConnect'] as $sql) {
|
||||||
|
$this->query($sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} catch (DriverException $e) {
|
} catch (DriverException $e) {
|
||||||
if ($event) {
|
if ($event) {
|
||||||
|
@ -50,3 +50,27 @@ test(function () use ($config) {
|
|||||||
$conn->disconnect();
|
$conn->disconnect();
|
||||||
Assert::false($conn->isConnected());
|
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