A patch to lib/WikiDB.php follows. This is part 2 of my previous set of fixes
to the caching logic.
While debugging why caching was not working for me, I found that
get_versiondata() was behaving weirdly when the parameter
$need_content was false. It appears that php 4.3.10 on windows gets confused
when an array element is created with an index of '0'.
This patch changes the array index to use '2' and '1' instead of '1' and '0'.
Note that this patch also contains the previous patch
in the series - I do not know enough about CVS and Eclipse to get just the
incremental changes from my previous patch.
Regards,
Charles
Index: WikiDB.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB.php,v
retrieving revision 1.124
diff -u -r1.124 WikiDB.php
--- WikiDB.php 29 Jan 2005 20:43:32 -0000 1.124
+++ WikiDB.php 31 Jan 2005 14:56:33 -0000
@@ -2045,28 +2045,31 @@
}
function get_versiondata($pagename, $version, $need_content = false) {
+ $lastestpagedata = false;
// FIXME: Seriously ugly hackage
- if (USECACHE) { //temporary - for debugging
+ if (USECACHE) { //temporary - for debugging
assert(is_string($pagename) && $pagename != '');
// there is a bug here somewhere which results in an assertion
failure at line 105
// of ArchiveCleaner.php It goes away if we use the next line.
//$need_content = true;
- $nc = $need_content ? '1':'0';
+ $nc = $need_content ? '2':'1';
$cache = &$this->_versiondata_cache;
if (!isset($cache[$pagename][$version][$nc])||
!(is_array ($cache[$pagename])) || !(is_array
($cache[$pagename][$version]))) {
$cache[$pagename][$version][$nc] =
$this->_backend->get_versiondata($pagename, $version,
$need_content);
+ $lastestpagedata = true;
// If we have retrieved all data, we may as well set the cache
for $need_content = false
if ($need_content){
- $cache[$pagename][$version]['0'] =&
$cache[$pagename][$version]['1'];
+ $cache[$pagename][$version]['1'] =&
+ $cache[$pagename][$version]['2'];
}
}
$vdata = $cache[$pagename][$version][$nc];
- } else {
+ } else {
$vdata = $this->_backend->get_versiondata($pagename, $version,
$need_content);
- }
- if ($vdata && !empty($vdata['%pagedata'])) {
+ $lastestpagedata = true;
+ }
+ if ($lastestpagedata && $vdata && !empty($vdata['%pagedata']))
+{
$this->_pagedata_cache[$pagename] =& $vdata['%pagedata'];
}
return $vdata;
@@ -2077,8 +2080,8 @@
$new = $this->_backend->set_versiondata($pagename, $version, $data);
// Update the cache
+ $this->_versiondata_cache[$pagename][$version]['2'] = $data;
$this->_versiondata_cache[$pagename][$version]['1'] = $data;
- $this->_versiondata_cache[$pagename][$version]['0'] = $data;
// Is this necessary?
unset($this->_glv_cache[$pagename]);
}
@@ -2086,19 +2089,19 @@
function update_versiondata($pagename, $version, $data) {
$new = $this->_backend->update_versiondata($pagename, $version, $data);
// Update the cache
- $this->_versiondata_cache[$pagename][$version]['1'] = $data;
+ $this->_versiondata_cache[$pagename][$version]['2'] = $data;
// FIXME: hack
- $this->_versiondata_cache[$pagename][$version]['0'] = $data;
+ $this->_versiondata_cache[$pagename][$version]['1'] = $data;
// Is this necessary?
unset($this->_glv_cache[$pagename]);
}
function delete_versiondata($pagename, $version) {
$new = $this->_backend->delete_versiondata($pagename, $version);
+ if (isset($this->_versiondata_cache[$pagename][$version]['2']))
+ unset
+ ($this->_versiondata_cache[$pagename][$version]['2']);
if (isset($this->_versiondata_cache[$pagename][$version]['1']))
unset ($this->_versiondata_cache[$pagename][$version]['1']);
- if (isset($this->_versiondata_cache[$pagename][$version]['0']))
- unset ($this->_versiondata_cache[$pagename][$version]['0']);
if (isset($this->_glv_cache[$pagename]))
unset ($this->_glv_cache[$pagename]);
}
WikiDB.php.patch
Description: Binary data
|