adding index manager, still probably not functional
This commit is contained in:
parent
dea2a2fa87
commit
b3e97edd66
@ -80,6 +80,8 @@
|
|||||||
// cache file name and path.
|
// cache file name and path.
|
||||||
define('CACHE_DIR', FP_CONTENT . 'cache/');
|
define('CACHE_DIR', FP_CONTENT . 'cache/');
|
||||||
define('CACHE_FILE', '%%cached_list.php');
|
define('CACHE_FILE', '%%cached_list.php');
|
||||||
|
|
||||||
|
define('INDEX_DIR', FP_CONTENT.'index/');
|
||||||
|
|
||||||
define('LOCKFILE', FP_CONTENT . '%%setup.lock');
|
define('LOCKFILE', FP_CONTENT . '%%setup.lock');
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
$this->_tree = caching_SBPT(
|
$this->_tree = caching_SBPT(
|
||||||
fopen($this->_cachefile.'.dat', 'r'),
|
fopen($this->_cachefile.'.dat', 'r'),
|
||||||
fopen($this->_cachefile.'.strings.dat', 'r'),
|
fopen(INDEX_DIR.'index.strings.dat', 'r'),
|
||||||
$this->_offset,
|
$this->_offset,
|
||||||
$this->_chunksize,
|
$this->_chunksize,
|
||||||
$this->_keysize
|
$this->_keysize
|
||||||
|
@ -1,15 +1,98 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
class entry_indexer extends cache_filelister {
|
class entry_cached_index extends cache_filelister {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* opens the index belonging to a given category
|
* opens the index belonging to a given category
|
||||||
* @params int $id_cat
|
* @params int $id_cat
|
||||||
*/
|
*/
|
||||||
function entry_indexer($id_cat=0) {
|
function entry_indexer($id_cat=0) {
|
||||||
$this->_cachefile = 'index-'.$id_cat;
|
$this->_cachefile = INDEX_DIR.'index-'.$id_cat;
|
||||||
parent::cache_filelister();
|
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 {
|
class _entry_indexer extends cache_filelister {
|
||||||
@ -216,7 +299,21 @@
|
|||||||
function entry_get() {
|
function entry_get() {
|
||||||
$fpdb->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() {
|
function entry_list() {
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@
|
|||||||
while ($this->walker->valid && $this->pointer<$qp->start) {
|
while ($this->walker->valid && $this->pointer<$qp->start) {
|
||||||
|
|
||||||
$this->previd = $this->currentid;
|
$this->previd = $this->currentid;
|
||||||
$id = $this->currentid = $this->walker->current_key();
|
$id = $this->currentid = entry_keytoid($this->walker->current_key());
|
||||||
|
|
||||||
$this->walker->next();
|
$this->walker->next();
|
||||||
$this->pointer++;
|
$this->pointer++;
|
||||||
@ -542,7 +542,7 @@
|
|||||||
|
|
||||||
function &get_index($cat_id = 0) {
|
function &get_index($cat_id = 0) {
|
||||||
if (!isset($this->_indexer[$cat_id])) {
|
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];
|
return $this->_indexer[$cat_id];
|
||||||
}
|
}
|
||||||
@ -643,6 +643,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 ----------------------------------------------------
|
// SMARTY FUNCTIONS ----------------------------------------------------
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user