cox Mon Apr 2 17:23:46 2001 EDT Modified files: /php4/pear/DB odbc.php sybase.php Log: odbc.php - spaces & idents - new temporary fetchInto() - removed extra checks in connect() Note: in fetchRow this line looks very strange (isn't 3 params?): $cols = odbc_fetch_into($result, &$row); sybase.php - spaces & idents - removed extra checks in connect() - changed fetchInto to return null on no more rows and added support for fetching row numbers
Index: php4/pear/DB/odbc.php diff -u php4/pear/DB/odbc.php:1.29 php4/pear/DB/odbc.php:1.30 --- php4/pear/DB/odbc.php:1.29 Wed Mar 21 21:55:54 2001 +++ php4/pear/DB/odbc.php Mon Apr 2 17:23:46 2001 @@ -25,8 +25,12 @@ // XXX legend: // // XXX ERRORMSG: The error message from the odbc function should -// be registered here. +// be registered here. // +// TODO: +// - change fetchrow to use fetchInto +// - implement $rownum param in FetchInto (supported by odbc functions) +// require_once 'DB/common.php'; @@ -34,138 +38,131 @@ { // {{{ properties - var $connection; - var $phptype, $dbsyntax; + var $connection; + var $phptype, $dbsyntax; // }}} // {{{ constructor - function DB_odbc() + function DB_odbc() { $this->DB_common(); - $this->phptype = 'odbc'; - $this->dbsyntax = 'sql92'; - $this->features = array( - 'prepare' => true, - 'pconnect' => true, - 'transactions' => false - ); - $this->errorcode_map = array( - "01004" => DB_ERROR_TRUNCATED, - "07001" => DB_ERROR_MISMATCH, - "21S01" => DB_ERROR_MISMATCH, - "21S02" => DB_ERROR_MISMATCH, - "22003" => DB_ERROR_INVALID_NUMBER, - "22008" => DB_ERROR_INVALID_DATE, - "22012" => DB_ERROR_DIVZERO, - "23000" => DB_ERROR_CONSTRAINT, - "24000" => DB_ERROR_INVALID, - "34000" => DB_ERROR_INVALID, - "37000" => DB_ERROR_SYNTAX, - "42000" => DB_ERROR_SYNTAX, - "IM001" => DB_ERROR_UNSUPPORTED, - "S0001" => DB_ERROR_NOT_FOUND, - "S0002" => DB_ERROR_NOT_FOUND, - "S0011" => DB_ERROR_ALREADY_EXISTS, - "S0012" => DB_ERROR_NOT_FOUND, - "S0021" => DB_ERROR_ALREADY_EXISTS, - "S0022" => DB_ERROR_NOT_FOUND, - "S1009" => DB_ERROR_INVALID, - "S1090" => DB_ERROR_INVALID, - "S1C00" => DB_ERROR_NOT_CAPABLE - ); - } + $this->phptype = 'odbc'; + $this->dbsyntax = 'sql92'; + $this->features = array( + 'prepare' => true, + 'pconnect' => true, + 'transactions' => false + ); + $this->errorcode_map = array( + "01004" => DB_ERROR_TRUNCATED, + "07001" => DB_ERROR_MISMATCH, + "21S01" => DB_ERROR_MISMATCH, + "21S02" => DB_ERROR_MISMATCH, + "22003" => DB_ERROR_INVALID_NUMBER, + "22008" => DB_ERROR_INVALID_DATE, + "22012" => DB_ERROR_DIVZERO, + "23000" => DB_ERROR_CONSTRAINT, + "24000" => DB_ERROR_INVALID, + "34000" => DB_ERROR_INVALID, + "37000" => DB_ERROR_SYNTAX, + "42000" => DB_ERROR_SYNTAX, + "IM001" => DB_ERROR_UNSUPPORTED, + "S0001" => DB_ERROR_NOT_FOUND, + "S0002" => DB_ERROR_NOT_FOUND, + "S0011" => DB_ERROR_ALREADY_EXISTS, + "S0012" => DB_ERROR_NOT_FOUND, + "S0021" => DB_ERROR_ALREADY_EXISTS, + "S0022" => DB_ERROR_NOT_FOUND, + "S1009" => DB_ERROR_INVALID, + "S1090" => DB_ERROR_INVALID, + "S1C00" => DB_ERROR_NOT_CAPABLE + ); + } // }}} // {{{ connect() - /** - * Connect to a database and log in as the specified user. - * - * @param $dsn the data source name (see DB::parseDSN for syntax) - * @param $persistent (optional) whether the connection should - * be persistent - * - * @return int DB_OK on success, a DB error code on failure - */ - function connect($dsn, $persistent = false) { - if (is_array($dsn)) { - $dsninfo = &$dsn; - } else { - $dsninfo = DB::parseDSN($dsn); - } - if (!$dsninfo || !$dsninfo['phptype']) { - return $this->raiseError(); // XXX ERRORMSG - } + /** + * Connect to a database and log in as the specified user. + * + * @param $dsn the data source name (see DB::parseDSN for syntax) + * @param $persistent (optional) whether the connection should + * be persistent + * + * @return int DB_OK on success, a DB error code on failure + */ + function connect($dsninfo, $persistent = false) + { $this->dsn = $dsninfo; if (!empty($dsninfo['dbsyntax'])) { $this->dbsyntax = $dsninfo['dbsyntax']; + } + switch ($this->dbsyntax) { + case 'solid': + $this->features = array( + 'prepare' => true, + 'pconnect' => true, + 'transactions' => true + ); + $default_dsn = 'localhost'; + break; + default: + break; } - switch ($this->dbsyntax) { - case 'solid': - $this->features = array( - 'prepare' => true, - 'pconnect' => true, - 'transactions' => true - ); - $default_dsn = 'localhost'; - break; - default: - break; - } - $dbhost = $dsninfo['hostspec'] ? $dsninfo['hostspec'] : 'localhost'; - $user = $dsninfo['username']; - $pw = $dsninfo['password']; + $dbhost = $dsninfo['hostspec'] ? $dsninfo['hostspec'] : 'localhost'; + $user = $dsninfo['username']; + $pw = $dsninfo['password']; DB::assertExtension("odbc"); - if ($this->provides('pconnect')) { - $connect_function = $persistent ? 'odbc_pconnect' : 'odbc_connect'; - } else { - $connect_function = 'odbc_connect'; - } + if ($this->provides('pconnect')) { + $connect_function = $persistent ? 'odbc_pconnect' : 'odbc_connect'; + } else { + $connect_function = 'odbc_connect'; + } $conn = @$connect_function($dbhost, $user, $pw); - if (!is_resource($conn)) { - return $this->raiseError(); - } - $this->connection = $conn; - return DB_OK; - } + if (!is_resource($conn)) { + return $this->raiseError(DB_ERROR_CONNECT_FAILED); + } + $this->connection = $conn; + return DB_OK; + } // }}} // {{{ disconnect() - function disconnect() + function disconnect() { - $err = odbc_close($this->connection); // XXX ERRORMSG - return $err; - } + $err = odbc_close($this->connection); // XXX ERRORMSG + return $err; + } // }}} // {{{ simpleQuery() - /** - * Send a query to ODBC and return the results as a ODBC resource - * identifier. - * - * @param $query the SQL query - * - * @return int returns a valid ODBC result for successful SELECT - * queries, DB_OK for other successful queries. A DB error code - * is returned on failure. - */ - function simpleQuery($query) + /** + * Send a query to ODBC and return the results as a ODBC resource + * identifier. + * + * @param $query the SQL query + * + * @return int returns a valid ODBC result for successful SELECT + * queries, DB_OK for other successful queries. A DB error code + * is returned on failure. + */ + function simpleQuery($query) { - $this->last_query = $query; + $this->last_query = $query; $query = $this->modifyQuery($query); - $result = odbc_exec($this->connection, $query); - if (!$result) { - return $this->raiseError(); // XXX ERRORMSG - } - // Determine which queries that should return data, and which - // should return an error code only. + $result = odbc_exec($this->connection, $query); + if (!$result) { + return $this->raiseError(); // XXX ERRORMSG + } + // Determine which queries that should return data, and which + // should return an error code only. return DB::isManip($query) ? DB_OK : $result; - } + } - // }}} + // }}} // {{{ fetchRow() /** @@ -183,47 +180,56 @@ if ($fetchmode == DB_FETCHMODE_DEFAULT) { $fetchmode = $this->fetchmode; } - - $cols = odbc_fetch_into($result, &$row); - if (!$cols) { - if ($errno = odbc_error($this->connection)) { - return $this->raiseError($errno); - } else { - return null; - } - } - + $cols = odbc_fetch_into($result, &$row); + if (!$cols) { + if ($errno = odbc_error($this->connection)) { + return $this->raiseError($errno); + } else { + return null; + } + } if ($fetchmode == DB_FETCHMODE_ORDERED) { return $row; - } else if ($fetchmode == DB_FETCHMODE_ASSOC) { + } elseif ($fetchmode == DB_FETCHMODE_ASSOC) { for ($i = 0; $i < count($row); $i++) { $colName = odbc_field_name($result, $i+1); $a[$colName] = $row[$i]; } return $a; } else { - return $this->raiseError(); // XXX ERRORMSG + return $this->raiseError(); // XXX ERRORMSG + } + } + + function fetchInto($result, &$row, $fetchmode, $rownum=null) + { + if ($rownum !== null) { + return $this->raiseError(DB_ERROR_UNSUPPORTED); } + if (is_array($row = $this->fetchRow($result, $fetchmode))) { + return DB_OK; + } + return $row; } - + // }}} // {{{ freeResult() - function freeResult($result) + function freeResult($result) { - $err = odbc_free_result($result); // XXX ERRORMSG - return $err; - } + $err = odbc_free_result($result); // XXX ERRORMSG + return $err; + } - // }}} + // }}} // {{{ quoteString() - function quoteString($string) + function quoteString($string) { - return str_replace("'", "''", $string); - } + return str_replace("'", "''", $string); + } - // }}} + // }}} // {{{ numCols() function numCols($result) Index: php4/pear/DB/sybase.php diff -u php4/pear/DB/sybase.php:1.15 php4/pear/DB/sybase.php:1.16 --- php4/pear/DB/sybase.php:1.15 Mon Feb 19 04:22:26 2001 +++ php4/pear/DB/sybase.php Mon Apr 2 17:23:46 2001 @@ -16,7 +16,7 @@ // | Authors: Sterling Hughes <[EMAIL PROTECTED]> | // +----------------------------------------------------------------------+ // -// $Id: sybase.php,v 1.15 2001/02/19 12:22:26 ssb Exp $ +// $Id: sybase.php,v 1.16 2001/04/03 00:23:46 cox Exp $ // // Database independent query interface definition for PHP's Sybase // extension. @@ -28,133 +28,133 @@ { // {{{ properties - var $connection; - var $phptype, $dbsyntax; - var $prepare_tokens = array(); - var $prepare_types = array(); + var $connection; + var $phptype, $dbsyntax; + var $prepare_tokens = array(); + var $prepare_types = array(); // }}} // {{{ constructor - function DB_sybase() + function DB_sybase() { $this->DB_common(); - $this->phptype = 'sybase'; - $this->dbsyntax = 'sybase'; - $this->features = array( - 'prepare' => false, - 'pconnect' => true, - 'transactions' => false - ); - } + $this->phptype = 'sybase'; + $this->dbsyntax = 'sybase'; + $this->features = array( + 'prepare' => false, + 'pconnect' => true, + 'transactions' => false + ); + } // }}} // {{{ connect() - 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(); - } $this->dsn = $dsninfo; - $dbhost = $dsninfo['hostspec'] ? $dsninfo['hostspec'] : 'localhost'; - $connect_function = $persistent ? 'sybase_pconnect' : 'sybase_connect'; - $conn = $dbhost ? $connect_function($dbhost) : false; - $dsninfo['database'] && @sybase_select_db($dsninfo['database'], $conn); - $this->connection = $conn; - return DB_OK; - } + $dbhost = $dsninfo['hostspec'] ? $dsninfo['hostspec'] : 'localhost'; + $connect_function = $persistent ? 'sybase_pconnect' : 'sybase_connect'; + $conn = $dbhost ? $connect_function($dbhost) : false; + $dsninfo['database'] && @sybase_select_db($dsninfo['database'], $conn); + $this->connection = $conn; + return DB_OK; + } // }}} // {{{ disconnect() - function disconnect() + function disconnect() { - return @sybase_close($this->connection); - } + return @sybase_close($this->connection); + } // }}} // {{{ simpleQuery() function simpleQuery($query) { - $this->last_query = $query; + $this->last_query = $query; $query = $this->modifyQuery($query); - $result = @sybase_query($query, $this->connection); - if (!$result) { - return $this->raiseError(); - } - // Determine which queries that should return data, and which - // should return an error code only. - return DB::isManip($query) ? DB_OK : $result; + $result = @sybase_query($query, $this->connection); + if (!$result) { + return $this->raiseError(); + } + // Determine which queries that should return data, and which + // should return an error code only. + return DB::isManip($query) ? DB_OK : $result; } - + // }}} // {{{ fetchRow() function &fetchRow($result, $fetchmode = DB_FETCHMODE_DEFAULT) { - if ($fetchmode == DB_FETCHMODE_DEFAULT) { - $fetchmode = $this->fetchmode; - } - $row = ($fetchmode & DB_FETCHMODE_ASSOC) ? @sybase_fetch_array($result) : @sybase_fetch_row($result); - if (!$row) { - if ($errmsg = sybase_get_last_message()) { - return $this->raiseError($errmsg); - } else { - return null; - } - } - - return $row; + if ($fetchmode == DB_FETCHMODE_DEFAULT) { + $fetchmode = $this->fetchmode; + } + $row = ($fetchmode & DB_FETCHMODE_ASSOC) ? @sybase_fetch_array($result) : +@sybase_fetch_row($result); + if (!$row) { + if ($errmsg = sybase_get_last_message()) { + return $this->raiseError($errmsg); + } else { + return null; + } + } + return $row; } - + // }}} // {{{ fetchInto() - function fetchInto($result, &$ar, $fetchmode=DB_FETCHMODE_DEFAULT) + function fetchInto($result, &$ar, $fetchmode, $rownum=null) { - if ($fetchmode == DB_FETCHMODE_DEFAULT) { - $fetchmode = $this->fetchmode; - } - $ar = ($fetchmode & DB_FETCHMODE_ASSOC) ? @sybase_fetch_array($result) : @sybase_fetch_row($result); - if (!$ar) { - return $this->raiseError(); - } - return DB_OK; - } + if ($rownum !== null) { + if (!sybase_data_seek($result, $rownum)) { + return $this->raiseError(); + } + } + if ($fetchmode == DB_FETCHMODE_DEFAULT) { + $fetchmode = $this->fetchmode; + } + $ar = ($fetchmode & DB_FETCHMODE_ASSOC) ? @sybase_fetch_array($result) : +@sybase_fetch_row($result); + if (!$ar) { + if ($errmsg = sybase_get_last_message()) { + return $this->raiseError($errmsg); + } else { + return null; + } + } + return DB_OK; + } // }}} // {{{ freeResult() - function freeResult($result) + function freeResult($result) { - if (is_resource($result)) { - return @sybase_free_result($result); - } - if (!isset($this->prepare_tokens[$result])) { - return false; - } - unset($this->prepare_tokens[$result]); - unset($this->prepare_types[$result]); - return true; - } + if (is_resource($result)) { + return @sybase_free_result($result); + } + if (!isset($this->prepare_tokens[$result])) { + return false; + } + unset($this->prepare_tokens[$result]); + unset($this->prepare_types[$result]); + return true; + } // }}} // {{{ numCols() - function numCols($result) + function numCols($result) { - $cols = @sybase_num_fields($result); - if (!$cols) { - return $this->raiseError(); - } - return $cols; - } + $cols = @sybase_num_fields($result); + if (!$cols) { + return $this->raiseError(); + } + return $cols; + } // }}} }
-- 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]