Skip to content

Commit

Permalink
Connection: added config option onConnect (#303)
Browse files Browse the repository at this point in the history
onConnect option is an array of SQL queries run by Connection::query() right after a database connection is established.
  • Loading branch information
milo authored and dg committed Sep 17, 2018
1 parent 1689712 commit eaf2494
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/Dibi/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down Expand Up @@ -90,6 +91,10 @@ public function __construct($config, string $name = null)
}
}

if (isset($config['onConnect']) && !is_array($config['onConnect'])) {
throw new \InvalidArgumentException("Configuration option 'onConnect' must be array.");
}

if (empty($config['lazy'])) {
$this->connect();
}
Expand Down Expand Up @@ -133,6 +138,11 @@ final public function connect(): void
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) {
Expand Down
24 changes: 24 additions & 0 deletions tests/dibi/Connection.connect.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -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());
});

0 comments on commit eaf2494

Please sign in to comment.