⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peardb.php

📁 PhpWiki是sourceforge的一个开源项目
💻 PHP
📖 第 1 页 / 共 4 页
字号:
    /* some variables and functions for DB backend abstraction (action=upgrade) */    function database () {        return $this->_dbh->dsn['database'];    }    function backendType() {        return $this->_dbh->phptype;    }    function connection() {        return $this->_dbh->connection;    }    function getRow($query) {        return $this->_dbh->getRow($query);    }    function listOfTables() {        return $this->_dbh->getListOf('tables');    }    function listOfFields($database,$table) {        if ($this->backendType() == 'mysql') {            $fields = array();            assert(!empty($database));            assert(!empty($table));  	    $result = mysql_list_fields($database, $table, $this->_dbh->connection) or   	        trigger_error(__FILE__.':'.__LINE__.' '.mysql_error(), E_USER_WARNING);  	    if (!$result) return array();              $columns = mysql_num_fields($result);            for ($i = 0; $i < $columns; $i++) {                $fields[] = mysql_field_name($result, $i);            }            mysql_free_result($result);            return $fields;        } else {            // TODO: try ADODB version?            trigger_error("Unsupported dbtype and backend. Either switch to ADODB or check it manually.");        }    }};/** * This class is a generic iterator. * * WikiDB_backend_PearDB_iter only iterates over things that have * 'pagename', 'pagedata', etc. etc. * * Probably WikiDB_backend_PearDB_iter and this class should be merged * (most of the code is cut-and-paste :-( ), but I am trying to make * changes that could be merged easily. * * @author: Dan Frankowski */class WikiDB_backend_PearDB_generic_iterextends WikiDB_backend_iterator{    function WikiDB_backend_PearDB_generic_iter($backend, $query_result, $field_list = NULL) {        if (DB::isError($query_result)) {            // This shouldn't happen, I thought.            $backend->_pear_error_callback($query_result);        }                $this->_backend = &$backend;        $this->_result = $query_result;    }    function count() {        if (!$this->_result)            return false;        return $this->_result->numRows();    }        function next() {        $backend = &$this->_backend;        if (!$this->_result)            return false;        $record = $this->_result->fetchRow(DB_FETCHMODE_ASSOC);        if (!$record) {            $this->free();            return false;        }                return $record;    }    function free () {        if ($this->_result) {            $this->_result->free();            $this->_result = false;        }    }}class WikiDB_backend_PearDB_iterextends WikiDB_backend_PearDB_generic_iter{    function next() {        $backend = &$this->_backend;        if (!$this->_result)            return false;        $record = $this->_result->fetchRow(DB_FETCHMODE_ASSOC);        if (!$record) {            $this->free();            return false;        }                $pagedata = $backend->_extract_page_data($record);        $rec = array('pagename' => $record['pagename'],                     'pagedata' => $pagedata);        if (!empty($record['version'])) {            $rec['versiondata'] = $backend->_extract_version_data($record);            $rec['version'] = $record['version'];        }                return $rec;    }}// word searchclass WikiDB_backend_PearDB_searchextends WikiDB_backend_search{    function WikiDB_backend_PearDB_search(&$search, &$dbh) {        $this->_dbh = $dbh;        $this->_case_exact = $search->_case_exact;    }    function _pagename_match_clause($node) {         $word = $node->sql();        if ($node->op == 'REGEX') { // posix regex extensions            if (preg_match("/mysql/i", $this->_dbh->phptype))                return "pagename REGEXP '$word'";        } else {            return ($this->_case_exact                     ? "pagename LIKE '$word'"                     : "LOWER(pagename) LIKE '$word'");        }    }    function _fulltext_match_clause($node) {         $word = $node->sql();        return $this->_pagename_match_clause($node)               // probably convert this MATCH AGAINST or SUBSTR/POSITION without wildcards               . ($this->_case_exact ? " OR content LIKE '$word'"                                      : " OR LOWER(content) LIKE '$word'");    }}// $Log: PearDB.php,v $// Revision 1.87  2005/02/10 19:04:24  rurban// move getRow up one level to our backend class//// Revision 1.86  2005/01/29 19:51:02  rurban// Bugs item #1077769 fixed by frugal.// Deleted the wrong page. Fix all other tables also.//// Revision 1.85  2005/01/25 08:03:35  rurban// support DATABASE_PERSISTENT besides dsn database?persistent=false; move lock_count up (per Charles Corrigan)//// Revision 1.84  2005/01/18 20:55:47  rurban// reformatting and two bug fixes: adding missing parens//// Revision 1.83  2005/01/18 10:11:29  rurban// Oops. Again thanks to Charles Corrigan//// Revision 1.82  2005/01/18 08:55:51  rurban// fix quoting//// Revision 1.81  2005/01/17 08:53:09  rurban// pagedata fix by Charles Corrigan//// Revision 1.80  2004/12/22 18:33:31  rurban// fix page _id_cache logic for _get_pageid create_if_missing//// Revision 1.79  2004/12/10 02:45:27  rurban// SQL optimization://   put _cached_html from pagedata into a new seperate blob, not huge serialized string.//   it is only rarelely needed: for current page only, if-not-modified//   but was extracted for every simple page iteration.//// Revision 1.78  2004/12/08 12:55:51  rurban// support new non-destructive delete_page via generic backend method//// Revision 1.77  2004/12/06 19:50:04  rurban// enable action=remove which is undoable and seeable in RecentChanges: ADODB ony for now.// renamed delete_page to purge_page.// enable action=edit&version=-1 to force creation of a new version.// added BABYCART_PATH config// fixed magiqc in adodb.inc.php// and some more docs//// Revision 1.76  2004/11/30 17:45:53  rurban// exists_links backend implementation//// Revision 1.75  2004/11/28 20:42:33  rurban// Optimize PearDB _extract_version_data and _extract_page_data.//// Revision 1.74  2004/11/27 14:39:05  rurban// simpified regex search architecture://   no db specific node methods anymore,//   new sql() method for each node//   parallel to regexp() (which returns pcre)//   regex types bitmasked (op's not yet)// new regex=sql// clarified WikiDB::quote() backend methods://   ->quote() adds surrounsing quotes//   ->qstr() (new method) assumes strings and adds no quotes! (in contrast to ADODB)//   pear and adodb have now unified quote methods for all generic queries.//// Revision 1.73  2004/11/26 18:39:02  rurban// new regex search parser and SQL backends (90% complete, glob and pcre backends missing)//// Revision 1.72  2004/11/25 17:20:51  rurban// and again a couple of more native db args: backlinks//// Revision 1.71  2004/11/23 13:35:48  rurban// add case_exact search//// Revision 1.70  2004/11/21 11:59:26  rurban// remove final \n to be ob_cache independent//// Revision 1.69  2004/11/20 17:49:39  rurban// add fast exclude support to SQL get_all_pages//// Revision 1.68  2004/11/20 17:35:58  rurban// improved WantedPages SQL backends// PageList::sortby new 3rd arg valid_fields (override db fields)// WantedPages sql pager inexact for performance reasons://   assume 3 wantedfrom per page, to be correct, no getTotal()// support exclude argument for get_all_pages, new _sql_set()//// Revision 1.67  2004/11/10 19:32:24  rurban// * optimize increaseHitCount, esp. for mysql.// * prepend dirs to the include_path (phpwiki_dir for faster searches)// * Pear_DB version logic (awful but needed)// * fix broken ADODB quote// * _extract_page_data simplification//// Revision 1.66  2004/11/10 15:29:21  rurban// * requires newer Pear_DB (as the internal one): quote() uses now escapeSimple for strings// * ACCESS_LOG_SQL: fix cause request not yet initialized// * WikiDB: moved SQL specific methods upwards// * new Pear_DB quoting: same as ADODB and as newer Pear_DB.//   fixes all around: WikiGroup, WikiUserNew SQL methods, SQL logging//// Revision 1.65  2004/11/09 17:11:17  rurban// * revert to the wikidb ref passing. there's no memory abuse there.// * use new wikidb->_cache->_id_cache[] instead of wikidb->_iwpcache, to effectively//   store page ids with getPageLinks (GleanDescription) of all existing pages, which//   are also needed at the rendering for linkExistingWikiWord().//   pass options to pageiterator.//   use this cache also for _get_pageid()//   This saves about 8 SELECT count per page (num all pagelinks).// * fix passing of all page fields to the pageiterator.// * fix overlarge session data which got broken with the latest ACCESS_LOG_SQL changes//// Revision 1.64  2004/11/07 16:02:52  rurban// new sql access log (for spam prevention), and restructured access log class// dbh->quote (generic)// pear_db: mysql specific parts seperated (using replace)//// Revision 1.63  2004/11/01 10:43:58  rurban// seperate PassUser methods into seperate dir (memory usage)// fix WikiUser (old) overlarge data session// remove wikidb arg from various page class methods, use global ->_dbi instead// ...//// Revision 1.62  2004/10/14 19:19:34  rurban// loadsave: check if the dumped file will be accessible from outside.// and some other minor fixes. (cvsclient native not yet ready)//// Revision 1.61  2004/10/14 17:19:17  rurban// allow most_popular sortby arguments//// Revision 1.60  2004/07/09 10:06:50  rurban// Use backend specific sortby and sortable_columns method, to be able to// select between native (Db backend) and custom (PageList) sorting.// Fixed PageList::AddPageList (missed the first)// Added the author/creator.. name to AllPagesBy...//   display no pages if none matched.// Improved dba and file sortby().// Use &$request reference//// Revision 1.59  2004/07/08 21:32:36  rurban// Prevent from more warnings, minor db and sort optimizations//// Revision 1.58  2004/07/08 16:56:16  rurban// use the backendType abstraction//// Revision 1.57  2004/07/05 12:57:54  rurban// add mysql timeout//// Revision 1.56  2004/07/04 10:24:43  rurban// forgot the expressions//// Revision 1.55  2004/07/03 16:51:06  rurban// optional DBADMIN_USER:DBADMIN_PASSWD for action=upgrade (if no ALTER permission)// added atomic mysql REPLACE for PearDB as in ADODB// fixed _lock_tables typo links => link// fixes unserialize ADODB bug in line 180//// Revision 1.54  2004/06/29 08:52:24  rurban// Use ...version() $need_content argument in WikiDB also:// To reduce the memory footprint for larger sets of pagelists,// we don't cache the content (only true or false) and// we purge the pagedata (_cached_html) also.// _cached_html is only cached for the current pagename.// => Vastly improved page existance check, ACL check, ...//// Now only PagedList info=content or size needs the whole content, esp. if sortable.//// Revision 1.53  2004/06/27 10:26:03  rurban// oci8 patch by Philippe Vanhaesendonck + some ADODB notes+fixes//// Revision 1.52  2004/06/25 14:15:08  rurban// reduce memory footprint by caching only requested pagedate content (improving most page iterators)//// Revision 1.51  2004/05/12 10:49:55  rurban// require_once fix for those libs which are loaded before FileFinder and//   its automatic include_path fix, and where require_once doesn't grok//   dirname(__FILE__) != './lib'// upgrade fix with PearDB// navbar.tmpl: remove spaces for IE &nbsp; button alignment//// Revision 1.50  2004/05/06 17:30:39  rurban// CategoryGroup: oops, dos2unix eol// improved phpwiki_version://   pre -= .0001 (1.3.10pre: 1030.099)//   -p1 += .001 (1.3.9-p1: 1030.091)// improved InstallTable for mysql and generic SQL versions and all newer tables so far.// abstracted more ADODB/PearDB methods for action=upgrade stuff://   backend->backendType(), backend->database(),//   backend->listOfFields(),//   backend->listOfTables(),//// Revision 1.49  2004/05/03 21:35:30  rurban// don't use persistent connections with postgres//// Revision 1.48  2004/04/26 20:44:35  rurban// locking table specific for better databases//// Revision 1.47  2004/04/20 00:06:04  rurban// themable paging support//// Revision 1.46  2004/04/19 21:51:41  rurban// php5 compatibility: it works!//// Revision 1.45  2004/04/16 14:19:39  rurban// updated ADODB notes//// (c-file-style: "gnu")// Local Variables:// mode: php// tab-width: 8// c-basic-offset: 4// c-hanging-comment-ender-p: nil// indent-tabs-mode: nil// End:   ?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -