adding index manager, still probably not functional

This commit is contained in:
real_nowhereman 2008-09-06 13:46:03 +00:00
parent dea2a2fa87
commit b3e97edd66
4 changed files with 127 additions and 6 deletions

View File

@ -81,6 +81,8 @@
define('CACHE_DIR', FP_CONTENT . 'cache/');
define('CACHE_FILE', '%%cached_list.php');
define('INDEX_DIR', FP_CONTENT.'index/');
define('LOCKFILE', FP_CONTENT . '%%setup.lock');

View File

@ -23,7 +23,7 @@
$this->_tree = caching_SBPT(
fopen($this->_cachefile.'.dat', 'r'),
fopen($this->_cachefile.'.strings.dat', 'r'),
fopen(INDEX_DIR.'index.strings.dat', 'r'),
$this->_offset,
$this->_chunksize,
$this->_keysize

View File

@ -1,15 +1,98 @@
<?php
class entry_indexer extends cache_filelister {
class entry_cached_index extends cache_filelister {
/**
* opens the index belonging to a given category
* @params int $id_cat
*/
function entry_indexer($id_cat=0) {
$this->_cachefile = 'index-'.$id_cat;
$this->_cachefile = INDEX_DIR.'index-'.$id_cat;
parent::cache_filelister();
}
}
class entry_index {
var $indices = array();
var $_offset = 0;
var $_chunksize = 30;
var $_keysize = 12;
function entry_index() {
// only main index s a SBPlus (string BPlus):
// the other (other categories) are managed
// as if they were simple BPlus trees, so
// values in key,value pairs won't
// be strings but integers
//
// the integer will be the seek position
// in the SBPlus' string file
//
// they'll be loaded back with the string file
// as SBPlus trees: the string-key, string-value pair
// will be returned
$this->indices[0] = new SBPlusTree(
fopen(INDEX_DIR.'index-0.dat', 'r+'),
fopen(INDEX_DIR.'index.strings.dat', 'r+'),
$this->_offset,
$this->_chunksize,
$this->_keysize
);
}
function &get_index($cat=0) {
if (!isset($this->indices[$cat])) {
$this->indices[$cat] =& new BPlusTree(
fopen(INDEX_DIR.'index-'.$cat.'.dat', 'r+'),
$this->_offset,
$this->_chunksize,
$this->_keysize
);
$this->indices[$cat]->open();
}
return $this->indices[$cat];
}
function add($entry) {
$key =& entry_timetokey($entry['date']);
$val = $entry['subject'];
$main =& $this->get_index();
$seek = $main->setitem($key, $val);
if (isset($entry['categories']) && is_array($entry['categories']) {
foreach ($entry['categories'] as $cat) {
if (!is_numeric($cat) continue;
$this_index =& $this->get_index($cat);
$this_index->setitem($key, $seek);
}
}
}
function delete($id) {
$key = entry_idtokey($id);
$main =& $this->get_index();
$main->delitem($key);
if (isset($entry['categories']) && is_array($entry['categories']) {
foreach ($entry['categories'] as $cat) {
if (!is_numeric($cat) continue;
$this_index =& $this->get_index($cat);
$this_index->delitem($key);
}
}
}
}
class _entry_indexer extends cache_filelister {
@ -216,7 +299,21 @@
function entry_get() {
$fpdb->get();
}
*/
*/
function entry_keytoid($key) {
$date = substr($key,0,6);
$time = substr($key,6);
return "entry{$date}-{$time}";
}
function entry_idtokey($id) {
return substr($id, 5, 6) . substr($id, 11);
}
function entry_timetokey($time) {
return date('ymdHis', $time);
}
function entry_list() {

View File

@ -322,7 +322,7 @@
while ($this->walker->valid && $this->pointer<$qp->start) {
$this->previd = $this->currentid;
$id = $this->currentid = $this->walker->current_key();
$id = $this->currentid = entry_keytoid($this->walker->current_key());
$this->walker->next();
$this->pointer++;
@ -542,7 +542,7 @@
function &get_index($cat_id = 0) {
if (!isset($this->_indexer[$cat_id])) {
$this->_indexer[$cat_id] =& new entry_indexer($cat_id);
$this->_indexer[$cat_id] =& new entry_cached_index($cat_id);
}
return $this->_indexer[$cat_id];
}
@ -644,6 +644,28 @@
}
class FPDB_transaction {
var $_index = null;
var $_offset = 0;
var $_nodesize = 30;
var $_keysize = 12;
function FPDB_transaction($id_cat=0) {
$this->_index = INDEX_DIR.'index-'.$id_cat;
$this->_tree = caching_SBPT(
fopen($this->_cachefile.'.dat', 'r'),
fopen($this->_cachefile.'.strings.dat', 'r'),
$this->_offset,
$this->_chunksize,
$this->_keysize
);
}
}
// SMARTY FUNCTIONS ----------------------------------------------------