From 7c22f55e18de22f4c3c8557ae7e9939d34c0662a Mon Sep 17 00:00:00 2001 From: rurban Date: Fri, 10 Dec 2004 22:15:00 +0000 Subject: [PATCH] fix $page->get('_cached_html) refactor upgrade db helper _convert_cached_html() to be able to call them from WikiAdminUtils also. support 2nd genericSqlQuery param (bind huge arg) git-svn-id: svn://svn.code.sf.net/p/phpwiki/code/trunk@4262 96ab9672-09ca-45d6-a79d-3d69d39ca109 --- lib/WikiDB.php | 12 +++- lib/WikiDB/ADODB.php | 10 +++- lib/WikiDB/SQL.php | 9 ++- lib/WikiDB/backend/ADODB.php | 10 +++- lib/upgrade.php | 109 +++++++++++++++++++++++------------ 5 files changed, 101 insertions(+), 49 deletions(-) diff --git a/lib/WikiDB.php b/lib/WikiDB.php index 37a776e8a..11fcb5c51 100644 --- a/lib/WikiDB.php +++ b/lib/WikiDB.php @@ -1,5 +1,5 @@ = 4.3.0 echo "
", printSimpleTrace(debug_backtrace()), "
\n"; } @@ -1255,7 +1255,7 @@ class WikiDB_Page return false; // several new SQL backends optimize this. if ($key == '_cached_html' and method_exists($backend, 'get_cached_html')) { - return $backend->get_cached_html($pagename); + return $backend->get_cached_html($this->_pagename); } $data = $cache->get_pagedata($this->_pagename); return isset($data[$key]) ? $data[$key] : false; @@ -2141,6 +2141,12 @@ function _sql_debuglog_shutdown_function() { } // $Log: not supported by cvs2svn $ +// Revision 1.115 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.114 2004/12/09 22:24:44 rurban // optimize on _DEBUG_SQL only. but now again on every 50th request, not just save. // diff --git a/lib/WikiDB/ADODB.php b/lib/WikiDB/ADODB.php index 4339976ce..3b60a6158 100644 --- a/lib/WikiDB/ADODB.php +++ b/lib/WikiDB/ADODB.php @@ -1,5 +1,5 @@ _backend->_dbh->Execute($sql))) { + function genericSqlQuery($sql, $args=false) { + if ($args) + $result = $this->_backend->_dbh->Execute($sql, $args); + else + $result = $this->_backend->_dbh->Execute($sql); + if (!$result) { trigger_error("SQL Error: ".$this->_backend->_dbh->ErrorMsg(), E_USER_WARNING); return false; } else { diff --git a/lib/WikiDB/SQL.php b/lib/WikiDB/SQL.php index e703ee75b..c6a389586 100644 --- a/lib/WikiDB/SQL.php +++ b/lib/WikiDB/SQL.php @@ -1,4 +1,4 @@ -_backend->_dbh->query($sql); + function genericSqlQuery($sql, $args=false) { + if ($args) + $result = $this->_backend->_dbh->query($sql, $args); + else + $result = $this->_backend->_dbh->query($sql); if (DB::isError($result)) { $msg = $result->getMessage(); trigger_error("SQL Error: ".DB::errorMessage($result), E_USER_WARNING); diff --git a/lib/WikiDB/backend/ADODB.php b/lib/WikiDB/backend/ADODB.php index 6a9c2eff6..e51c592c6 100644 --- a/lib/WikiDB/backend/ADODB.php +++ b/lib/WikiDB/backend/ADODB.php @@ -1,5 +1,5 @@ qstr($pagename))); return; } - $where = sprintf("pagename=%s",$dbh->qstr($pagename)); + $where = sprintf("pagename=%s", $dbh->qstr($pagename)); $dbh->BeginTrans( ); $dbh->RowLock($page_tbl,$where); @@ -1385,6 +1385,12 @@ extends WikiDB_backend_search } // $Log: not supported by cvs2svn $ +// Revision 1.64 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.63 2004/12/08 12:55:51 rurban // support new non-destructive delete_page via generic backend method // diff --git a/lib/upgrade.php b/lib/upgrade.php index 017a9e96c..cafee915e 100644 --- a/lib/upgrade.php +++ b/lib/upgrade.php @@ -1,5 +1,5 @@ ",_("check for necessary database updates"),"\n"; - if (defined('DBADMIN_USER') and DBADMIN_USER) { - // if need to connect as the root user, for alter permissions - $AdminParams = $DBParams; - if ($DBParams['dbtype'] == 'SQL') - $dsn = DB::parseDSN($AdminParams['dsn']); - else - $dsn = parseDSN($AdminParams['dsn']); - $AdminParams['dsn'] = sprintf("%s://%s:%s@%s/%s", - $dsn['phptype'], - DBADMIN_USER, - DBADMIN_PASSWD, - $dsn['hostspec'], - $dsn['database']); - $dbh = WikiDB::open($AdminParams); - } else { - $dbh = &$request->_dbi; - } + + _upgrade_db_init($dbh); $tables = $dbh->_backend->listOfTables(); $backend_type = $dbh->_backend->backendType(); @@ -461,9 +446,43 @@ function CheckDatabaseUpdate(&$request) { } } - // 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 extracetd for every simple page iteration. + _upgrade_cached_html($dbh); + + return; +} + +function _upgrade_db_init (&$dbh) { + global $DBParams, $DBAuthParams; + if (!in_array($DBParams['dbtype'], array('SQL','ADODB'))) return; + if (defined('DBADMIN_USER') and DBADMIN_USER) { + // if need to connect as the root user, for alter permissions + $AdminParams = $DBParams; + if ($DBParams['dbtype'] == 'SQL') + $dsn = DB::parseDSN($AdminParams['dsn']); + else + $dsn = parseDSN($AdminParams['dsn']); + $AdminParams['dsn'] = sprintf("%s://%s:%s@%s/%s", + $dsn['phptype'], + DBADMIN_USER, + DBADMIN_PASSWD, + $dsn['hostspec'], + $dsn['database']); + $dbh = WikiDB::open($AdminParams); + } else { + $dbh = &$request->_dbi; + } +} + +/** + * if page.cached_html does not exists: + * 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 extracetd for every simple page iteration. + */ +function _upgrade_cached_html (&$dbh) { + global $DBParams; + if (!in_array($DBParams['dbtype'], array('SQL','ADODB'))) return; if (phpwiki_version() >= 1030.10) { echo _("check for extra page.cached_html column")," ... "; $database = $dbh->_backend->database(); @@ -475,29 +494,37 @@ function CheckDatabaseUpdate(&$request) { $dbh->genericSqlQuery("ALTER TABLE $page_tbl ADD cached_html MEDIUMBLOB"); else $dbh->genericSqlQuery("ALTER TABLE $page_tbl ADD cached_html BLOB"); - $pages = $dbh->getAllPages(); - $cache =& $dbh->_cache; echo "",_("CONVERTING"),""," ... "; - while ($page = $pages->next()) { - $pagename = $page->getName(); - $data = $dbh->_backend->get_pagedata($pagename); - if (!empty($data['_cached_html'])) { - $cached_html = $data['_cached_html']; - $data['_cached_html'] = ''; - $cache->update_pagedata($pagename, $data); - //$dbh->_backend->update_cachedhtml($pagename, $cached_html); - // store as blob, not serialized - $dbh->genericSqlQuery(sprintf("UPDATE $page_tbl SET cached_html=%s WHERE pagename=%s", - $dbh->quote($cached_html), - $dbh->quote($pagename))); - } - } + _convert_cached_html($dbh); echo _("OK"), "
\n"; } else { echo _("OK"), "
\n"; } } - return; +} + +/** + * move _cached_html for all pages from pagedata into a new seperate blob. + * decoupled from action=upgrade, so that it can be used by a WikiAdminUtils button also. + */ +function _convert_cached_html (&$dbh) { + global $DBParams; + if (!in_array($DBParams['dbtype'], array('SQL','ADODB'))) return; + + $pages = $dbh->getAllPages(); + $cache =& $dbh->_cache; + while ($page = $pages->next()) { + $pagename = $page->getName(); + $data = $dbh->_backend->get_pagedata($pagename); + if (!empty($data['_cached_html'])) { + $cached_html = $data['_cached_html']; + $data['_cached_html'] = ''; + $cache->update_pagedata($pagename, $data); + // store as blob, not serialized + $dbh->genericSqlQuery("UPDATE $page_tbl SET cached_html=? WHERE pagename=?", + array($cached_html, $pagename)); + } + } } function fixConfigIni($match, $new) { @@ -603,6 +630,12 @@ function DoUpgrade($request) { /** $Log: not supported by cvs2svn $ + Revision 1.31 2004/12/10 02:45:26 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.30 2004/11/29 17:58:57 rurban just aesthetics -- 2.45.2