1
0
mirror of https://github.com/dg/dibi.git synced 2025-08-09 15:47:23 +02:00

drivers implementing IDibiDriver and IDibiResultDriver together do not use $resultSet in IDibiDriver part

This commit is contained in:
David Grudl
2010-11-02 14:11:03 +01:00
parent 32baabdeac
commit 087734fb23
11 changed files with 75 additions and 51 deletions

View File

@@ -115,7 +115,7 @@ class DibiFirebirdDriver extends DibiObject implements IDibiDriver, IDibiResultD
{ {
DibiDriverException::tryError(); DibiDriverException::tryError();
$resource = $this->inTransaction ? $this->transaction : $this->connection; $resource = $this->inTransaction ? $this->transaction : $this->connection;
$this->resultSet = ibase_query($resource, $sql); $res = ibase_query($resource, $sql);
if (DibiDriverException::catchError($msg)) { if (DibiDriverException::catchError($msg)) {
if (ibase_errcode() == self::ERROR_EXCEPTION_THROWN) { if (ibase_errcode() == self::ERROR_EXCEPTION_THROWN) {
@@ -127,11 +127,12 @@ class DibiFirebirdDriver extends DibiObject implements IDibiDriver, IDibiResultD
} }
} }
if ($this->resultSet === FALSE) { if ($res === FALSE) {
throw new DibiDriverException(ibase_errmsg(), ibase_errcode(), $sql); throw new DibiDriverException(ibase_errmsg(), ibase_errcode(), $sql);
}
return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } elseif (is_resource($res)) {
return $this->createResultDriver($res);
}
} }

View File

@@ -93,13 +93,14 @@ class DibiMsSqlDriver extends DibiObject implements IDibiDriver, IDibiResultDriv
*/ */
public function query($sql) public function query($sql)
{ {
$this->resultSet = @mssql_query($sql, $this->connection); // intentionally @ $res = @mssql_query($sql, $this->connection); // intentionally @
if ($this->resultSet === FALSE) { if ($res === FALSE) {
throw new DibiDriverException(mssql_get_last_message(), 0, $sql); throw new DibiDriverException(mssql_get_last_message(), 0, $sql);
}
return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } elseif (is_resource($res)) {
return $this->createResultDriver($res);
}
} }

View File

@@ -35,6 +35,9 @@ class DibiMsSql2005Driver extends DibiObject implements IDibiDriver, IDibiResult
/** @var resource Resultset resource */ /** @var resource Resultset resource */
private $resultSet; private $resultSet;
/** @var int|FALSE Affected rows */
private $affectedRows = FALSE;
/** /**
@@ -94,14 +97,17 @@ class DibiMsSql2005Driver extends DibiObject implements IDibiDriver, IDibiResult
*/ */
public function query($sql) public function query($sql)
{ {
$this->resultSet = sqlsrv_query($this->connection, $sql); $this->affectedRows = FALSE;
$res = sqlsrv_query($this->connection, $sql);
if ($this->resultSet === FALSE) { if ($res === FALSE) {
$info = sqlsrv_errors(); $info = sqlsrv_errors();
throw new DibiDriverException($info[0]['message'], $info[0]['code'], $sql); throw new DibiDriverException($info[0]['message'], $info[0]['code'], $sql);
}
return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } elseif (is_resource($res)) {
$this->affectedRows = sqlsrv_rows_affected($res);
return $this->createResultDriver($res);
}
} }
@@ -112,7 +118,7 @@ class DibiMsSql2005Driver extends DibiObject implements IDibiDriver, IDibiResult
*/ */
public function getAffectedRows() public function getAffectedRows()
{ {
return sqlsrv_rows_affected($this->resultSet); return $this->affectedRows;
} }

View File

@@ -156,16 +156,17 @@ class DibiMySqlDriver extends DibiObject implements IDibiDriver, IDibiResultDriv
public function query($sql) public function query($sql)
{ {
if ($this->buffered) { if ($this->buffered) {
$this->resultSet = @mysql_query($sql, $this->connection); // intentionally @ $res = @mysql_query($sql, $this->connection); // intentionally @
} else { } else {
$this->resultSet = @mysql_unbuffered_query($sql, $this->connection); // intentionally @ $res = @mysql_unbuffered_query($sql, $this->connection); // intentionally @
} }
if (mysql_errno($this->connection)) { if (mysql_errno($this->connection)) {
throw new DibiDriverException(mysql_error($this->connection), mysql_errno($this->connection), $sql); throw new DibiDriverException(mysql_error($this->connection), mysql_errno($this->connection), $sql);
}
return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } elseif (is_resource($res)) {
return $this->createResultDriver($res);
}
} }

