]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - wiki_pgsql.php3
Table 'archive' is now identical to table 'wiki' and I added all the
[SourceForge/phpwiki.git] / wiki_pgsql.php3
1 <!-- $Id: wiki_pgsql.php3,v 1.5 2000-06-20 01:25:16 wainstead Exp $ -->
2 <?
3
4    /*
5       Database functions:
6
7       OpenDataBase($dbname)
8       CloseDataBase($dbi)
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)
16    */
17
18
19    // open a database and return a hash
20
21    function OpenDataBase($table) {
22       global $WikiDataBase, $pg_dbhost, $pg_dbport;
23
24       $connectstring = "host=$pg_dbhost port=$pg_dbport dbname=$WikiDataBase";
25
26       if (!($dbc = pg_pconnect($connectstring))) {
27          echo "Cannot establish connection to database, giving up.";
28          exit();
29       }
30
31       $dbi['dbc'] = $dbc;
32       $dbi['table'] = $table;
33       echo "<p>dbi after open: '$dbi' '$dbi[table]' '$dbi[dbc]'<p>\n";
34       return $dbi;
35    }
36
37
38    function CloseDataBase($dbi) {
39       // NOOP: we use persistent database connections
40    }
41
42
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'";
47
48       $res = pg_exec($dbi['dbc'], $query);
49
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") {
56                   continue;
57                }
58                $pagehash[$key] = $val;
59             }
60
61             // don't forget to unserialize the references
62             if ($pagehash['refs']) {
63                $pagehash['refs'] = unserialize($pagehash['refs']);
64             }
65             return $pagehash;
66          }
67       }
68
69       // if we reach this the query failed
70       return -1;
71    }
72
73
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>";
78       reset($pagehash);
79
80       if (IsWikiPage($dbi, $pagename)) {
81          // do an update
82          list($key, $val) = each($pagehash);
83          $PAIRS = "$key='" . addslashes($val) . "'";
84          while (list($key, $val) = each($pagehash)) {
85             $PAIRS .= ",$key='" . addslashes($val) . "'";
86          }
87
88          $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
89
90       } else {
91          // do an insert
92          // build up the column names and values for the query
93          list($key, $val) = each($pagehash);
94          $COLUMNS = "$key";
95          $VALUES  = "'" . addslashes($val) . "'";
96
97          while (list($key, $val) = each($pagehash)) {
98             $COLUMNS .= ",$key";
99             $VALUES  .= ",'" . addslashes($val) . "'";
100          }
101
102          $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
103       }
104
105       echo "<p>Query: $query<p>\n";
106
107 //      if (!mysql_query("replace into $dbi[table] (page, hash) values ('$pagename', '$pagedata')", $dbi['dbc'])) {
108 //            echo "error writing value";
109 //            exit();
110 //      }
111
112    }
113
114
115
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);
123       return $array[0];
124    }
125
126
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"]);
131
132       return $res;
133    }
134
135
136    // iterating through database
137    function TitleSearchNextMatch($dbi, $res) {
138       if($o = mysql_fetch_object($res)) {
139          return $o->page;
140       }
141       else {
142          return 0;
143       }
144    }
145
146
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"]);
151
152       return $res;
153    }
154
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);
160          return $page;
161       }
162       else {
163          return 0;
164       }
165    }
166
167
168 ?>