From 4aaddb32e1bd1a7833478f1fd4194507dba2c924 Mon Sep 17 00:00:00 2001 From: thomascube Date: Thu, 18 May 2006 17:49:20 +0000 Subject: Removed MDB2 classes; install seperately --- program/lib/MDB2/Driver/querysim.php | 684 ----------------------------------- 1 file changed, 684 deletions(-) delete mode 100755 program/lib/MDB2/Driver/querysim.php (limited to 'program/lib/MDB2/Driver/querysim.php') diff --git a/program/lib/MDB2/Driver/querysim.php b/program/lib/MDB2/Driver/querysim.php deleted file mode 100755 index 928a86bd1..000000000 --- a/program/lib/MDB2/Driver/querysim.php +++ /dev/null @@ -1,684 +0,0 @@ - | -// | Bert Dawson | -// +----------------------------------------------------------------------+ -// | Original PHP Author: Alan Richmond | -// | David Huyck | -// +----------------------------------------------------------------------+ -// | Special note concerning code documentation: | -// | QuerySim was originally created for use during development of | -// | applications built using the Fusebox framework. (www.fusebox.org) | -// | Fusebox uses an XML style of documentation called Fusedoc. (Which | -// | is admittedly not well suited to documenting classes and functions. | -// | This short-coming is being addressed by the Fusebox community.) PEAR | -// | uses a Javadoc style of documentation called PHPDoc. (www.phpdoc.de) | -// | Since this class extension spans two groups of users, it is asked | -// | that the members of each respect the documentation standard of the | -// | other. So it is a further requirement that both documentation | -// | standards be included and maintained. If assistance is required | -// | please contact Alan Richmond. | -// +----------------------------------------------------------------------+ -// -// $Id$ -// - -/* - - - I take information and turn it into a recordset that can be accessed - through the PEAR MDB2 API. Based on Hal Helms' QuerySim.cfm ColdFusion - custom tag available at halhelms.com. - - - - - - - - Extensive revision that is backwardly compatible but eliminates the - need for a separate .sim file. - - - Rewrote in PHP as an extention to the PEAR DB API. - Functions supported: - connect, disconnect, query, fetchRow, freeResult, - numCols, numRows, getSpecialQuery - David Huyck (bombusbee.com) added ability to escape special - characters (i.e., delimiters) using a '\'. - Extended PEAR DB options[] for adding incoming parameters. Added - options: columnDelim, dataDelim, eolDelim - - - Added the ability to set the QuerySim options at runtime. - Default options are: - 'columnDelim' => ',', // Commas split the column names - 'dataDelim' => '|', // Pipes split the data fields - 'eolDelim' => chr(13).chr(10) // Carriage returns split the - // lines of data - Affected functions are: - DB_querysim(): set the default options when the - constructor method is called - _parseQuerySim($query): altered the parsing of lines, column - names, and data fields - _empty2null: altered the way this function is called - to simplify calling it - - - Added error catching for malformed QuerySim text. - Bug fix _empty2null(): altered version was returning unmodified - lineData. - Cleanup: - PEAR compliant formatting, finished PHPDocs and added 'out' to - Fusedoc 'io'. - Broke up _parseQuerySim() into _buildResult() and _parseOnDelim() - to containerize duplicate parse code. - - - Edited the _buildResult() and _parseOnDelim() functions to improve - reliability of special character escaping. - Re-introduced a custom setOption() method to throw an error when a - person tries to set one of the delimiters to '\'. - - - Added '/' delimiter param to preg_quote() in _empty2null() and - _parseOnDelim() so '/' can be used as a delimiter. - Added error check for columnDelim == eolDelim or dataDelim == eolDelim. - Renamed some variables for consistancy. - - - Removed protected function _empty2null(). Turns out preg_split() - deals with empty elemants by making them zero length strings, just - what they ended up being anyway. This should speed things up a little. - Affected functions: - _parseOnDelim() perform trim on line here, instead of in - _empty2null(). - _buildResult() remove call to _empty2null(). - _empty2null() removed function. - - - Ported to PEAR MDB2. - Methods supported: - connect, query, getColumnNames, numCols, valid, fetch, - numRows, free, fetchRow, nextResult, setLimit - (inherited). - - - - Changed default eolDelim to a *nix file eol, since we're trimming - the result anyway, it makes no difference for Windows. Now only - Mac file eols should need to be set (and other kinds of chars). - - - Got WAY too long. See querysim_readme.txt for instructions and some - examples. - io section only documents elements of DB_result that DB_querysim uses, - adds or changes; see MDB2 and MDB2_Driver_Common for more info. - io section uses some elements that are not Fusedoc 2.0 compliant: - object and resource. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ - -/** - * MDB2 QuerySim driver - * - * @package MDB2 - * @category Database - * @author Alan Richmond - */ -class MDB2_Driver_querysim extends MDB2_Driver_Common -{ - // {{{ properties - var $escape_quotes = "\\"; - // }}} - - // {{{ constructor - - /** - * Constructor - */ - function __construct() - { - parent::__construct(); - - $this->phptype = 'querysim'; - $this->dbsyntax = 'querysim'; - - // Most of these are dummies to simulate availability if checked - $this->supported['sequences'] = 'emulated'; - $this->supported['indexes'] = true; - $this->supported['affected_rows'] = false; - $this->supported['summary_functions'] = false; - $this->supported['order_by_text'] = false; - $this->supported['current_id'] = 'emulated'; - $this->supported['limit_queries'] = true;// this one is real - $this->supported['LOBs'] = true; - $this->supported['replace'] = 'emulated'; - $this->supported['sub_selects'] = 'emulated'; - $this->supported['transactions'] = false; - $this->supported['auto_increment'] = false; - $this->supported['primary_key'] = false; - - $this->options['columnDelim'] = ','; - $this->options['dataDelim'] = '|'; - $this->options['eolDelim'] = "\n"; - } - - // }}} - - // {{{ connect() - - /** - * Open a file or simulate a successful database connect - * - * @access public - * - * @return mixed MDB2_OK string on success, a MDB2 error object on failure - */ - function connect() - { - if (is_resource($this->connection)) { - if ($this->connected_database_name == $this->database_name - && ($this->opened_persistent == $this->options['persistent']) - ) { - return MDB2_OK; - } - if ($this->connected_database_name) { - $this->_close($this->connection); - } - $this->disconnect(); - } - - $connection = 1;// sim connect - // if external, check file... - if ($this->database_name) { - $file = $this->database_name; - if (!file_exists($file)) { - return $this->raiseError(MDB2_ERROR_NOT_FOUND, null, null, 'file not found'); - } - if (!is_file($file)) { - return $this->raiseError(MDB2_ERROR_INVALID, null, null, 'not a file'); - } - if (!is_readable($file)) { - return $this->raiseError(MDB2_ERROR_ACCESS_VIOLATION, null, null, - 'could not open file - check permissions'); - } - // ...and open if persistent - if ($this->options['persistent']) { - $connection = @fopen($file, 'r'); - } - } - $this->connection = $connection; - $this->connected_database_name = $this->database_name; - $this->opened_persistent = $this->options['persistent']; - $this->dbsyntax = $this->dsn['dbsyntax'] ? $this->dsn['dbsyntax'] : $this->phptype; - - return MDB2_OK; - } - // }}} - - // {{{ disconnect() - - /** - * Log out and disconnect from the database. - * - * @return mixed true on success, false if not connected and error - * object on error - * @access public - */ - function disconnect() - { - if (is_resource($this->connection)) { - if (($this->opened_persistent) && (is_resource($this->connection))) { - if (!@fclose($this->connection)) { - return $this->raiseError(); - } - } - $this->connection = 0; - } - return MDB2_OK; - } - // }}} - - // {{{ _doQuery() - - /** - * Execute a query - * @param string $query query - * @param boolean $isManip if the query is a manipulation query - * @param resource $connection - * @param string $database_name - * @return result or error object - * @access protected - */ - function _doQuery($query, $isManip = false, $connection = null, $database_name = null) - { - if ($isManip) { - return $this->raiseError(MDB2_ERROR_UNSUPPORTED); - } - - $this->last_query = $query; - $this->debug($query, 'query'); - if ($this->options['disable_query']) { - return null; - } - - $result = $this->_buildResult($query); - if (PEAR::isError($result)) { - return $result; - } - - if ($limit > 0) { - $result[1] = array_slice($result[1], $offset-1, $limit); - } - return $result; - } - // }}} - - // {{{ _readFile() - - /** - * Read an external file - * - * @param string filepath/filename - * - * @access protected - * - * @return string the contents of a file - */ - function _readFile() - { - $buffer = ''; - if ($this->opened_persistent) { - while (!feof($this->connection)) { - $buffer.= fgets($this->connection, 1024); - } - } else { - $this->connection = @fopen($this->connected_database_name, 'r'); - while (!feof($this->connection)) { - $buffer.= fgets($this->connection, 1024); - } - $this->connection = @fclose($this->connection); - } - return $buffer; - } - // }}} - - // {{{ _buildResult() - - /** - * Convert QuerySim text into an array - * - * @param string Text of simulated query - * - * @access protected - * - * @return multi-dimensional array containing the column names and data - * from the QuerySim - */ - function _buildResult($query) - { - $eolDelim = $this->options['eolDelim']; - $columnDelim = $this->options['columnDelim']; - $dataDelim = $this->options['dataDelim']; - - $columnNames = array(); - $data = array(); - - if ($columnDelim == $eolDelim) { - return $this->raiseError(MDB2_ERROR_INVALID, null, null, - 'columnDelim and eolDelim must be different'); - } elseif ($dataDelim == $eolDelim){ - return $this->raiseError(MDB2_ERROR_INVALID, null, null, - 'dataDelim and eolDelim must be different'); - } - - $query = trim($query); - //tokenize escaped slashes - $query = str_replace('\\\\', '[$double-slash$]', $query); - - if (!strlen($query)) { - return $this->raiseError(MDB2_ERROR_SYNTAX, null, null, - 'empty querysim text'); - } - $lineData = $this->_parseOnDelim($query, $eolDelim); - //kill the empty last row created by final eol char if it exists - if (!strlen(trim($lineData[count($lineData) - 1]))) { - unset($lineData[count($lineData) - 1]); - } - //populate columnNames array - $thisLine = each($lineData); - $columnNames = $this->_parseOnDelim($thisLine[1], $columnDelim); - if ((in_array('', $columnNames)) || (in_array('NULL', $columnNames))) { - return $this->raiseError(MDB2_ERROR_SYNTAX, null, null, - 'all column names must be defined'); - } - //replace double-slash tokens with single-slash - $columnNames = str_replace('[$double-slash$]', '\\', $columnNames); - $columnCount = count($columnNames); - $rowNum = 0; - //loop through data lines - if (count($lineData) > 1) { - while ($thisLine = each($lineData)) { - $thisData = $this->_parseOnDelim($thisLine[1], $dataDelim); - $thisDataCount = count($thisData); - if ($thisDataCount != $columnCount) { - $fileLineNo = $rowNum + 2; - return $this->raiseError(MDB2_ERROR_SYNTAX, null, null, - "number of data elements ($thisDataCount) in line $fileLineNo not equal to number of defined columns ($columnCount)"); - } - //loop through data elements in data line - foreach ($thisData as $thisElement) { - if (strtoupper($thisElement) == 'NULL'){ - $thisElement = ''; - } - //replace double-slash tokens with single-slash - $data[$rowNum][] = str_replace('[$double-slash$]', '\\', $thisElement); - }//end foreach - ++$rowNum; - }//end while - }//end if - return array($columnNames, $data); - }//end function _buildResult() - // }}} - - // {{{ _parseOnDelim() - - /** - * Split QuerySim string into an array on a delimiter - * - * @param string $thisLine Text of simulated query - * @param string $delim The delimiter to split on - * - * @access protected - * - * @return array containing parsed string - */ - function _parseOnDelim($thisLine, $delim) - { - $delimQuoted = preg_quote($delim, '/'); - $thisLine = trim($thisLine); - - $parsed = preg_split('/(?options['eolDelim']) { - //replaces escape chars - $parsed = preg_replace('/\\\\/', '', $parsed); - } - return $parsed; - } - // }}} -} - -class MDB2_Result_querysim extends MDB2_Result_Common -{ - // }}} - // {{{ fetchRow() - - /** - * Fetch a row and insert the data into an existing array. - * - * @param int $fetchmode how the array data should be indexed - * @param int $rownum number of the row where the data can be found - * @return int data array on success, a MDB2 error on failure - * @access public - */ - function &fetchRow($fetchmode = MDB2_FETCHMODE_DEFAULT, $rownum = null) - { - if (is_null($this->result)) { - $err =& $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null, - 'fetchRow: resultset has already been freed'); - return $err; - } - if (!is_null($rownum)) { - $seek = $this->seek($rownum); - if (PEAR::isError($seek)) { - return $seek; - } - } - $target_rownum = $this->rownum + 1; - if ($fetchmode == MDB2_FETCHMODE_DEFAULT) { - $fetchmode = $this->db->fetchmode; - } - if (!isset($this->result[1][$target_rownum])) { - $null = null; - return $null; - } - $row = $this->result[1][$target_rownum]; - // make row associative - if ($fetchmode & MDB2_FETCHMODE_ASSOC) { - $column_names = $this->getColumnNames(); - foreach ($column_names as $name => $i) { - $column_names[$name] = $row[$i]; - } - $row = $column_names; - } - if (($mode = ($this->db->options['portability'] & MDB2_PORTABILITY_RTRIM) - + ($this->db->options['portability'] & MDB2_PORTABILITY_EMPTY_TO_NULL)) - ) { - $this->db->_fixResultArrayValues($row, $mode); - } - if (!empty($this->values)) { - $this->_assignBindColumns($row); - } - if (!empty($this->types)) { - $row = $this->db->datatype->convertResultRow($this->types, $row); - } - if ($fetchmode === MDB2_FETCHMODE_OBJECT) { - $object_class = $this->db->options['fetch_class']; - if ($object_class == 'stdClass') { - $row = (object) $row; - } else { - $row = &new $object_class($row); - } - } - ++$this->rownum; - return $row; - } - - // }}} - // {{{ _getColumnNames() - - /** - * Retrieve the names of columns returned by the DBMS in a query result. - * - * @return mixed an associative array variable - * that will hold the names of columns. The - * indexes of the array are the column names - * mapped to lower case and the values are the - * respective numbers of the columns starting - * from 0. Some DBMS may not return any - * columns when the result set does not - * contain any rows. - * - * a MDB2 error on failure - * @access private - */ - function _getColumnNames() - { - if (is_null($this->result)) { - return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null, - 'getColumnNames: resultset has already been freed'); - } - $columns = array_flip($this->result[0]); - if ($this->db->options['portability'] & MDB2_PORTABILITY_FIX_CASE) { - $columns = array_change_key_case($columns, $this->db->options['field_case']); - } - return $columns; - } - - // }}} - // {{{ numCols() - - /** - * Count the number of columns returned by the DBMS in a query result. - * - * @access public - * @return mixed integer value with the number of columns, a MDB2 error - * on failure - */ - function numCols() - { - if (is_null($this->result)) { - return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null, - 'numCols: resultset has already been freed'); - } - $cols = count($this->result[0]); - return $cols; - } -} - -class MDB2_BufferedResult_querysim extends MDB2_Result_querysim -{ - // {{{ seek() - - /** - * seek to a specific row in a result set - * - * @param int $rownum number of the row where the data can be found - * @return mixed MDB2_OK on success, a MDB2 error on failure - * @access public - */ - function seek($rownum = 0) - { - if (is_null($this->result)) { - return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null, - 'seek: resultset has already been freed'); - } - $this->rownum = $rownum - 1; - return MDB2_OK; - } - - // }}} - // {{{ valid() - - /** - * check if the end of the result set has been reached - * - * @return mixed true or false on sucess, a MDB2 error on failure - * @access public - */ - function valid() - { - $numrows = $this->numRows(); - if (PEAR::isError($numrows)) { - return $numrows; - } - return $this->rownum < ($numrows - 1); - } - - // }}} - // {{{ numRows() - - /** - * returns the number of rows in a result object - * - * @return mixed MDB2 Error Object or the number of rows - * @access public - */ - function numRows() - { - if (is_null($this->result)) { - return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null, - 'numRows: resultset has already been freed'); - } - $rows = count($this->result[1]); - return $rows; - } -} - - -class MDB2_Statement_querysim extends MDB2_Statement_Common -{ - -} - -?> \ No newline at end of file -- cgit v1.2.3