View File

@@ -156,13 +156,14 @@ class DibiMySqliDriver extends DibiObject implements IDibiDriver, IDibiResultDri
*/ */
public function query($sql) public function query($sql)
{ {
$this->resultSet = @mysqli_query($this->connection, $sql, $this->buffered ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT); // intentionally @ $res = @mysqli_query($this->connection, $sql, $this->buffered ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT); // intentionally @
if (mysqli_errno($this->connection)) { if (mysqli_errno($this->connection)) {
throw new DibiDriverException(mysqli_error($this->connection), mysqli_errno($this->connection), $sql); throw new DibiDriverException(mysqli_error($this->connection), mysqli_errno($this->connection), $sql);
}
return is_object($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } elseif (is_object($res)) {
return $this->createResultDriver($res);
}
} }

View File

@@ -33,6 +33,9 @@ class DibiOdbcDriver extends DibiObject implements IDibiDriver, IDibiResultDrive
/** @var resource Resultset resource */ /** @var resource Resultset resource */
private $resultSet; private $resultSet;
/** @var int|FALSE Affected rows */
private $affectedRows = FALSE;
/** @var int Cursor */ /** @var int Cursor */
private $row = 0; private $row = 0;
@@ -98,13 +101,16 @@ class DibiOdbcDriver extends DibiObject implements IDibiDriver, IDibiResultDrive
*/ */
public function query($sql) public function query($sql)
{ {
$this->resultSet = @odbc_exec($this->connection, $sql); // intentionally @ $this->affectedRows = FALSE;
$res = @odbc_exec($this->connection, $sql); // intentionally @
if ($this->resultSet === FALSE) { if ($res === FALSE) {
throw new DibiDriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection), 0, $sql); throw new DibiDriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection), 0, $sql);
}
return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } elseif (is_resource($res)) {
$this->affectedRows = odbc_num_rows($res);
return $this->createResultDriver($res);
}
} }
@@ -115,7 +121,7 @@ class DibiOdbcDriver extends DibiObject implements IDibiDriver, IDibiResultDrive
*/ */
public function getAffectedRows() public function getAffectedRows()
{ {
return odbc_num_rows($this->resultSet); return $this->affectedRows;
} }

View File

@@ -99,19 +99,20 @@ class DibiOracleDriver extends DibiObject implements IDibiDriver, IDibiResultDri
*/ */
public function query($sql) public function query($sql)
{ {
$this->resultSet = oci_parse($this->connection, $sql); $res = oci_parse($this->connection, $sql);
if ($this->resultSet) { if ($res) {
oci_execute($this->resultSet, $this->autocommit ? OCI_COMMIT_ON_SUCCESS : OCI_DEFAULT); oci_execute($res, $this->autocommit ? OCI_COMMIT_ON_SUCCESS : OCI_DEFAULT);
$err = oci_error($this->resultSet); $err = oci_error($res);
if ($err) { if ($err) {
throw new DibiDriverException($err['message'], $err['code'], $sql); throw new DibiDriverException($err['message'], $err['code'], $sql);
} elseif (is_resource($res)) {
return $this->createResultDriver($res);
} }
} else { } else {
$err = oci_error($this->connection); $err = oci_error($this->connection);
throw new DibiDriverException($err['message'], $err['code'], $sql); throw new DibiDriverException($err['message'], $err['code'], $sql);
} }
return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL;
} }

View File

@@ -105,9 +105,9 @@ class DibiPdoDriver extends DibiObject implements IDibiDriver, IDibiResultDriver
// must detect if SQL returns result set or num of affected rows // must detect if SQL returns result set or num of affected rows
$cmd = strtoupper(substr(ltrim($sql), 0, 6)); $cmd = strtoupper(substr(ltrim($sql), 0, 6));
static $list = array('UPDATE'=>1, 'DELETE'=>1, 'INSERT'=>1, 'REPLAC'=>1); static $list = array('UPDATE'=>1, 'DELETE'=>1, 'INSERT'=>1, 'REPLAC'=>1);
$this->affectedRows = FALSE;
if (isset($list[$cmd])) { if (isset($list[$cmd])) {
$this->resultSet = NULL;
$this->affectedRows = $this->connection->exec($sql); $this->affectedRows = $this->connection->exec($sql);
if ($this->affectedRows === FALSE) { if ($this->affectedRows === FALSE) {
@@ -115,18 +115,15 @@ class DibiPdoDriver extends DibiObject implements IDibiDriver, IDibiResultDriver
throw new DibiDriverException("SQLSTATE[$err[0]]: $err[2]", $err[1], $sql); throw new DibiDriverException("SQLSTATE[$err[0]]: $err[2]", $err[1], $sql);
} }
return NULL;
} else { } else {
$this->resultSet = $this->connection->query($sql); $res = $this->connection->query($sql);
$this->affectedRows = FALSE;
if ($this->resultSet === FALSE) { if ($res === FALSE) {
$err = $this->connection->errorInfo(); $err = $this->connection->errorInfo();
throw new DibiDriverException("SQLSTATE[$err[0]]: $err[2]", $err[1], $sql); throw new DibiDriverException("SQLSTATE[$err[0]]: $err[2]", $err[1], $sql);
} else {
return $this->createResultDriver($res);
} }
return $this->createResultDriver($this->resultSet);
} }
} }

