diff --git a/src/Dibi/Bridges/Tracy/Panel.php b/src/Dibi/Bridges/Tracy/Panel.php index 0f208101..f7602ad2 100644 --- a/src/Dibi/Bridges/Tracy/Panel.php +++ b/src/Dibi/Bridges/Tracy/Panel.php @@ -110,10 +110,10 @@ class Panel implements Tracy\IBarPanel $connection = $event->connection; $explain = null; // EXPLAIN is called here to work SELECT FOUND_ROWS() if ($this->explain && $event->type === Event::SELECT) { + $backup = [$connection->onEvent, \dibi::$numOfQueries, \dibi::$totalTime]; + $connection->onEvent = null; + $cmd = is_string($this->explain) ? $this->explain : ($connection->getConfig('driver') === 'oracle' ? 'EXPLAIN PLAN FOR' : 'EXPLAIN'); try { - $backup = [$connection->onEvent, \dibi::$numOfQueries, \dibi::$totalTime]; - $connection->onEvent = null; - $cmd = is_string($this->explain) ? $this->explain : ($connection->getConfig('driver') === 'oracle' ? 'EXPLAIN PLAN FOR' : 'EXPLAIN'); $explain = @Helpers::dump($connection->nativeQuery("$cmd $event->sql"), true); } catch (Dibi\Exception $e) { } diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php index d86d808f..0411bcc1 100644 --- a/src/Dibi/Connection.php +++ b/src/Dibi/Connection.php @@ -131,8 +131,9 @@ class Connection */ public function __destruct() { - // disconnects and rolls back transaction - do not rely on auto-disconnect and rollback! - $this->connected && $this->driver->getResource() && $this->disconnect(); + if ($this->connected && $this->driver->getResource()) { + $this->disconnect(); + } } @@ -146,10 +147,14 @@ class Connection try { $this->driver->connect($this->config); $this->connected = true; - $event && $this->onEvent($event->done()); + if ($event) { + $this->onEvent($event->done()); + } } catch (Exception $e) { - $event && $this->onEvent($event->done($e)); + if ($event) { + $this->onEvent($event->done($e)); + } throw $e; } } @@ -211,7 +216,9 @@ class Connection */ final public function getDriver() { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } return $this->driver; } @@ -285,7 +292,9 @@ class Connection */ protected function translateArgs($args) { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } if (!$this->translator) { $this->translator = new Translator($this); } @@ -302,7 +311,9 @@ class Connection */ final public function nativeQuery($sql) { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } \dibi::$sql = $sql; $event = $this->onEvent ? new Event($this, Event::QUERY, $sql) : null; @@ -310,7 +321,9 @@ class Connection $res = $this->driver->query($sql); } catch (Exception $e) { - $event && $this->onEvent($event->done($e)); + if ($event) { + $this->onEvent($event->done($e)); + } throw $e; } @@ -320,7 +333,9 @@ class Connection $res = $this->driver->getAffectedRows(); } - $event && $this->onEvent($event->done($res)); + if ($event) { + $this->onEvent($event->done($res)); + } return $res; } @@ -332,7 +347,9 @@ class Connection */ public function getAffectedRows() { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } $rows = $this->driver->getAffectedRows(); if (!is_int($rows) || $rows < 0) { throw new Exception('Cannot retrieve number of affected rows.'); @@ -359,7 +376,9 @@ class Connection */ public function getInsertId($sequence = null) { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } $id = $this->driver->getInsertId($sequence); if ($id < 1) { throw new Exception('Cannot retrieve last generated ID.'); @@ -385,14 +404,20 @@ class Connection */ public function begin($savepoint = null) { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } $event = $this->onEvent ? new Event($this, Event::BEGIN, $savepoint) : null; try { $this->driver->begin($savepoint); - $event && $this->onEvent($event->done()); + if ($event) { + $this->onEvent($event->done()); + } } catch (Exception $e) { - $event && $this->onEvent($event->done($e)); + if ($event) { + $this->onEvent($event->done($e)); + } throw $e; } } @@ -405,14 +430,20 @@ class Connection */ public function commit($savepoint = null) { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } $event = $this->onEvent ? new Event($this, Event::COMMIT, $savepoint) : null; try { $this->driver->commit($savepoint); - $event && $this->onEvent($event->done()); + if ($event) { + $this->onEvent($event->done()); + } } catch (Exception $e) { - $event && $this->onEvent($event->done($e)); + if ($event) { + $this->onEvent($event->done($e)); + } throw $e; } } @@ -425,14 +456,20 @@ class Connection */ public function rollback($savepoint = null) { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } $event = $this->onEvent ? new Event($this, Event::ROLLBACK, $savepoint) : null; try { $this->driver->rollback($savepoint); - $event && $this->onEvent($event->done()); + if ($event) { + $this->onEvent($event->done()); + } } catch (Exception $e) { - $event && $this->onEvent($event->done($e)); + if ($event) { + $this->onEvent($event->done($e)); + } throw $e; } } @@ -625,7 +662,9 @@ class Connection */ public function getDatabaseInfo() { - $this->connected || $this->connect(); + if (!$this->connected) { + $this->connect(); + } return new Reflection\Database($this->driver->getReflector(), isset($this->config['database']) ? $this->config['database'] : null); } diff --git a/src/Dibi/Drivers/FirebirdDriver.php b/src/Dibi/Drivers/FirebirdDriver.php index e9919e08..edcf7f1a 100644 --- a/src/Dibi/Drivers/FirebirdDriver.php +++ b/src/Dibi/Drivers/FirebirdDriver.php @@ -375,7 +375,9 @@ class FirebirdDriver implements Dibi\Driver, Dibi\ResultDriver, Dibi\Reflector */ public function __destruct() { - $this->autoFree && $this->getResultResource() && $this->free(); + if ($this->autoFree && $this->getResultResource()) { + $this->free(); + } } diff --git a/src/Dibi/Drivers/MsSqlDriver.php b/src/Dibi/Drivers/MsSqlDriver.php index 35e099b9..67e56da3 100644 --- a/src/Dibi/Drivers/MsSqlDriver.php +++ b/src/Dibi/Drivers/MsSqlDriver.php @@ -329,7 +329,9 @@ class MsSqlDriver implements Dibi\Driver, Dibi\ResultDriver */ public function __destruct() { - $this->autoFree && $this->getResultResource() && $this->free(); + if ($this->autoFree && $this->getResultResource()) { + $this->free(); + } } diff --git a/src/Dibi/Drivers/MsSqlReflector.php b/src/Dibi/Drivers/MsSqlReflector.php index 24dbf4ab..52c650b3 100644 --- a/src/Dibi/Drivers/MsSqlReflector.php +++ b/src/Dibi/Drivers/MsSqlReflector.php @@ -96,10 +96,7 @@ class MsSqlReflector implements Dibi\Reflector "); $columns = []; while ($row = $res->fetch(true)) { - $size = false; - $type = strtoupper($row['DATA_TYPE']); - - $size_cols = [ + static $size_cols = [ 'DATETIME' => 'DATETIME_PRECISION', 'DECIMAL' => 'NUMERIC_PRECISION', 'CHAR' => 'CHARACTER_MAXIMUM_LENGTH', @@ -108,17 +105,13 @@ class MsSqlReflector implements Dibi\Reflector 'VARCHAR' => 'CHARACTER_OCTET_LENGTH', ]; - if (isset($size_cols[$type])) { - if ($size_cols[$type]) { - $size = $row[$size_cols[$type]]; - } - } + $type = strtoupper($row['DATA_TYPE']); $columns[] = [ 'name' => $row['COLUMN_NAME'], 'table' => $table, 'nativetype' => $type, - 'size' => $size, + 'size' => isset($size_cols[$type], $row[$size_cols[$type]]) ? $row[$size_cols[$type]] : null, 'unsigned' => null, 'nullable' => $row['IS_NULLABLE'] === 'YES', 'default' => $row['COLUMN_DEFAULT'], diff --git a/src/Dibi/Drivers/MySqliDriver.php b/src/Dibi/Drivers/MySqliDriver.php index ef2503d5..55d899fd 100644 --- a/src/Dibi/Drivers/MySqliDriver.php +++ b/src/Dibi/Drivers/MySqliDriver.php @@ -417,7 +417,9 @@ class MySqliDriver implements Dibi\Driver, Dibi\ResultDriver */ public function __destruct() { - $this->autoFree && $this->getResultResource() && @$this->free(); + if ($this->autoFree && $this->getResultResource()) { + @$this->free(); + } } diff --git a/src/Dibi/Drivers/OdbcDriver.php b/src/Dibi/Drivers/OdbcDriver.php index 6d325356..bdfdf728 100644 --- a/src/Dibi/Drivers/OdbcDriver.php +++ b/src/Dibi/Drivers/OdbcDriver.php @@ -353,7 +353,9 @@ class OdbcDriver implements Dibi\Driver, Dibi\ResultDriver, Dibi\Reflector */ public function __destruct() { - $this->autoFree && $this->getResultResource() && $this->free(); + if ($this->autoFree && $this->getResultResource()) { + $this->free(); + } } diff --git a/src/Dibi/Drivers/OracleDriver.php b/src/Dibi/Drivers/OracleDriver.php index 49920f24..fe2edf74 100644 --- a/src/Dibi/Drivers/OracleDriver.php +++ b/src/Dibi/Drivers/OracleDriver.php @@ -392,7 +392,9 @@ class OracleDriver implements Dibi\Driver, Dibi\ResultDriver, Dibi\Reflector */ public function __destruct() { - $this->autoFree && $this->getResultResource() && $this->free(); + if ($this->autoFree && $this->getResultResource()) { + $this->free(); + } } diff --git a/src/Dibi/Drivers/PostgreDriver.php b/src/Dibi/Drivers/PostgreDriver.php index 9b12b0d1..cad1910c 100644 --- a/src/Dibi/Drivers/PostgreDriver.php +++ b/src/Dibi/Drivers/PostgreDriver.php @@ -429,7 +429,9 @@ class PostgreDriver implements Dibi\Driver, Dibi\ResultDriver, Dibi\Reflector */ public function __destruct() { - $this->autoFree && $this->getResultResource() && $this->free(); + if ($this->autoFree && $this->getResultResource()) { + $this->free(); + } } diff --git a/src/Dibi/Drivers/Sqlite3Driver.php b/src/Dibi/Drivers/Sqlite3Driver.php index 1c2a650d..a02c334b 100644 --- a/src/Dibi/Drivers/Sqlite3Driver.php +++ b/src/Dibi/Drivers/Sqlite3Driver.php @@ -375,7 +375,9 @@ class Sqlite3Driver implements Dibi\Driver, Dibi\ResultDriver */ public function __destruct() { - $this->autoFree && $this->resultSet && @$this->free(); + if ($this->autoFree && $this->getResultResource()) { + @$this->free(); + } } diff --git a/src/Dibi/Drivers/SqlsrvDriver.php b/src/Dibi/Drivers/SqlsrvDriver.php index 8a566ebc..ff817cc4 100644 --- a/src/Dibi/Drivers/SqlsrvDriver.php +++ b/src/Dibi/Drivers/SqlsrvDriver.php @@ -361,7 +361,9 @@ class SqlsrvDriver implements Dibi\Driver, Dibi\ResultDriver */ public function __destruct() { - $this->autoFree && $this->getResultResource() && $this->free(); + if ($this->autoFree && $this->getResultResource()) { + $this->free(); + } } diff --git a/src/Dibi/Fluent.php b/src/Dibi/Fluent.php index fd4724d1..7b5bb0c9 100644 --- a/src/Dibi/Fluent.php +++ b/src/Dibi/Fluent.php @@ -9,7 +9,7 @@ namespace Dibi; /** - * dibi SQL builder via fluent interfaces. EXPERIMENTAL! + * dibi SQL builder via fluent interfaces. * * @method Fluent select(...$field) * @method Fluent distinct() diff --git a/src/Dibi/interfaces.php b/src/Dibi/interfaces.php index c43c9a1d..c1b230d3 100644 --- a/src/Dibi/interfaces.php +++ b/src/Dibi/interfaces.php @@ -23,7 +23,6 @@ interface IDataSource extends \Countable, \IteratorAggregate */ interface Driver { - /** * Connects to a database. * @param array @@ -156,7 +155,6 @@ interface Driver */ interface ResultDriver { - /** * Returns the number of rows in a result set. * @return int @@ -212,7 +210,6 @@ interface ResultDriver */ interface Reflector { - /** * Returns list of tables. * @return array of {name [, (bool) view ]}