]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - wiki_msql.php3
First commit of the function library to support mSQL. Already this
[SourceForge/phpwiki.git] / wiki_msql.php3
1 <!-- $Id: wiki_msql.php3,v 1.1 2000-06-25 03:43:33 wainstead Exp $ -->
2 <?
3
4    /*
5       Database functions:
6       MakePageHash($dbhash)
7       MakeDBHash($pagename, $pagehash)
8       OpenDataBase($dbname)
9       CloseDataBase($dbi)
10       RetrievePage($dbi, $pagename)
11       InsertPage($dbi, $pagename, $pagehash)
12       IsWikiPage($dbi, $pagename)
13       InitTitleSearch($dbi, $search)
14       TitleSearchNextMatch($dbi, &$pos)
15       InitFullSearch($dbi, $search)
16       FullSearchNextMatch($dbi, &$pos)
17    */
18
19
20    // open a database and return the handle
21    // ignores MAX_DBM_ATTEMPTS
22
23    function OpenDataBase($dbname) {
24       global $msql_db;
25
26       if (! ($dbc = msql_pconnect())) {
27          echo "Cannot establish connection to database, giving up.";
28          echo "Error message: ", msql_error(), "<br>\n";
29          exit();
30       }
31       if (!msql_select_db($msql_db, $dbc)) {
32          echo "Cannot open database, giving up.";
33          echo "Error message: ", msql_error(), "<br>\n";
34          exit();
35       }
36
37       $dbi['dbc'] = $dbc;
38       $dbi['table'] = $dbname;
39       return $dbi;
40    }
41
42
43    function CloseDataBase($dbi) {
44       // NOP function
45       // msql connections are established as persistant
46       // they cannot be closed through msql_close()
47    }
48
49
50    function MakeDBHash($pagename, $pagehash)
51    {
52       $pagehash["pagename"] = addslashes($pagename);
53       if (!isset($pagehash["flags"]))
54          $pagehash["flags"] = 0;
55       $pagehash["author"] = addslashes($pagehash["author"]);
56       $pagehash["content"] = implode("\n", $pagehash["content"]);
57       $pagehash["content"] = addslashes($pagehash["content"]);
58       $pagehash["refs"] = serialize($pagehash["refs"]);
59       $pagehash["searchterms"] = "foo bar bah bash"; 
60       return $pagehash;
61    }
62
63    function MakePageHash($dbhash)
64    {
65       // unserialize/explode content
66       $dbhash['refs'] = unserialize($dbhash['refs']);
67       $dbhash['content'] = explode("\n", $dbhash['content']);
68       return $dbhash;
69    }
70
71
72    // Return hash of page + attributes or default
73    function RetrievePage($dbi, $pagename) {
74       $pagename = addslashes($pagename);
75       $query = "select * from $dbi[table] where pagename='$pagename'";
76       if ($res = msql_query($query, $dbi['dbc'])) {
77          if ($dbhash = msql_fetch_array($res)) {
78             return MakePageHash($dbhash);
79          }
80       }
81       return -1;
82    }
83
84
85    // Either insert or replace a key/value (a page)
86    function InsertPage($dbi, $pagename, $pagehash)
87    {
88       $pagehash = MakeDBHash($pagename, $pagehash);
89
90
91       // temporary hack until the time stuff is brought up to date
92       $pagehash["created"] = time();
93       $pagehash["lastmodified"] = time();
94
95       if (IsWikiPage($dbi, $pagename)) {
96
97          $PAIRS = "author='$pagehash[author]'," .
98                   "content='$pagehash[content]'," .
99                   "created=$pagehash[created]," .
100                   "flags=$pagehash[flags]," .
101                   "lastmodified=$pagehash[lastmodified]," .
102                   "pagename='$pagehash[pagename]'," .
103                   "refs='$pagehash[refs]'," .
104                   "version=$pagehash[version]," .
105                   "searchterms='$pagehash[searchterms]'";
106
107          $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
108
109       } else {
110          // do an insert
111          // build up the column names and values for the query
112
113       $COLUMNS = "author, content, created, flags, lastmodified, " .
114                  "pagename, refs, version, searchterms";
115
116       $VALUES =  "'$pagehash[author]', '$pagehash[content]', " .
117                  "$pagehash[created], $pagehash[flags], " .
118                  "$pagehash[lastmodified], '$pagehash[pagename]', " .
119                  "'$pagehash[refs]', $pagehash[version], " .
120                  "'$pagehash[searchterms]'";
121
122
123          $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
124       }
125
126 //      echo "<p>Query: $query<p>\n";
127       $retval = msql_query($query, $dbi['dbc']);
128       if ($retval == false) 
129          echo "Insert/update failed: " . msql_error();
130
131    }
132
133
134    function IsWikiPage($dbi, $pagename) {
135       $pagename = addslashes($pagename);
136       $query = "select pagename from $dbi[table] where pagename='$pagename'";
137 //      echo "Query: $query<br>\n";
138       if ($res = msql_query($query, $dbi['dbc'])) {
139          return(msql_affected_rows($res));
140       }
141    }
142
143
144    // setup for title-search
145    function InitTitleSearch($dbi, $search) {
146       $search = addslashes($search);
147       $res = msql_query("select pagename from $dbi[table] where pagename like '%$search%' order by pagename", $dbi["dbc"]);
148
149       return $res;
150    }
151
152
153    // iterating through database
154    function TitleSearchNextMatch($dbi, $res) {
155       if($o = msql_fetch_object($res)) {
156          return $o->pagename;
157       }
158       else {
159          return 0;
160       }
161    }
162
163
164    // setup for full-text search
165    function InitFullSearch($dbi, $search) {
166       $search = addslashes($search);
167       $res = msql_query("select * from $dbi[table] where content like '%$search%'", $dbi["dbc"]);
168
169       return $res;
170    }
171
172    // iterating through database
173    function FullSearchNextMatch($dbi, $res) {
174       if($hash = msql_fetch_array($res)) {
175          return MakePageHash($hash);
176       }
177       else {
178          return 0;
179       }
180    }
181
182
183 ?>