From: Joel U. <uck...@us...> - 2001-07-18 04:59:50
|
Update of /cvsroot/phpwiki/phpwiki/lib In directory usw-pr-cvs1:/tmp/cvs-serv27676/lib Modified Files: pgsql.php Log Message: Changed PostgreSQL db library and schema to work with versioning, maybe. Index: pgsql.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/pgsql.php,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** pgsql.php 2001/07/15 16:03:26 1.7 --- pgsql.php 2001/07/18 04:59:47 1.8 *************** *** 7,15 **** OpenDataBase($table) CloseDataBase($dbi) ! RetrievePage($dbi, $pagename, $pagestore) ! InsertPage($dbi, $pagename, $pagehash) ! SaveCopyToArchive($dbi, $pagename, $pagehash) IsWikiPage($dbi, $pagename) IsInArchive($dbi, $pagename) InitTitleSearch($dbi, $search) TitleSearchNextMatch($dbi, $res) --- 7,20 ---- OpenDataBase($table) CloseDataBase($dbi) ! RetrievePage($dbi, $pagename, $pagestore, $version) ! RetrievePageVersions($dbi, $pagename, $curstore, $archstore) ! GetMaxVersionNumber($dbi, $pagename, $pagestore) ! InsertPage($dbi, $pagename, $pagehash, $clobber) ! SelectStore($dbi, $pagename, $version, $curstore, $archstore) ! IsVersionInWiki($dbi, $pagename, $version) ! IsVersionInArchive($dbi, $pagename, $version) IsWikiPage($dbi, $pagename) IsInArchive($dbi, $pagename) + RemovePage($dbi, $pagename) InitTitleSearch($dbi, $search) TitleSearchNextMatch($dbi, $res) *************** *** 65,71 **** // Return hash of page + attributes or default ! function RetrievePage($dbi, $pagename, $pagestore) { $pagename = addslashes($pagename); ! $query = "select * from $pagestore where pagename='$pagename'"; // echo "<p>$query<p>"; $res = pg_exec($dbi['dbc'], $query); --- 70,77 ---- // Return hash of page + attributes or default ! function RetrievePage($dbi, $pagename, $pagestore, $version) { $pagename = addslashes($pagename); ! $version = $version ? " and version=$version" : ''; ! $query = "select * from $pagestore where pagename='$pagename'$version"; // echo "<p>$query<p>"; $res = pg_exec($dbi['dbc'], $query); *************** *** 95,100 **** // Either insert or replace a key/value (a page) ! function InsertPage($dbi, $pagename, $pagehash) { $pagename = addslashes($pagename); --- 101,145 ---- + // Return all versions of a page as an array of page hashes + function RetrievePageVersions($dbi, $pagename, $curstore, $archstore) { + $pagename = addslashes($pagename); + if (($page[0] = RetrievePage($dbi, $pagename, $curstore, 0)) != -1) { + $res = pg_exec($dbi['dbc'], "select * from $archstore where pagename='$pagename' order by version desc"); + if (pg_numrows($res)) { + while ($array = pg_fetch_array($res, 0)) { + while (list($key, $val) = each($array)) { + if (gettype($key) == "integer") { + continue; + } + $dbhash[$key] = $val; + } + + $dbhash['refs'] = unserialize($dbhash['refs']); + $dbhash['content'] = explode("\n", $dbhash['content']); + + array_push($page, $dbhash); + } + + return $page; + } + } + + // if we reach this the query failed + return -1; + } + + + // Get maximum version number of a page in pagestore + function GetMaxVersionNumber($dbi, $pagename, $pagestore) { + $pagename = addslashes($pagename); + if ($res = pg_exec($dbi['dbc'], "select max(version) from $pagestore where pagename='$pagename'")) { + return pg_result($res, 0, "version"); + } + return -1; + } + + // Either insert or replace a key/value (a page) ! function InsertPage($dbi, $pagename, $pagehash, $clobber) { $pagename = addslashes($pagename); *************** *** 123,240 **** // record the time of modification $pagehash["lastmodified"] = time(); - ! if (IsWikiPage($dbi, $pagename)) { ! $PAIRS = "author='$pagehash[author]'," . ! "content='$pagehash[content]'," . ! "created=$pagehash[created]," . ! "flags=$pagehash[flags]," . ! "lastmodified=$pagehash[lastmodified]," . ! "pagename='$pagehash[pagename]'," . ! "refs='$pagehash[refs]'," . ! "version=$pagehash[version]"; ! $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'"; ! ! } else { ! // do an insert ! // build up the column names and values for the query ! ! $COLUMNS = "author, content, created, flags, " . ! "lastmodified, pagename, refs, version"; ! $VALUES = "'$pagehash[author]', '$pagehash[content]', " . ! "$pagehash[created], $pagehash[flags], " . ! "$pagehash[lastmodified], '$pagehash[pagename]', " . ! "'$pagehash[refs]', $pagehash[version]"; ! $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)"; } - // echo "<p>Query: $query<p>\n"; - $retval = pg_exec($dbi['dbc'], $query); - if ($retval == false) - echo "Insert/update failed: " . pg_errormessage($dbi['dbc']); } ! function SaveCopyToArchive($dbi, $pagename, $pagehash) { global $ArchivePageStore; - // echo "<p>save copy called<p>"; $pagename = addslashes($pagename); ! // echo "<p>dbi in SaveCopyToArchive: '$dbi' '$ArchivePageStore' '$dbi[dbc]'<p>"; ! ! // prepare the content for storage ! if (!isset($pagehash["pagename"])) ! $pagehash["pagename"] = $pagename; ! if (!isset($pagehash["flags"])) ! $pagehash["flags"] = 0; ! $pagehash["author"] = addslashes($pagehash["author"]); ! $pagehash["content"] = implode("\n", $pagehash["content"]); ! $pagehash["content"] = addslashes($pagehash["content"]); ! $pagehash["pagename"] = addslashes($pagehash["pagename"]); ! $pagehash["refs"] = serialize($pagehash["refs"]); ! ! if (IsInArchive($dbi, $pagename)) { ! ! $PAIRS = "author='$pagehash[author]'," . ! "content='$pagehash[content]'," . ! "created=$pagehash[created]," . ! "flags=$pagehash[flags]," . ! "lastmodified=$pagehash[lastmodified]," . ! "pagename='$pagehash[pagename]'," . ! "refs='$pagehash[refs]'," . ! "version=$pagehash[version]"; ! ! $query = "UPDATE $ArchivePageStore SET $PAIRS WHERE pagename='$pagename'"; - } else { - // do an insert - // build up the column names and values for the query ! $COLUMNS = "author, content, created, flags, " . ! "lastmodified, pagename, refs, version"; - $VALUES = "'$pagehash[author]', '$pagehash[content]', " . - "$pagehash[created], $pagehash[flags], " . - "$pagehash[lastmodified], '$pagehash[pagename]', " . - "'$pagehash[refs]', $pagehash[version]"; ! $query = "INSERT INTO $ArchivePageStore ($COLUMNS) VALUES($VALUES)"; } - // echo "<p>Query: $query<p>\n"; - $retval = pg_exec($dbi['dbc'], $query); - if ($retval == false) - echo "Insert/update failed: " . pg_errormessage($dbi['dbc']); ! } ! function IsWikiPage($dbi, $pagename) { ! global $WikiPageStore; ! $pagename = addslashes($pagename); ! $query = "select count(*) from $WikiPageStore " . ! "where pagename='$pagename'"; ! $res = pg_exec($query); ! $array = pg_fetch_array($res, 0); ! return $array[0]; ! } ! function IsInArchive($dbi, $pagename) { ! global $ArchivePageStore; ! $pagename = addslashes($pagename); ! $query = "select count(*) from $ArchivePageStore " . ! "where pagename='$pagename'"; ! $res = pg_exec($query); ! $array = pg_fetch_array($res, 0); ! return $array[0]; } --- 168,275 ---- // record the time of modification $pagehash["lastmodified"] = time(); ! // Clobber existing page? ! $clobber = $clobber ? 'replace' : 'insert'; ! $COLUMNS = "author, content, created, flags, " . ! "lastmodified, pagename, refs, version"; ! $VALUES = "'$pagehash[author]', '$pagehash[content]', " . ! "$pagehash[created], $pagehash[flags], " . ! "$pagehash[lastmodified], '$pagehash[pagename]', " . ! "'$pagehash[refs]', $pagehash[version]"; ! ! if (!pg_exec($dbi['dbc'], "$clobber into $dbi[table] ($COLUMNS) values ($VALUES)")) { ! $msg = htmlspecialchars(sprintf(gettext("Error writing page '%s'"), $pagename)); ! $msg .= "<BR>"; ! $msg .= htmlspecialchars(sprintf(gettext("PostgreSQL error: %s"), pg_errormessage($dbi['dbc']))); ! ExitWiki($msg); ! } ! } ! ! // Adds a page to the archive pagestore ! function SavePageToArchive($pagename, $pagehash) { ! global $ArchivePageStore; ! $dbi = OpenDataBase($ArchivePageStore); ! InsertPage($dbi, $pagename, $pagehash, false); ! } ! // Returns store where version of page resides ! function SelectStore($dbi, $pagename, $version, $curstore, $archstore) { ! if ($version) { ! if (IsVersionInWiki($dbi, $pagename, $version)) return $curstore; ! elseif (IsVersionInArchive($dbi, $pagename, $version)) return $archstore; ! else return -1; } + elseif (IsWikiPage($dbi, $pagename)) return $curstore; + else return -1; + } + function IsVersionInWiki($dbi, $pagename, $version) { + $pagename = addslashes($pagename); + if ($res = pg_exec($dbi['dbc'], "select count(*) from $dbi[table] where pagename='$pagename' and version='$version'")) { + return pg_result($res, 0, "count"); + } + return 0; } ! function IsVersionInArchive($dbi, $pagename, $version) { global $ArchivePageStore; $pagename = addslashes($pagename); ! if ($res = pg_exec($dbi['dbc'], "select count(*) from $ArchivePageStore where pagename='$pagename' and version='$version'")) { ! return pg_result($res, 0, "count"); ! } ! return 0; ! } ! function IsWikiPage($dbi, $pagename) { ! $pagename = addslashes($pagename); ! if ($res = pg_exec($dbi['dbc'], "select count(*) from $dbi[table] where pagename='$pagename'")) { ! return pg_result($res, 0, "count"); ! } ! return 0; ! } + function IsInArchive($dbi, $pagename) { + global $ArchivePageStore; ! $pagename = addslashes($pagename); ! if ($res = pg_exec($dbi['dbc'], "select count(*) from $ArchivePageStore where pagename='$pagename'")) { ! return pg_result($res, 0, "count"); } + return 0; + } + function RemovePage($dbi, $pagename) { + global $WikiPageStore, $ArchivePageStore; + global $WikiLinksStore, $HitCountStore, $WikiScoreStore; ! $pagename = addslashes($pagename); ! $msg = gettext ("Cannot delete '%s' from table '%s'"); ! $msg .= "<br>\n"; ! $msg .= gettext ("PostgreSQL error: %s"); + if (!pg_exec($dbi['dbc'], "delete from $WikiPageStore where pagename='$pagename'")) + ExitWiki(sprintf($msg, $pagename, $WikiPageStore, pg_errormessage())); ! if (!pg_exec($dbi['dbc'], "delete from $ArchivePageStore where pagename='$pagename'")) ! ExitWiki(sprintf($msg, $pagename, $ArchivePageStore, pg_errormessage())); + if (!pg_exec($dbi['dbc'], "delete from $WikiLinksStore where frompage='$pagename'")) + ExitWiki(sprintf($msg, $pagename, $WikiLinksStore, pg_errormessage())); ! if (!pg_exec($dbi['dbc'], "delete from $HitCountStore where pagename='$pagename'")) ! ExitWiki(sprintf($msg, $pagename, $HitCountStore, pg_errormessage())); ! ! if (!pg_exec($dbi['dbc'], "delete from $WikiScoreStore where pagename='$pagename'")) ! ExitWiki(sprintf($msg, $pagename, $WikiScoreStore, mysql_error())); } |