Updates DB.php to v1.7.14
This commit is contained in:
1 parent
295ac6a063
commit
e1425e2f45
16 files changed
+833
-360
No files matched your search
+128
-27
@@ -18,9 +18,9 @@
|
||||
* @author Stig Bakken <ssb@php.net>
|
||||
* @author Tomas V.V.Cox <cox@idecnet.com>
|
||||
* @author Daniel Convissor <danielc@php.net>
|
||||
* @copyright 1997-2005 The PHP Group
|
||||
* @copyright 1997-2007 The PHP Group
|
||||
* @license http://www.php.net/license/3_0.txt PHP License 3.0
|
||||
* @version CVS: $Id: DB.php,v 1.80 2005/02/16 02:16:00 danielc Exp $
|
||||
* @version CVS: $Id: DB.php 315557 2011-08-26 14:32:35Z danielc $
|
||||
* @link http://pear.php.net/package/DB
|
||||
*/
|
||||
|
||||
@@ -424,9 +424,9 @@ define('DB_PORTABILITY_ALL', 63);
|
||||
* @author Stig Bakken <ssb@php.net>
|
||||
* @author Tomas V.V.Cox <cox@idecnet.com>
|
||||
* @author Daniel Convissor <danielc@php.net>
|
||||
* @copyright 1997-2005 The PHP Group
|
||||
* @copyright 1997-2007 The PHP Group
|
||||
* @license http://www.php.net/license/3_0.txt PHP License 3.0
|
||||
* @version Release: 1.7.6
|
||||
* @version Release: 1.7.14
|
||||
* @link http://pear.php.net/package/DB
|
||||
*/
|
||||
class DB
|
||||
@@ -467,7 +467,7 @@ class DB
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
@$obj =& new $classname;
|
||||
@$obj = new $classname;
|
||||
|
||||
foreach ($options as $option => $value) {
|
||||
$test = $obj->setOption($option, $value);
|
||||
@@ -544,7 +544,7 @@ class DB
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
@$obj =& new $classname;
|
||||
@$obj = new $classname;
|
||||
|
||||
foreach ($options as $option => $value) {
|
||||
$test = $obj->setOption($option, $value);
|
||||
@@ -555,7 +555,11 @@ class DB
|
||||
|
||||
$err = $obj->connect($dsninfo, $obj->getOption('persistent'));
|
||||
if (DB::isError($err)) {
|
||||
$err->addUserInfo($dsn);
|
||||
if (is_array($dsn)) {
|
||||
$err->addUserInfo(DB::getDSNString($dsn, true));
|
||||
} else {
|
||||
$err->addUserInfo($dsn);
|
||||
}
|
||||
return $err;
|
||||
}
|
||||
|
||||
@@ -572,7 +576,7 @@ class DB
|
||||
*/
|
||||
function apiVersion()
|
||||
{
|
||||
return '1.7.6';
|
||||
return '1.7.14';
|
||||
}
|
||||
|
||||
// }}}
|
||||
@@ -587,7 +591,7 @@ class DB
|
||||
*/
|
||||
function isError($value)
|
||||
{
|
||||
return is_a($value, 'DB_Error');
|
||||
return is_object($value) && is_a($value, 'DB_Error');
|
||||
}
|
||||
|
||||
// }}}
|
||||
@@ -625,7 +629,7 @@ class DB
|
||||
{
|
||||
$manips = 'INSERT|UPDATE|DELETE|REPLACE|'
|
||||
. 'CREATE|DROP|'
|
||||
. 'LOAD DATA|SELECT .* INTO|COPY|'
|
||||
. 'LOAD DATA|SELECT .* INTO .* FROM|COPY|'
|
||||
. 'ALTER|GRANT|REVOKE|'
|
||||
. 'LOCK|UNLOCK';
|
||||
if (preg_match('/^\s*"?(' . $manips . ')\s+/i', $query)) {
|
||||
@@ -808,13 +812,11 @@ class DB
|
||||
// process the different protocol options
|
||||
$parsed['protocol'] = (!empty($proto)) ? $proto : 'tcp';
|
||||
$proto_opts = rawurldecode($proto_opts);
|
||||
if (strpos($proto_opts, ':') !== false) {
|
||||
list($proto_opts, $parsed['port']) = explode(':', $proto_opts);
|
||||
}
|
||||
if ($parsed['protocol'] == 'tcp') {
|
||||
if (strpos($proto_opts, ':') !== false) {
|
||||
list($parsed['hostspec'],
|
||||
$parsed['port']) = explode(':', $proto_opts);
|
||||
} else {
|
||||
$parsed['hostspec'] = $proto_opts;
|
||||
}
|
||||
$parsed['hostspec'] = $proto_opts;
|
||||
} elseif ($parsed['protocol'] == 'unix') {
|
||||
$parsed['socket'] = $proto_opts;
|
||||
}
|
||||
@@ -847,6 +849,82 @@ class DB
|
||||
return $parsed;
|
||||
}
|
||||
|
||||
// }}}
|
||||
// {{{ getDSNString()
|
||||
|
||||
/**
|
||||
* Returns the given DSN in a string format suitable for output.
|
||||
*
|
||||
* @param array|string the DSN to parse and format
|
||||
* @param boolean true to hide the password, false to include it
|
||||
* @return string
|
||||
*/
|
||||
function getDSNString($dsn, $hidePassword) {
|
||||
/* Calling parseDSN will ensure that we have all the array elements
|
||||
* defined, and means that we deal with strings and array in the same
|
||||
* manner. */
|
||||
$dsnArray = DB::parseDSN($dsn);
|
||||
|
||||
if ($hidePassword) {
|
||||
$dsnArray['password'] = 'PASSWORD';
|
||||
}
|
||||
|
||||
/* Protocol is special-cased, as using the default "tcp" along with an
|
||||
* Oracle TNS connection string fails. */
|
||||
if (is_string($dsn) && strpos($dsn, 'tcp') === false && $dsnArray['protocol'] == 'tcp') {
|
||||
$dsnArray['protocol'] = false;
|
||||
}
|
||||
|
||||
// Now we just have to construct the actual string. This is ugly.
|
||||
$dsnString = $dsnArray['phptype'];
|
||||
if ($dsnArray['dbsyntax']) {
|
||||
$dsnString .= '('.$dsnArray['dbsyntax'].')';
|
||||
}
|
||||
$dsnString .= '://'
|
||||
.$dsnArray['username']
|
||||
.':'
|
||||
.$dsnArray['password']
|
||||
.'@'
|
||||
.$dsnArray['protocol'];
|
||||
if ($dsnArray['socket']) {
|
||||
$dsnString .= '('.$dsnArray['socket'].')';
|
||||
}
|
||||
if ($dsnArray['protocol'] && $dsnArray['hostspec']) {
|
||||
$dsnString .= '+';
|
||||
}
|
||||
$dsnString .= $dsnArray['hostspec'];
|
||||
if ($dsnArray['port']) {
|
||||
$dsnString .= ':'.$dsnArray['port'];
|
||||
}
|
||||
$dsnString .= '/'.$dsnArray['database'];
|
||||
|
||||
/* Option handling. Unfortunately, parseDSN simply places options into
|
||||
* the top-level array, so we'll first get rid of the fields defined by
|
||||
* DB and see what's left. */
|
||||
unset($dsnArray['phptype'],
|
||||
$dsnArray['dbsyntax'],
|
||||
$dsnArray['username'],
|
||||
$dsnArray['password'],
|
||||
$dsnArray['protocol'],
|
||||
$dsnArray['socket'],
|
||||
$dsnArray['hostspec'],
|
||||
$dsnArray['port'],
|
||||
$dsnArray['database']
|
||||
);
|
||||
if (count($dsnArray) > 0) {
|
||||
$dsnString .= '?';
|
||||
$i = 0;
|
||||
foreach ($dsnArray as $key => $value) {
|
||||
if (++$i > 1) {
|
||||
$dsnString .= '&';
|
||||
}
|
||||
$dsnString .= $key.'='.$value;
|
||||
}
|
||||
}
|
||||
|
||||
return $dsnString;
|
||||
}
|
||||
|
||||
// }}}
|
||||
}
|
||||
|
||||
@@ -860,9 +938,9 @@ class DB
|
||||
* @category Database
|
||||
* @package DB
|
||||
* @author Stig Bakken <ssb@php.net>
|
||||
* @copyright 1997-2005 The PHP Group
|
||||
* @copyright 1997-2007 The PHP Group
|
||||
* @license http://www.php.net/license/3_0.txt PHP License 3.0
|
||||
* @version Release: 1.7.6
|
||||
* @version Release: 1.7.14
|
||||
* @link http://pear.php.net/package/DB
|
||||
*/
|
||||
class DB_Error extends PEAR_Error
|
||||
@@ -907,9 +985,9 @@ class DB_Error extends PEAR_Error
|
||||
* @category Database
|
||||
* @package DB
|
||||
* @author Stig Bakken <ssb@php.net>
|
||||
* @copyright 1997-2005 The PHP Group
|
||||
* @copyright 1997-2007 The PHP Group
|
||||
* @license http://www.php.net/license/3_0.txt PHP License 3.0
|
||||
* @version Release: 1.7.6
|
||||
* @version Release: 1.7.14
|
||||
* @link http://pear.php.net/package/DB
|
||||
*/
|
||||
class DB_result
|
||||
@@ -1089,7 +1167,7 @@ class DB_result
|
||||
$fetchmode = DB_FETCHMODE_ASSOC;
|
||||
$object_class = $this->fetchmode_object_class;
|
||||
}
|
||||
if ($this->limit_from !== null) {
|
||||
if (is_null($rownum) && $this->limit_from !== null) {
|
||||
if ($this->row_counter === null) {
|
||||
$this->row_counter = $this->limit_from;
|
||||
// Skip rows
|
||||
@@ -1121,7 +1199,7 @@ class DB_result
|
||||
if ($object_class == 'stdClass') {
|
||||
$arr = (object) $arr;
|
||||
} else {
|
||||
$arr = &new $object_class($arr);
|
||||
$arr = new $object_class($arr);
|
||||
}
|
||||
}
|
||||
return $arr;
|
||||
@@ -1171,7 +1249,7 @@ class DB_result
|
||||
$fetchmode = DB_FETCHMODE_ASSOC;
|
||||
$object_class = $this->fetchmode_object_class;
|
||||
}
|
||||
if ($this->limit_from !== null) {
|
||||
if (is_null($rownum) && $this->limit_from !== null) {
|
||||
if ($this->row_counter === null) {
|
||||
$this->row_counter = $this->limit_from;
|
||||
// Skip rows
|
||||
@@ -1253,10 +1331,33 @@ class DB_result
|
||||
while ($res->fetchInto($tmp, DB_FETCHMODE_ORDERED)) {
|
||||
$i++;
|
||||
}
|
||||
return $i;
|
||||
$count = $i;
|
||||
} else {
|
||||
return $this->dbh->numRows($this->result);
|
||||
$count = $this->dbh->numRows($this->result);
|
||||
}
|
||||
|
||||
/* fbsql is checked for here because limit queries are implemented
|
||||
* using a TOP() function, which results in fbsql_num_rows still
|
||||
* returning the total number of rows that would have been returned,
|
||||
* rather than the real number. As a result, we'll just do the limit
|
||||
* calculations for fbsql in the same way as a database with emulated
|
||||
* limits. Unfortunately, we can't just do this in DB_fbsql::numRows()
|
||||
* because that only gets the result resource, rather than the full
|
||||
* DB_Result object. */
|
||||
if (($this->dbh->features['limit'] === 'emulate'
|
||||
&& $this->limit_from !== null)
|
||||
|| $this->dbh->phptype == 'fbsql') {
|
||||
$limit_count = is_null($this->limit_count) ? $count : $this->limit_count;
|
||||
if ($count < $this->limit_from) {
|
||||
$count = 0;
|
||||
} elseif ($count < ($this->limit_from + $limit_count)) {
|
||||
$count -= $this->limit_from;
|
||||
} else {
|
||||
$count = $limit_count;
|
||||
}
|
||||
}
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
// }}}
|
||||
@@ -1349,9 +1450,9 @@ class DB_result
|
||||
* @category Database
|
||||
* @package DB
|
||||
* @author Stig Bakken <ssb@php.net>
|
||||
* @copyright 1997-2005 The PHP Group
|
||||
* @copyright 1997-2007 The PHP Group
|
||||
* @license http://www.php.net/license/3_0.txt PHP License 3.0
|
||||
* @version Release: 1.7.6
|
||||
* @version Release: 1.7.14
|
||||
* @link http://pear.php.net/package/DB
|
||||
* @see DB_common::setFetchMode()
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user