1 <!-- $Id: wiki_pgsql.php3,v 1.5 2000-06-20 01:25:16 wainstead Exp $ -->
9 RetrievePage($dbi, $pagename)
10 InsertPage($dbi, $pagename, $pagehash)
11 IsWikiPage($dbi, $pagename)
12 InitTitleSearch($dbi, $search)
13 TitleSearchNextMatch($dbi, &$pos)
14 InitFullSearch($dbi, $search)
15 FullSearchNextMatch($dbi, &$pos)
19 // open a database and return a hash
21 function OpenDataBase($table) {
22 global $WikiDataBase, $pg_dbhost, $pg_dbport;
24 $connectstring = "host=$pg_dbhost port=$pg_dbport dbname=$WikiDataBase";
26 if (!($dbc = pg_pconnect($connectstring))) {
27 echo "Cannot establish connection to database, giving up.";
32 $dbi['table'] = $table;
33 echo "<p>dbi after open: '$dbi' '$dbi[table]' '$dbi[dbc]'<p>\n";
38 function CloseDataBase($dbi) {
39 // NOOP: we use persistent database connections
43 // Return hash of page + attributes or default
44 function RetrievePage($dbi, $pagename) {
45 $pagename = addslashes($pagename);
46 $query = "select * from $dbi[table] where pagename='$pagename'";
48 $res = pg_exec($dbi['dbc'], $query);
50 if (pg_numrows($res)) {
51 if ($array = pg_fetch_array($res, 0)) {
52 while (list($key, $val) = each($array)) {
53 // pg_fetch_array gives us all the values twice,
54 // so we have to manually edit out the indices
55 if (gettype($key) == "integer") {
58 $pagehash[$key] = $val;
61 // don't forget to unserialize the references
62 if ($pagehash['refs']) {
63 $pagehash['refs'] = unserialize($pagehash['refs']);
69 // if we reach this the query failed
74 // Either insert or replace a key/value (a page)
75 function InsertPage($dbi, $pagename, $pagehash) {
76 $pagename = addslashes($pagename);
77 echo "<p>dbi in InsertPage: '$dbi' '$dbi[table]' '$dbi[dbc]'<p>";
80 if (IsWikiPage($dbi, $pagename)) {
82 list($key, $val) = each($pagehash);
83 $PAIRS = "$key='" . addslashes($val) . "'";
84 while (list($key, $val) = each($pagehash)) {
85 $PAIRS .= ",$key='" . addslashes($val) . "'";
88 $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
92 // build up the column names and values for the query
93 list($key, $val) = each($pagehash);
95 $VALUES = "'" . addslashes($val) . "'";
97 while (list($key, $val) = each($pagehash)) {
99 $VALUES .= ",'" . addslashes($val) . "'";
102 $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
105 echo "<p>Query: $query<p>\n";
107 // if (!mysql_query("replace into $dbi[table] (page, hash) values ('$pagename', '$pagedata')", $dbi['dbc'])) {
108 // echo "error writing value";
116 function IsWikiPage($dbi, $pagename) {
117 $pagename = addslashes($pagename);
118 $query = "select count(*) from $dbi[table] where pagename='$pagename'";
119 echo "<p>IsWikiPage query: $query<p>\n";
120 $res = pg_exec($query);
121 //return(pg_numrows($res));
122 $array = pg_fetch_array($res, 0);
127 // setup for title-search
128 function InitTitleSearch($dbi, $search) {
129 $search = addslashes($search);
130 $res = mysql_query("select page from $dbi[table] where page like '%$search%' order by page", $dbi["dbc"]);
136 // iterating through database
137 function TitleSearchNextMatch($dbi, $res) {
138 if($o = mysql_fetch_object($res)) {
147 // setup for full-text search
148 function InitFullSearch($dbi, $search) {
149 $search = addslashes($search);
150 $res = mysql_query("select page,hash from $dbi[table] where hash like '%$search%'", $dbi["dbc"]);
155 // iterating through database
156 function FullSearchNextMatch($dbi, $res) {
157 if($o = mysql_fetch_object($res)) {
158 $page['name'] = $o->page;
159 $page['hash'] = unserialize($o->hash);