View File

@@ -34,6 +34,9 @@ class DibiPostgreDriver extends DibiObject implements IDibiDriver, IDibiResultDr
/** @var resource Resultset resource */ /** @var resource Resultset resource */
private $resultSet; private $resultSet;
/** @var int|FALSE Affected rows */
private $affectedRows = FALSE;
/** @var bool Escape method */ /** @var bool Escape method */
private $escMethod = FALSE; private $escMethod = FALSE;
@@ -125,13 +128,18 @@ class DibiPostgreDriver extends DibiObject implements IDibiDriver, IDibiResultDr
*/ */
public function query($sql) public function query($sql)
{ {
$this->resultSet = @pg_query($this->connection, $sql); // intentionally @ $this->affectedRows = FALSE;
$res = @pg_query($this->connection, $sql); // intentionally @
if ($this->resultSet === FALSE) { if ($res === FALSE) {
throw new DibiDriverException(pg_last_error($this->connection), 0, $sql); throw new DibiDriverException(pg_last_error($this->connection), 0, $sql);
}
return is_resource($this->resultSet) && pg_num_fields($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } elseif (is_resource($res)) {
$this->affectedRows = pg_affected_rows($res);
if (pg_num_fields($res)) {
return $this->createResultDriver($res);
}
}
} }
@@ -142,7 +150,7 @@ class DibiPostgreDriver extends DibiObject implements IDibiDriver, IDibiResultDr
*/ */
public function getAffectedRows() public function getAffectedRows()
{ {
return pg_affected_rows($this->resultSet); return $this->affectedRows;
} }

View File

@@ -122,15 +122,16 @@ class DibiSqliteDriver extends DibiObject implements IDibiDriver, IDibiResultDri
DibiDriverException::tryError(); DibiDriverException::tryError();
if ($this->buffered) { if ($this->buffered) {
$this->resultSet = sqlite_query($this->connection, $sql); $res = sqlite_query($this->connection, $sql);
} else { } else {
$this->resultSet = sqlite_unbuffered_query($this->connection, $sql); $res = sqlite_unbuffered_query($this->connection, $sql);
} }
if (DibiDriverException::catchError($msg)) { if (DibiDriverException::catchError($msg)) {
throw new DibiDriverException($msg, sqlite_last_error($this->connection), $sql); throw new DibiDriverException($msg, sqlite_last_error($this->connection), $sql);
}
return is_resource($this->resultSet) ? $this->createResultDriver($this->resultSet) : NULL; } elseif (is_resource($res)) {
return $this->createResultDriver($res);
}
} }

View File

@@ -115,12 +115,13 @@ class DibiSqlite3Driver extends DibiObject implements IDibiDriver, IDibiResultDr
$sql = iconv($this->charset, $this->dbcharset . '//IGNORE', $sql); $sql = iconv($this->charset, $this->dbcharset . '//IGNORE', $sql);
} }
$this->resultSet = @$this->connection->query($sql); // intentionally @ $res = @$this->connection->query($sql); // intentionally @
if ($this->connection->lastErrorCode()) { if ($this->connection->lastErrorCode()) {
throw new DibiDriverException($this->connection->lastErrorMsg(), $this->connection->lastErrorCode(), $sql); throw new DibiDriverException($this->connection->lastErrorMsg(), $this->connection->lastErrorCode(), $sql);
}
return $this->resultSet instanceof SQLite3Result ? $this->createResultDriver($this->resultSet) : NULL; } elseif ($res instanceof SQLite3Result) {
return $this->createResultDriver($res);
}
} }