From 32baabdeacdf4a00aa93a81a41ee32d130afdbc3 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 2 Nov 2010 13:59:05 +0100 Subject: [PATCH] added low-level methods createResultDriver() and DibiConnection::createResultSet() --- dibi/drivers/firebird.php | 16 +++++++++++++++- dibi/drivers/mssql.php | 16 +++++++++++++++- dibi/drivers/mssql2005.php | 16 +++++++++++++++- dibi/drivers/mysql.php | 16 +++++++++++++++- dibi/drivers/mysqli.php | 16 +++++++++++++++- dibi/drivers/odbc.php | 16 +++++++++++++++- dibi/drivers/oracle.php | 16 +++++++++++++++- dibi/drivers/pdo.php | 16 +++++++++++++++- dibi/drivers/postgre.php | 16 +++++++++++++++- dibi/drivers/sqlite.php | 16 +++++++++++++++- dibi/drivers/sqlite3.php | 17 ++++++++++++++++- dibi/libs/DibiConnection.php | 14 +++++++++++++- 12 files changed, 179 insertions(+), 12 deletions(-) diff --git a/dibi/drivers/firebird.php b/dibi/drivers/firebird.php index 953dde9b..a1ea334a 100644 --- a/dibi/drivers/firebird.php +++ b/dibi/drivers/firebird.php @@ -131,7 +131,7 @@ class DibiFirebirdDriver extends DibiObject implements IDibiDriver, IDibiResultD throw new DibiDriverException(ibase_errmsg(), ibase_errcode(), $sql); } - return is_resource($this->resultSet) ? clone $this : NULL; + return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -251,6 +251,20 @@ class DibiFirebirdDriver extends DibiObject implements IDibiDriver, IDibiResultD + /** + * Result set driver factory. + * @param resource + * @return IDibiResultDriver + */ + public function createResultDriver($resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ********************/ diff --git a/dibi/drivers/mssql.php b/dibi/drivers/mssql.php index 1f096d0a..4102652d 100644 --- a/dibi/drivers/mssql.php +++ b/dibi/drivers/mssql.php @@ -99,7 +99,7 @@ class DibiMsSqlDriver extends DibiObject implements IDibiDriver, IDibiResultDriv throw new DibiDriverException(mssql_get_last_message(), 0, $sql); } - return is_resource($this->resultSet) ? clone $this : NULL; + return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -192,6 +192,20 @@ class DibiMsSqlDriver extends DibiObject implements IDibiDriver, IDibiResultDriv + /** + * Result set driver factory. + * @param resource + * @return IDibiResultDriver + */ + public function createResultDriver($resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/mssql2005.php b/dibi/drivers/mssql2005.php index 2f1fe81b..8a759265 100644 --- a/dibi/drivers/mssql2005.php +++ b/dibi/drivers/mssql2005.php @@ -101,7 +101,7 @@ class DibiMsSql2005Driver extends DibiObject implements IDibiDriver, IDibiResult throw new DibiDriverException($info[0]['message'], $info[0]['code'], $sql); } - return is_resource($this->resultSet) ? clone $this : NULL; + return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -194,6 +194,20 @@ class DibiMsSql2005Driver extends DibiObject implements IDibiDriver, IDibiResult + /** + * Result set driver factory. + * @param resource + * @return IDibiResultDriver + */ + public function createResultDriver($resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/mysql.php b/dibi/drivers/mysql.php index 7751aa5e..f4a6525c 100644 --- a/dibi/drivers/mysql.php +++ b/dibi/drivers/mysql.php @@ -165,7 +165,7 @@ class DibiMySqlDriver extends DibiObject implements IDibiDriver, IDibiResultDriv throw new DibiDriverException(mysql_error($this->connection), mysql_errno($this->connection), $sql); } - return is_resource($this->resultSet) ? clone $this : NULL; + return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -271,6 +271,20 @@ class DibiMySqlDriver extends DibiObject implements IDibiDriver, IDibiResultDriv + /** + * Result set driver factory. + * @param resource + * @return IDibiResultDriver + */ + public function createResultDriver($resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/mysqli.php b/dibi/drivers/mysqli.php index 6f88a851..e227cc43 100644 --- a/dibi/drivers/mysqli.php +++ b/dibi/drivers/mysqli.php @@ -162,7 +162,7 @@ class DibiMySqliDriver extends DibiObject implements IDibiDriver, IDibiResultDri throw new DibiDriverException(mysqli_error($this->connection), mysqli_errno($this->connection), $sql); } - return is_object($this->resultSet) ? clone $this : NULL; + return is_object($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -268,6 +268,20 @@ class DibiMySqliDriver extends DibiObject implements IDibiDriver, IDibiResultDri + /** + * Result set driver factory. + * @param mysqli_result + * @return IDibiResultDriver + */ + public function createResultDriver(mysqli_result $resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/odbc.php b/dibi/drivers/odbc.php index 30e2c197..8b204975 100644 --- a/dibi/drivers/odbc.php +++ b/dibi/drivers/odbc.php @@ -104,7 +104,7 @@ class DibiOdbcDriver extends DibiObject implements IDibiDriver, IDibiResultDrive throw new DibiDriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection), 0, $sql); } - return is_resource($this->resultSet) ? clone $this : NULL; + return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -211,6 +211,20 @@ class DibiOdbcDriver extends DibiObject implements IDibiDriver, IDibiResultDrive + /** + * Result set driver factory. + * @param resource + * @return IDibiResultDriver + */ + public function createResultDriver($resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/oracle.php b/dibi/drivers/oracle.php index d2e05f66..d5d4c517 100644 --- a/dibi/drivers/oracle.php +++ b/dibi/drivers/oracle.php @@ -111,7 +111,7 @@ class DibiOracleDriver extends DibiObject implements IDibiDriver, IDibiResultDri throw new DibiDriverException($err['message'], $err['code'], $sql); } - return is_resource($this->resultSet) ? clone $this : NULL; + return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -207,6 +207,20 @@ class DibiOracleDriver extends DibiObject implements IDibiDriver, IDibiResultDri + /** + * Result set driver factory. + * @param resource + * @return IDibiResultDriver + */ + public function createResultDriver($resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/pdo.php b/dibi/drivers/pdo.php index 996e62e8..7bfc88bc 100644 --- a/dibi/drivers/pdo.php +++ b/dibi/drivers/pdo.php @@ -126,7 +126,7 @@ class DibiPdoDriver extends DibiObject implements IDibiDriver, IDibiResultDriver throw new DibiDriverException("SQLSTATE[$err[0]]: $err[2]", $err[1], $sql); } - return clone $this; + return $this->createResultDriver($this->resultSet); } } @@ -224,6 +224,20 @@ class DibiPdoDriver extends DibiObject implements IDibiDriver, IDibiResultDriver + /** + * Result set driver factory. + * @param PDOStatement + * @return IDibiResultDriver + */ + public function createResultDriver(PDOStatement $resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/postgre.php b/dibi/drivers/postgre.php index a28d1626..719ac546 100644 --- a/dibi/drivers/postgre.php +++ b/dibi/drivers/postgre.php @@ -131,7 +131,7 @@ class DibiPostgreDriver extends DibiObject implements IDibiDriver, IDibiResultDr throw new DibiDriverException(pg_last_error($this->connection), 0, $sql); } - return is_resource($this->resultSet) && pg_num_fields($this->resultSet) ? clone $this : NULL; + return is_resource($this->resultSet) && pg_num_fields($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -241,6 +241,20 @@ class DibiPostgreDriver extends DibiObject implements IDibiDriver, IDibiResultDr + /** + * Result set driver factory. + * @param resource + * @return IDibiResultDriver + */ + public function createResultDriver($resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/sqlite.php b/dibi/drivers/sqlite.php index 61a6302e..3a10d18f 100644 --- a/dibi/drivers/sqlite.php +++ b/dibi/drivers/sqlite.php @@ -130,7 +130,7 @@ class DibiSqliteDriver extends DibiObject implements IDibiDriver, IDibiResultDri throw new DibiDriverException($msg, sqlite_last_error($this->connection), $sql); } - return is_resource($this->resultSet) ? clone $this : NULL; + return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } @@ -218,6 +218,20 @@ class DibiSqliteDriver extends DibiObject implements IDibiDriver, IDibiResultDri + /** + * Result set driver factory. + * @param resource + * @return IDibiResultDriver + */ + public function createResultDriver($resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ diff --git a/dibi/drivers/sqlite3.php b/dibi/drivers/sqlite3.php index d93c1af5..ebb94111 100644 --- a/dibi/drivers/sqlite3.php +++ b/dibi/drivers/sqlite3.php @@ -120,7 +120,7 @@ class DibiSqlite3Driver extends DibiObject implements IDibiDriver, IDibiResultDr throw new DibiDriverException($this->connection->lastErrorMsg(), $this->connection->lastErrorCode(), $sql); } - return $this->resultSet instanceof SQLite3Result ? clone $this : NULL; + return $this->resultSet instanceof SQLite3Result ? $this->createResultDriver($this->resultSet) : NULL; } @@ -208,6 +208,20 @@ class DibiSqlite3Driver extends DibiObject implements IDibiDriver, IDibiResultDr + /** + * Result set driver factory. + * @param SQLite3Result + * @return IDibiResultDriver + */ + public function createResultDriver(SQLite3Result $resource) + { + $res = clone $this; + $res->resultSet = $resource; + return $res; + } + + + /********************* SQL ****************d*g**/ @@ -352,6 +366,7 @@ class DibiSqlite3Driver extends DibiObject implements IDibiDriver, IDibiResultDr */ public function free() { + $this->resultSet->finalize(); $this->resultSet = NULL; } diff --git a/dibi/libs/DibiConnection.php b/dibi/libs/DibiConnection.php index 92ee03ec..7dd843bb 100644 --- a/dibi/libs/DibiConnection.php +++ b/dibi/libs/DibiConnection.php @@ -340,7 +340,7 @@ class DibiConnection extends DibiObject dibi::$sql = $sql; if ($res = $this->driver->query($sql)) { // intentionally = - $res = new DibiResult($res, $this->config['result']); + $res = $this->createResultSet($res); } else { $res = $this->driver->getAffectedRows(); } @@ -466,6 +466,18 @@ class DibiConnection extends DibiObject + /** + * Result set factory. + * @param IDibiResultDriver + * @return DibiResult + */ + public function createResultSet(IDibiResultDriver $resultDriver) + { + return new DibiResult($resultDriver, $this->config['result']); + } + + + /********************* fluent SQL builders ****************d*g**/