Updates DB.php to v1.7.14

This commit is contained in:
nikolark committed 2012-04-09 14:02:13 +02:00
1 parent 295ac6a063
commit e1425e2f45
16 files changed
+833 -360

No files matched your search

+52 -17
View File
@@ -19,9 +19,9 @@
* @author Sterling Hughes <sterling@php.net>
* @author Antônio Carlos Venâncio Júnior <floripa@php.net>
* @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: sybase.php,v 1.78 2005/02/20 00:44:48 danielc Exp $
* @version CVS: $Id: sybase.php 242771 2007-09-21 13:40:42Z aharvey $
* @link http://pear.php.net/package/DB
*/
@@ -44,9 +44,9 @@ require_once 'DB/common.php';
* @author Sterling Hughes <sterling@php.net>
* @author Antônio Carlos Venâncio Júnior <floripa@php.net>
* @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_sybase extends DB_common
@@ -248,9 +248,9 @@ class DB_sybase extends DB_common
*/
function simpleQuery($query)
{
$ismanip = DB::isManip($query);
$ismanip = $this->_checkManip($query);
$this->last_query = $query;
if (!@sybase_select_db($this->_db, $this->connection)) {
if ($this->_db && !@sybase_select_db($this->_db, $this->connection)) {
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED);
}
$query = $this->modifyQuery($query);
@@ -370,7 +370,7 @@ class DB_sybase extends DB_common
*/
function freeResult($result)
{
return @sybase_free_result($result);
return is_resource($result) ? sybase_free_result($result) : false;
}
// }}}
@@ -435,7 +435,7 @@ class DB_sybase extends DB_common
*/
function affectedRows()
{
if (DB::isManip($this->last_query)) {
if ($this->_last_query_manip) {
$result = @sybase_affected_rows($this->connection);
} else {
$result = 0;
@@ -462,7 +462,7 @@ class DB_sybase extends DB_common
function nextId($seq_name, $ondemand = true)
{
$seqname = $this->getSequenceName($seq_name);
if (!@sybase_select_db($this->_db, $this->connection)) {
if ($this->_db && !@sybase_select_db($this->_db, $this->connection)) {
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED);
}
$repeat = 0;
@@ -479,7 +479,7 @@ class DB_sybase extends DB_common
return $this->raiseError($result);
}
} elseif (!DB::isError($result)) {
$result =& $this->query("SELECT @@IDENTITY FROM $seqname");
$result = $this->query("SELECT @@IDENTITY FROM $seqname");
$repeat = 0;
} else {
$repeat = false;
@@ -528,6 +528,22 @@ class DB_sybase extends DB_common
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name));
}
// }}}
// {{{ quoteFloat()
/**
* Formats a float value for use within a query in a locale-independent
* manner.
*
* @param float the float value to be quoted.
* @return string the quoted string.
* @see DB_common::quoteSmart()
* @since Method available since release 1.7.8.
*/
function quoteFloat($float) {
return $this->escapeSimple(str_replace(',', '.', strval(floatval($float))));
}
// }}}
// {{{ autoCommit()
@@ -558,7 +574,7 @@ class DB_sybase extends DB_common
function commit()
{
if ($this->transaction_opcount > 0) {
if (!@sybase_select_db($this->_db, $this->connection)) {
if ($this->_db && !@sybase_select_db($this->_db, $this->connection)) {
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED);
}
$result = @sybase_query('COMMIT', $this->connection);
@@ -581,7 +597,7 @@ class DB_sybase extends DB_common
function rollback()
{
if ($this->transaction_opcount > 0) {
if (!@sybase_select_db($this->_db, $this->connection)) {
if ($this->_db && !@sybase_select_db($this->_db, $this->connection)) {
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED);
}
$result = @sybase_query('ROLLBACK', $this->connection);
@@ -642,6 +658,11 @@ class DB_sybase extends DB_common
function errorCode($errormsg)
{
static $error_regexps;
// PHP 5.2+ prepends the function name to $php_errormsg, so we need
// this hack to work around it, per bug #9599.
$errormsg = preg_replace('/^sybase[a-z_]+\(\): /', '', $errormsg);
if (!isset($error_regexps)) {
$error_regexps = array(
'/Incorrect syntax near/'
@@ -674,6 +695,8 @@ class DB_sybase extends DB_common
=> DB_ERROR_ALREADY_EXISTS,
'/^There are fewer columns in the INSERT statement than values specified/i'
=> DB_ERROR_VALUE_COUNT_ON_ROW,
'/Divide by zero/i'
=> DB_ERROR_DIVZERO,
);
}
@@ -714,7 +737,7 @@ class DB_sybase extends DB_common
* Probably received a table name.
* Create a result resource identifier.
*/
if (!@sybase_select_db($this->_db, $this->connection)) {
if ($this->_db && !@sybase_select_db($this->_db, $this->connection)) {
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED);
}
$id = @sybase_query("SELECT * FROM $result WHERE 1=0",
@@ -811,14 +834,24 @@ class DB_sybase extends DB_common
$flags = array();
$tableName = $table;
// get unique/primary keys
$res = $this->getAll("sp_helpindex $table", DB_FETCHMODE_ASSOC);
/* We're running sp_helpindex directly because it doesn't exist in
* older versions of ASE -- unfortunately, we can't just use
* DB::isError() because the user may be using callback error
* handling. */
$res = @sybase_query("sp_helpindex $table", $this->connection);
if (!isset($res[0]['index_description'])) {
if ($res === false || $res === true) {
// Fake a valid response for BC reasons.
return '';
}
foreach ($res as $val) {
while (($val = sybase_fetch_assoc($res)) !== false) {
if (!isset($val['index_keys'])) {
/* No useful information returned. Break and be done with
* it, which preserves the pre-1.7.9 behaviour. */
break;
}
$keys = explode(', ', trim($val['index_keys']));
if (sizeof($keys) > 1) {
@@ -834,6 +867,8 @@ class DB_sybase extends DB_common
}
}
sybase_free_result($res);
}
if (array_key_exists($column, $flags)) {