/*
Database functions:
MakePageHash($dbhash)
MakeDBHash($pagename, $pagehash)
OpenDataBase($dbname)
CloseDataBase($dbi)
RetrievePage($dbi, $pagename)
InsertPage($dbi, $pagename, $pagehash)
IsWikiPage($dbi, $pagename)
InitTitleSearch($dbi, $search)
TitleSearchNextMatch($dbi, &$pos)
InitFullSearch($dbi, $search)
FullSearchNextMatch($dbi, &$pos)
*/
// open a database and return the handle
// ignores MAX_DBM_ATTEMPTS
function OpenDataBase($dbname) {
global $msql_db;
if (! ($dbc = msql_pconnect())) {
echo "Cannot establish connection to database, giving up.";
echo "Error message: ", msql_error(), "
\n";
exit();
}
if (!msql_select_db($msql_db, $dbc)) {
echo "Cannot open database, giving up.";
echo "Error message: ", msql_error(), "
\n";
exit();
}
$dbi['dbc'] = $dbc;
$dbi['table'] = $dbname;
return $dbi;
}
function CloseDataBase($dbi) {
// NOP function
// msql connections are established as persistant
// they cannot be closed through msql_close()
}
function MakeDBHash($pagename, $pagehash)
{
$pagehash["pagename"] = addslashes($pagename);
if (!isset($pagehash["flags"]))
$pagehash["flags"] = 0;
// build a list of unique words for this page
$list = $pagehash["content"];
// strip nonalphanumeric characters
reset($list);
$list = preg_replace("/\W/", " ", $list);
reset($list);
while($line = next($list)) {
//echo "
doing: $line
\n";
$words = preg_split("/\s+/", $line);
reset($words);
while ($word = next($words)) {
//echo "$word ";
$terms[strtolower($word)]++;
}
}
//echo "
Query: $query
\n";
$retval = msql_query($query, $dbi['dbc']);
if ($retval == false)
echo "Insert/update failed: " . msql_error();
}
function IsWikiPage($dbi, $pagename) {
$pagename = addslashes($pagename);
$query = "select pagename from $dbi[table] where pagename='$pagename'";
// echo "Query: $query
\n";
if ($res = msql_query($query, $dbi['dbc'])) {
return(msql_affected_rows($res));
}
}
// setup for title-search
function InitTitleSearch($dbi, $search) {
$search = addslashes($search);
$query = "select pagename from $dbi[table] " .
"where pagename clike '%$search%' order by pagename";
$res = msql_query($query, $dbi["dbc"]);
return $res;
}
// iterating through database
function TitleSearchNextMatch($dbi, $res) {
if($o = msql_fetch_object($res)) {
return $o->pagename;
}
else {
return 0;
}
}
// setup for full-text search
function InitFullSearch($dbi, $search) {
$search = addslashes($search);
$query = "select * from $dbi[table] where searchterms clike '%$search%'";
$res = msql_query($query, $dbi["dbc"]);
return $res;
}
// iterating through database
function FullSearchNextMatch($dbi, $res) {
if($hash = msql_fetch_array($res)) {
return MakePageHash($hash);
}
else {
return 0;
}
}
?>