cox Wed Mar 28 15:52:21 2001 EDT Modified files: /php4/pear DB.php /php4/pear/DB ifx.php mysql.php pgsql.php Log: pgsql.php * better handling of $rownum param in fetchInto() * changed property numrows[] to num_rows[] DB.php * $rowmun in fetch* now defaults to NULL mysql.php * added default $fetchmode to ordered * removed extra checks in connect() * fetchrow() now uses fetchInto() * added the "fetch absolute row numbers" feature to fetchInto() (not tested) ifx.php * better handling of $rownum param in fetchInto()
Index: php4/pear/DB.php diff -u php4/pear/DB.php:1.54 php4/pear/DB.php:1.55 --- php4/pear/DB.php:1.54 Mon Mar 26 15:31:49 2001 +++ php4/pear/DB.php Wed Mar 28 15:52:21 2001 @@ -17,7 +17,7 @@ // | Tomas V.V.Cox <[EMAIL PROTECTED]> | // +----------------------------------------------------------------------+ // -// $Id: DB.php,v 1.54 2001/03/26 23:31:49 cox Exp $ +// $Id: DB.php,v 1.55 2001/03/28 23:52:21 cox Exp $ // // Database independent query interface. // @@ -585,7 +585,7 @@ * * @return array a row of data, or false on error */ - function fetchRow($fetchmode = DB_FETCHMODE_DEFAULT, $rownum=0) + function fetchRow($fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null) { $res = $this->fetchInto ($arr, $fetchmode, $rownum); if ($res !== DB_OK) { @@ -603,12 +603,12 @@ * * @return int error code */ - function fetchInto(&$arr, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=0) + function fetchInto(&$arr, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null) { if ($fetchmode == DB_FETCHMODE_DEFAULT) { $fetchmode = $this->dbh->fetchmode; } - return $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum=0); + return $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum); } /** Index: php4/pear/DB/ifx.php diff -u php4/pear/DB/ifx.php:1.4 php4/pear/DB/ifx.php:1.5 --- php4/pear/DB/ifx.php:1.4 Mon Mar 26 16:57:24 2001 +++ php4/pear/DB/ifx.php Wed Mar 28 15:52:21 2001 @@ -30,8 +30,6 @@ class DB_ifx extends DB_common { var $connection; - var $numrows; - var $row; var $affected = 0; var $dsn = array(); var $fetchmode = DB_FETCHMODE_ORDERED; /* Default fetch mode */ @@ -145,7 +143,7 @@ * * @return array a row of data, or false on error */ - function fetchRow($result, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=0) + function fetchRow($result, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null) { if ($fetchmode == DB_FETCHMODE_DEFAULT) { $fetchmode = $this->fetchmode; @@ -168,9 +166,12 @@ * @return int an array on success, a DB error code on failure, NULL * if there is no more data */ - function fetchInto($res, &$row, $fetchmode, $rownum=0) + function fetchInto($result, &$row, $fetchmode, $rownum=null) { - $rownum = ($rownum > 0) ? $rownum : null; + if (($rownum !== null) && ($rownum <= 0)) { + return $this->raiseError(); + } + // if $rownum is null, fetch row will return the next row if (!$row = @ifx_fetch_row($result, $rownum)) { return NULL; } Index: php4/pear/DB/mysql.php diff -u php4/pear/DB/mysql.php:1.50 php4/pear/DB/mysql.php:1.51 --- php4/pear/DB/mysql.php:1.50 Fri Mar 23 23:00:45 2001 +++ php4/pear/DB/mysql.php Wed Mar 28 15:52:21 2001 @@ -25,7 +25,7 @@ // XXX legend: // // XXX ERRORMSG: The error message from the mysql function should -// be registered here. +// be registered here. // require_once "DB/common.php"; @@ -38,6 +38,8 @@ var $phptype, $dbsyntax; var $prepare_tokens = array(); var $prepare_types = array(); + var $num_rows = array(); + var $fetchmode = DB_FETCHMODE_ORDERED; /* Default fetch mode */ // }}} // {{{ constructor @@ -89,28 +91,17 @@ * @access public * @return int DB_OK on success, a DB error on failure */ - - function connect($dsn, $persistent = false) + + function connect($dsninfo, $persistent = false) { - if (is_array($dsn)) { - $dsninfo = &$dsn; - } else { - $dsninfo = DB::parseDSN($dsn); - } - - if (!$dsninfo || !$dsninfo["phptype"]) { - return $this->raiseError(); // XXX ERRORMSG - } - $this->dsn = $dsninfo; - $dbhost = $dsninfo["hostspec"] ? $dsninfo["hostspec"] : "localhost"; $user = $dsninfo["username"]; $pw = $dsninfo["password"]; - + DB::assertExtension("mysql"); $connect_function = $persistent ? "mysql_pconnect" : "mysql_connect"; - + if ($dbhost && $user && $pw) { $conn = @$connect_function($dbhost, $user, $pw); } elseif ($dbhost && $user) { @@ -120,17 +111,17 @@ } else { $conn = false; } - + if ($conn == false) { - return $this->raiseError(); // XXX ERRORMSG + return $this->raiseError(DB_ERROR_CONNECT_FAILED); } - + if ($dsninfo["database"]) { if (!mysql_select_db($dsninfo["database"], $conn)) { return $this->raiseError(); // XXX ERRORMSG } } - + $this->connection = $conn; return DB_OK; } @@ -175,46 +166,38 @@ } // Determine which queries that should return data, and which // should return an error code only. - return DB::isManip($query) ? DB_OK : $result; + if (DB::isManip($query)) { + return DB_OK; + } + $numrows = $this->numrows($result); + if (is_object($numrows)) { + return $numrows; + } + $this->num_rows[$result] = $numrows; + return $result; } // }}} // {{{ fetchRow() /** - * Fetch a row and return as array. - * + * Fetch and return a row of data (it uses fetchInto for that) * @param $result MySQL result identifier - * @param $fetchmode how the resulting array should be indexed - * - * @access public + * @param $fetchmode format of fetched row array + * @param $rownum the absolute row number to fetch * - * @return mixed an array on success, a DB error on failure, NULL - * if there is no more data + * @return array a row of data, or false on error */ - function &fetchRow($result, $fetchmode = DB_FETCHMODE_DEFAULT) + function fetchRow($result, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null) { if ($fetchmode == DB_FETCHMODE_DEFAULT) { $fetchmode = $this->fetchmode; } - - if ($fetchmode & DB_FETCHMODE_ASSOC) { - $row = mysql_fetch_array($result, MYSQL_ASSOC); - } else { - $row = mysql_fetch_row($result); + $res = $this->fetchInto ($result, $arr, $fetchmode, $rownum); + if ($res !== DB_OK) { + return $res; } - - if (!$row) { - $errno = mysql_errno($this->connection); - - if (!$errno) { - return null; - } - - return $this->mysqlRaiseError($errno); - } - - return $row; + return $arr; } // }}} @@ -226,33 +209,32 @@ * @param $result MySQL result identifier * @param $arr (reference) array where data from the row is stored * @param $fetchmode how the array data should be indexed - * + * @param $rownum the row number to fetch * @access public * * @return int DB_OK on success, a DB error on failure */ - function fetchInto($result, &$arr, $fetchmode = DB_FETCHMODE_DEFAULT) + function fetchInto($result, &$arr, $fetchmode, $rownum=null) { - if ($fetchmode == DB_FETCHMODE_DEFAULT) { - $fetchmode = $this->fetchmode; + if ($rownum !== null) { + if (($rownum > 0) && ($rownum <= $this->num_rows[$result])) { + mysql_data_seek ($result, $rownum); + } else { + return null; + } } - if ($fetchmode & DB_FETCHMODE_ASSOC) { $arr = mysql_fetch_array($result, MYSQL_ASSOC); } else { $arr = mysql_fetch_row($result); } - if (!$arr) { $errno = mysql_errno($this->connection); - if (!$errno) { return NULL; } - return $this->mysqlRaiseError($errno); } - return DB_OK; } @@ -281,7 +263,7 @@ unset($this->prepare_tokens[$result]); unset($this->prepare_types[$result]); - return true; + return true; } // }}} @@ -325,7 +307,6 @@ if ($rows === null) { return $this->mysqlRaiseError(); } - return $rows; } @@ -376,7 +357,7 @@ * @access public * * @param $seq_name the name of the sequence - * + * * @param $ondemand whether to create the sequence table on demand * (default is true) * @@ -404,7 +385,7 @@ } return mysql_insert_id($this->connection); } - + // }}} // {{{ createSequence() @@ -454,7 +435,7 @@ // }}} // {{{ tableInfo() - + function tableInfo($result, $mode = null) { $count = 0; $id = 0; Index: php4/pear/DB/pgsql.php diff -u php4/pear/DB/pgsql.php:1.33 php4/pear/DB/pgsql.php:1.34 --- php4/pear/DB/pgsql.php:1.33 Mon Mar 26 16:57:24 2001 +++ php4/pear/DB/pgsql.php Wed Mar 28 15:52:21 2001 @@ -41,7 +41,7 @@ var $transaction_opcount = 0; var $dsn = array(); var $row = array(); - var $numrows = array(); + var $num_rows = array(); var $affected = 0; var $autocommit = true; var $fetchmode = DB_FETCHMODE_ORDERED; @@ -169,7 +169,7 @@ if (is_object($numrows)) { return $numrows; } - $this->numrows[$result] = $numrows; + $this->num_rows[$result] = $numrows; $this->affected = 0; return $result; } else { @@ -224,7 +224,7 @@ * * @return array a row of data, or false on error */ - function fetchRow($result, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=0) + function fetchRow($result, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null) { if ($fetchmode == DB_FETCHMODE_DEFAULT) { $fetchmode = $this->fetchmode; @@ -248,11 +248,11 @@ * * @return int DB_OK on success, a DB error code on failure */ - function fetchInto($result, &$row, $fetchmode, $rownum=0) + function fetchInto($result, &$row, $fetchmode, $rownum=null) { - $rownum = ($rownum > 0) ? $rownum : $this->row[$result]; - if ($rownum >= $this->numrows[$result]) { - return NULL; + $rownum = ($rownum !== null) ? $rownum : $this->row[$result]; + if ($rownum > $this->num_rows[$result]) { + return null; } if ($fetchmode & DB_FETCHMODE_ASSOC) { $row = @pg_fetch_array($result, $rownum, PGSQL_ASSOC); @@ -260,10 +260,11 @@ $row = @pg_fetch_row($result, $rownum); } if (!$row) { - $err = $this->pgsqlRaiseError(); - if ($err) { - return $err; + $err = pg_errormessage($this->connection); + if (!$err) { + return null; } + return $this->pgsqlRaiseError(); } $this->row[$result] = ++$rownum; return DB_OK; @@ -290,7 +291,7 @@ unset($this->prepare_tokens[$result]); unset($this->prepare_types[$result]); unset($this->row[$result]); - unset($this->numrows[$result]); + unset($this->num_rows[$result]); $this->affected = 0; return true; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]