📄 peardb.php
字号:
/* 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 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 + -