source: project/release/3/mysql/trunk/mysql.html @ 7943

Last change on this file since 7943 was 7943, checked in by Kon Lovett, 12 years ago

Chgd fetch row body to handle binary blob/string.

File size: 37.1 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<!-- Generated by eggdoc Revision: 1.20  -->
3<html>
4<head>
5<title>Eggs Unlimited - mysql</title><style type="text/css"> <!--
6      CODE {
7            color: #666666;
8          }
9/*   DT.definition EM { font-weight: bold; font-style: normal; } */
10
11     DT.definition { 
12                   background: #eee;
13                   color: black;
14                   padding: 0.2em 1em 0.2em 0.7em;
15                   margin-left: 0.2em;
16border: 1px solid #bbc;
17                   font-family: "Andale Mono", monospace;
18                   /* font-size: 1.2em; */
19                   
20                 }
21     DD {
22                   margin-top: 0.8em;
23                   margin-bottom: 0.8em;
24     }
25     DIV.subsection {
26                    border-top: 1px solid #448;
27                    padding-left: 1em;
28                    margin-bottom: 1.2em;
29     }
30     DIV.subsubsection {
31                    border-top: 1px dotted #99c;
32                    /* border-left: 1px solid #99c; */
33                    padding-left: 1em;
34                    margin-bottom: 1.2em;
35     }
36     DIV.subsubsubsection {
37                    border-top: 1px solid #ddf;
38                    padding-left: 1em;
39                    margin-bottom: 1.2em;
40     }
41
42         DIV.section {
43                 margin-bottom: 1.5em;
44         }
45         a:link {
46                 color: #336;
47         }
48         a:visited { color: #666; }
49         a:active  { color: #966; }
50         a:hover   { color: #669; }
51         body { margin: 0; padding: 0; background: #fff; color: #000; font: 9pt "Lucida Grande", "Verdana", sans-serif; }
52         H2 {
53                 background: #336;
54                 color: #fff;
55                 padding-top: 0.5em;
56                 padding-bottom: 0.5em;
57                 padding-left: 16px;
58                 margin: 0 0 1em 0;
59        }
60        UL LI {
61                list-style: none;
62        }
63        TT {
64                font-family: "Andale Mono", monospace;
65                /* font-size: 1.2em; */
66        }
67        H3 {
68                color: #113;
69                margin-bottom: 0.5em;
70        }
71        H4, H5, H6 {
72                color: #113;
73                margin-bottom: 1.0em;
74        }
75        H5 {
76                font-weight: normal;
77                font-style: italic;
78                font-size: 100%;
79                margin-top: 1.2em;
80        }
81        H6 {
82                font-weight: bold;
83                font-size: 85%;
84                margin-top: 1.2em;
85        }
86     DIV#eggheader {
87         text-align: center;
88                 float: right;
89                 margin-right: 2em;
90     }
91     DIV#header IMG {
92            /* display: block; margin-left: auto; margin-right: auto;  */
93            /* float: right; */
94            border: none;  /* firefox */
95     }
96     DIV#footer {
97                background: #bbd;
98                padding: 0.7em ;
99                border-top: 1px solid #cce;
100     }
101     DIV#footer hr {
102                display: none;
103     }
104     DIV#footer a {
105                float: left;
106     }
107     DIV#revision-history {
108         float: right;
109     }
110     
111     DIV#body {
112                 margin: 1em 1em 1em 16px;
113         }
114
115     DIV#examples PRE {
116       background: #eef;
117       padding: 0.1em;
118       border: 1px solid #aac;
119     }
120     PRE#license, DIV#examples PRE {
121       padding: 0.5em;
122     }
123     DIV#examples PRE {
124       /* font-size: 85%; */
125     }
126     PRE { font-family: "Andale Mono", monospace; }
127     TABLE {
128       background: #eef;
129       padding: 0.2em;
130       border: 1px solid #aac;
131       border-collapse: collapse;
132       width: 100%;
133     }
134     TABLE.symbol-table TD.symbol {
135          width: 15em;
136          font-family: "Andale Mono", monospace;
137          /* font-size: 1.2em; */
138     }
139     TH {
140       text-align: left;
141       border-bottom: 1px solid #aac;
142       padding: 0.25em 0.5em 0.25em 0.5em;
143     } 
144     TD { padding: 0.25em 0.5em 0.25em 0.5em; }
145     --></style></head>
146<body>
147<div id="header">
148<h2>mysql</h2>
149<div id="eggheader"><a href="index.html">
150<img src="egg.jpg" alt="[Picture of an egg]" /></a></div></div>
151<div id="body">
152<div class="section">
153<h3>Description</h3>
154<p>MySQL bindings for Chicken.</p></div>
155<div class="section">
156<h3>Author</h3><a href="mailto:toby@butzon.com">Toby Butzon</a></div>
157<div class="section">
158<h3>Version</h3>
159<ul>
160<li>1.31 Additional functions &amp; special handling of binary column. [Kon Lovett]</li>
161<li>1.3 Additional functions. [Kon Lovett]</li>
162<li>1.2 Fix for ticket #297. [Mario Domenech Goulart]</li>
163<li>1.1 Cross-platform compilation fixes, et al.</li>
164<li>1.0 Initial release</li></ul></div>
165<div class="section">
166<h3>Requires</h3>
167<ul>
168<li><span>MySQL client library (<tt>-lmysqlclient</tt>)</span></li></ul></div>
169<div class="section">
170<h3>Usage</h3><tt>(require-extension mysql)</tt></div>
171<div class="section">
172<h3>Download</h3><a href="mysql.egg">mysql.egg</a></div>
173<div class="section">
174<h3>Documentation</h3>
175<p>The MySQL egg provides (most of) the functions offered by the MySQL C API (the <tt>foreign-mysql-*</tt> functions). It also provides a set of slightly more convenient Scheme functions (the <tt>mysql-*</tt> functions). Finally, a few extra functions are provided for easy of use.</p>
176<p>Only the most often used MySQL functions are described in this document. If you really want to see the full listing, consult the <a href="mysql-mole.html">mole documentation</a>.</p>
177<p>Please send bug reports and suggestions to <a href="mailto:toby@butzon.com">toby@butzon.com</a>.</p>
178<div class="subsection">
179<h4>Exceptions</h4>
180<p>Conditions of the kind <code>(exn mysql)</code> are signaled for error situations.<table class="symbol-table">Properties
181<tr>
182<td class="symbol">location</td>
183<td>Where the error occured - usually a procedure name.</td></tr>
184<tr>
185<td class="symbol">arguments</td>
186<td>Values that contributed to the error.</td></tr>
187<tr>
188<td class="symbol">message</td>
189<td>Error message.</td></tr></table></p></div>
190<div class="subsection">
191<h4>Connections</h4>
192<dt class="definition"><strong>procedure:</strong> (mysql-connect [KEYWORDS])</dt>
193<dd>
194<p>Connect to a MySQL server.</p>
195<p>Returns a MySQL connection object suitable for passing to the other MySQL functions. This object is referred to as <tt>CONN</tt> when passed by all the other MySQL functions. Signals an exception when the connection fails.</p>
196<p>Any number of the following <tt>KEYWORDS</tt> may be included:
197<ul>
198<li><tt>host</tt></li>
199<li><tt>user</tt></li>
200<li><tt>passwd</tt></li>
201<li><tt>db</tt></li>
202<li><tt>port</tt></li>
203<li><tt>unix-socket</tt></li>
204<li><tt>client-flag</tt></li>
205<li><tt>ssl</tt> - A <code>mysql-ssl</code> record object.</li>
206<li><tt>options</tt> - An association list of <code>(&lt;mysql-option&gt; . &lt;object&gt;)</code>.</li></ul></p>
207<p>Note that default values are available for all of these arguments. (Consult the <a href="http://dev.mysql.com/doc/mysql/en/c.html">MySQL C API</a> for details on how these defaults are determined.)</p></dd>
208<dt class="definition"><strong>procedure:</strong> (mysql-connection? OBJECT)</dt>
209<dd>
210<p>Is the <tt>OBJECT</tt> a <code>mysql-connection</code>? Referred to as a <tt>CONN</tt>.</p></dd>
211<dt class="definition"><strong>procedure:</strong> (mysql-close CONN)</dt>
212<dd>
213<p>Closes the connection to <tt>CONN</tt>. This frees any remaining MySQL resources from memory, but invalidates the MySQL connection object (<tt>CONN</tt>) so that it may no longer be used.</p></dd>
214<div class="subsubsection">
215<h5>Connect Parameter Constructors</h5>
216<dt class="definition"><strong>procedure:</strong> (make-mysql-options OPTION-FLAG OPTION-VALUE ...)</dt>
217<dd>
218<p>Returns an object suitable as the <tt>options</tt> parameter for <code>mysql-connect</code>.</p>
219<p>The type of the <tt>OPTION-VALUE</tt> is dependent on the <tt>OPTION-FLAG</tt>.</p></dd>
220<dt class="definition"><strong>procedure:</strong> (make-mysql-ssl [KEYWORD ...])</dt>
221<dd>
222<p>Returns a <code>mysql-ssl</code> record.</p>
223<p>Any number of the following <tt>KEYWORD ...</tt> may be included:
224<ul>
225<li><tt>key</tt> - pathname of key file.</li>
226<li><tt>certificate</tt> - pathname of certificate file.</li>
227<li><tt>certificate-authority</tt> - pathname of certificate authority file.</li>
228<li><tt>trusted-certificates</tt> - pathname of trusted certificates directory.</li>
229<li><tt>ciphers</tt> - See <a href="http://www.openssl.org/docs/apps/ciphers.html">OpenSSL Ciphers Man Page</a></li></ul></p></dd>
230<dt class="definition"><strong>procedure:</strong> (mysql-ssl? OBJECT)</dt>
231<dd>
232<p>Is the <tt>OBJECT</tt> an <code>mysql-ssl</code> record?</p></dd>
233<dt class="definition"><strong>procedure:</strong> (mysql-ssl-key-pathname MYSQL-SSL)</dt>
234<dd>
235<p>Returns a <code>string</code>.</p></dd>
236<dt class="definition"><strong>procedure:</strong> (mysql-ssl-certificate-pathname MYSQL-SSL)</dt>
237<dd>
238<p>Returns a <code>string</code>.</p></dd>
239<dt class="definition"><strong>procedure:</strong> (mysql-ssl-certificate-authority-pathname MYSQL-SSL)</dt>
240<dd>
241<p>Returns a <code>string</code>.</p></dd>
242<dt class="definition"><strong>procedure:</strong> (mysql-ssl-trusted-certificates-pathname MYSQL-SSL)</dt>
243<dd>
244<p>Returns a <code>string</code>.</p></dd>
245<dt class="definition"><strong>procedure:</strong> (mysql-ssl-ciphers MYSQL-SSL)</dt>
246<dd>
247<p>Returns a <code>string</code>.</p></dd></div></div>
248<div class="subsection">
249<h4>Basic Query Operations</h4>
250<dt class="definition"><strong>procedure:</strong> (mysql-query CONN SQL-STRING)</dt>
251<dd>
252<p>Executes <tt>SQL-STRING</tt> on the MySQL server and stores the result in memory. Signals an exception if the query fails.</p></dd>
253<dt class="definition"><strong>procedure:</strong> (mysql-fetch-row CONN)</dt>
254<dd>
255<p>Fetches a row from the result set returned by the most recent call to <tt>mysql-query</tt>. If the last query failed, or if there are no more rows left in the result set, returns <tt>#f</tt>; otherwise returns a row object.</p><a name='rowobj'></a>
256<p>A row object is defined as a function that takes a single argument. If the argument is a number, the function returns the value of the field for which that number is the index, or <tt>#f</tt> if the index is out of range. Otherwise, the argument must be a symbol or string, in which case the function returns the value of the field for which that string (or symbol converted into a string) is the field/column name. If no such field exists, returns <tt>#f</tt>.</p></dd>
257<dt class="definition"><strong>procedure:</strong> (mysql-field-count CONN)</dt>
258<dd>
259<p>Returns the number of columns for the most recent query.</p></dd>
260<dt class="definition"><strong>procedure:</strong> (mysql-fetch-lengths CONN)</dt>
261<dd>
262<p>Returns a <code>u32vector</code> of the lengths of the columns of the current row.</p></dd>
263<dt class="definition"><strong>procedure:</strong> (mysql-rewind CONN)</dt>
264<dd>
265<p>Rewinds the result set; that is, resets the pointer used by <tt>mysql-fetch-row</tt> so that the next call to it will return the first row of the result set. If there is no current result set, does nothing.</p></dd>
266<dt class="definition"><strong>procedure:</strong> (mysql-num-rows CONN)</dt>
267<dd>
268<p>Returns the number of rows in the current result set. If no result set exists, returns <tt>#f</tt>.</p></dd>
269<dt class="definition"><strong>procedure:</strong> (mysql-num-fields CONN)</dt>
270<dd>
271<p>Returns the number of fields in the current result set. If no result set exists, returns <tt>#f</tt>.</p></dd>
272<dt class="definition"><strong>procedure:</strong> (mysql-affected-rows CONN)</dt>
273<dd>
274<p>Returns the number of rows affected by the current query.</p></dd></div>
275<div class="subsection">
276<h4>Row Mapping</h4>
277<dt class="definition"><strong>procedure:</strong> (mysql-row-fold CONN PROC INIT)</dt>
278<dd>
279<p>Iterates over the entire result set (regardless of any rows that may have already been returned by <tt>mysql-fetch-row</tt>), calling <tt>PROC</tt> on each row.</p>
280<p>Returns the final accumulated value.</p>
281<p><tt>PROC</tt> must take three arguments: the row (as <a href="#rowobj">described</a>) for <tt>mysql-fetch-row</tt>, the index of that row in the result set, starting with <tt>1</tt> and ending with <tt>(mysql-num-rows CONN)</tt>, and the current accumulated value (initially <tt>INIT</tt>).</p>
282<p><tt>PROC</tt> must return a value.</p></dd>
283<dt class="definition"><strong>procedure:</strong> (mysql-row-for-each CONN PROC)</dt>
284<dd>
285<p>Iterates over the entire result set (regardless of any rows that may have already been returned by <tt>mysql-fetch-row</tt>), calling <tt>PROC</tt> on each row.</p>
286<p><tt>PROC</tt> must take three arguments: the row (as <a href="#rowobj">described</a>) for <tt>mysql-fetch-row</tt>, and the index of that row in the result set, starting with <tt>1</tt> and ending with <tt>(mysql-num-rows CONN)</tt>.</p></dd>
287<dt class="definition"><strong>procedure:</strong> (mysql-row-map CONN PROC)</dt>
288<dd>
289<p>Iterates over the entire result set (regardless of any rows that may have already been returned by <tt>mysql-fetch-row</tt>), calling <tt>PROC</tt> on each row.</p>
290<p>Returns the list of results of the <tt>PROC</tt> invocations.</p>
291<p><tt>PROC</tt> must take three arguments: the row (as <a href="#rowobj">described</a>) for <tt>mysql-fetch-row</tt>, and the index of that row in the result set, starting with <tt>1</tt> and ending with <tt>(mysql-num-rows CONN)</tt>.</p>
292<p><tt>PROC</tt> must return a value.</p></dd>
293<dt class="definition"><strong>procedure:</strong> (mysql-query-fold CONN QUERY PROC INIT)</dt>
294<dd>
295<p>Combines <tt>mysql-query</tt> and <tt>mysql-row-fold</tt>.</p></dd>
296<dt class="definition"><strong>procedure:</strong> (mysql-query-for-each CONN QUERY PROC)</dt>
297<dd>
298<p>Combines <tt>mysql-query</tt> and <tt>mysql-row-for-each</tt>.</p></dd>
299<dt class="definition"><strong>procedure:</strong> (mysql-query-map CONN QUERY PROC)</dt>
300<dd>
301<p>Combines <tt>mysql-query</tt> and <tt>mysql-row-map</tt>.</p></dd>
302<dt class="definition"><strong>procedure:</strong> (mysql-foreach-row CONN BODY)</dt>
303<dd>
304<p>Synonym for <code>mysql-row-for-each</code>.</p></dd>
305<dt class="definition"><strong>procedure:</strong> (mysql-query-foreach CONN QUERY BODY)</dt>
306<dd>
307<p>Synonym for <code>mysql-query-for-each</code>.</p></dd></div>
308<div class="subsection">
309<h4>MYSQL_FIELD Access</h4>
310<dt class="definition"><strong>procedure:</strong> (mysql-fetch-field CONN)</dt>
311<dd>
312<p>Returns a <code>mysql-field-ptr</code> to the next field, or <code>#f</code>.</p></dd>
313<dt class="definition"><strong>procedure:</strong> (mysql-fetch-fields CONN)</dt>
314<dd>
315<p>Returns a <code>mysql-field-ptr</code> to the first field, or <code>#f</code>.</p></dd>
316<dt class="definition"><strong>procedure:</strong> (mysql-fetch-field-direct CONN MYSQL-FIELD-NUMBER)</dt>
317<dd>
318<p>Returns a <code>mysql-field-ptr</code> to a specific field, or <code>#f</code>.</p></dd>
319<dt class="definition"><strong>procedure:</strong> (mysql-field-slots MYSQL-FIELD-POINTER MYSQL-FIELD-GETTER ...)</dt>
320<dd>
321<p>Returns a list of MYSQL_FIELD entry values, from each <tt>MYSQL-FIELD-GETTER</tt>.</p>
322<p><tt>MYSQL-FIELD-POINTER</tt> is a pointer to a MYSQL_FIELD, or <code>#f</code>. <tt>MYSQL-FIELD-GETTER</tt> is a <code>mysql-field-*</code> reference function.</p></dd>
323<dt class="definition"><strong>procedure:</strong> (mysql-fetch-field-slot-direct CONN FIELD-NUMBER MYSQL-FIELD-GETTER)</dt>
324<dd>
325<p>Returns a field slot value. Combines <code>mysql-fetch-field-direct</code> and <code>mysql-field-slots</code>.</p></dd>
326<dt class="definition"><strong>procedure:</strong> (mysql-fetch-field-slot CONN MYSQL-FIELD-GETTER)</dt>
327<dd>
328<p>Returns a field slot value. Combines <code>mysql-fetch-field</code> and <code>mysql-field-slots</code>.</p></dd>
329<dt class="definition"><strong>procedure:</strong> (mysql-fetch-field-slots-direct CONN FIELD-NUMBER MYSQL-FIELD-GETTER ...)</dt>
330<dd>
331<p>Returns a list of field slot values. Combines <code>mysql-fetch-field-direct</code> and <code>mysql-field-slots</code>.</p></dd>
332<dt class="definition"><strong>procedure:</strong> (mysql-fetch-field-slots CONN MYSQL-FIELD-GETTER ...)</dt>
333<dd>
334<p>Returns a list of field slot values. Combines <code>mysql-fetch-field</code> and <code>mysql-field-slots</code>.</p></dd>
335<div class="subsubsection">
336<h5>Slot Getters</h5>
337<dt class="definition"><strong>procedure:</strong> (mysql-field-org-name MYSQL-FIELD-POINTER)</dt>
338<dd>
339<p>Returns <code>string</code>.</p></dd>
340<dt class="definition"><strong>procedure:</strong> (mysql-field-name MYSQL-FIELD-POINTER)</dt>
341<dd>
342<p>Returns <code>string</code>.</p></dd>
343<dt class="definition"><strong>procedure:</strong> (mysql-field-org-table MYSQL-FIELD-POINTER)</dt>
344<dd>
345<p>Returns <code>string</code>.</p></dd>
346<dt class="definition"><strong>procedure:</strong> (mysql-field-org-table MYSQL-FIELD-POINTER)</dt>
347<dd>
348<p>Returns <code>string</code>.</p></dd>
349<dt class="definition"><strong>procedure:</strong> (mysql-field-db MYSQL-FIELD-POINTER)</dt>
350<dd>
351<p>Returns <code>string</code>.</p></dd>
352<dt class="definition"><strong>procedure:</strong> (mysql-field-catalog MYSQL-FIELD-POINTER)</dt>
353<dd>
354<p>Returns <code>string</code>.</p></dd>
355<dt class="definition"><strong>procedure:</strong> (mysql-field-def MYSQL-FIELD-POINTER)</dt>
356<dd>
357<p>Returns <code>string</code>.</p></dd>
358<dt class="definition"><strong>procedure:</strong> (mysql-field-table MYSQL-FIELD-POINTER)</dt>
359<dd>
360<p>Returns <code>string</code>.</p></dd>
361<dt class="definition"><strong>procedure:</strong> (mysql-field-type MYSQL-FIELD-POINTER)</dt>
362<dd>
363<p>Returns <code>enum enum_field_types value</code>.</p></dd>
364<dt class="definition"><strong>procedure:</strong> (mysql-field-charsetnr MYSQL-FIELD-POINTER)</dt>
365<dd>
366<p>Returns <code>unsigned-integer</code>.</p></dd>
367<dt class="definition"><strong>procedure:</strong> (mysql-field-flags MYSQL-FIELD-POINTER)</dt>
368<dd>
369<p>Returns <code>unsigned-integer</code>.</p></dd>
370<dt class="definition"><strong>procedure:</strong> (mysql-field-decimals MYSQL-FIELD-POINTER)</dt>
371<dd>
372<p>Returns <code>unsigned-integer</code>.</p></dd>
373<dt class="definition"><strong>procedure:</strong> (mysql-field-def-length MYSQL-FIELD-POINTER)</dt>
374<dd>
375<p>Returns <code>unsigned-integer</code>.</p></dd>
376<dt class="definition"><strong>procedure:</strong> (mysql-field-catalog-length MYSQL-FIELD-POINTER)</dt>
377<dd>
378<p>Returns <code>unsigned-integer</code>.</p></dd>
379<dt class="definition"><strong>procedure:</strong> (mysql-field-db-length MYSQL-FIELD-POINTER)</dt>
380<dd>
381<p>Returns <code>unsigned-integer</code>.</p></dd>
382<dt class="definition"><strong>procedure:</strong> (mysql-field-org-table-length MYSQL-FIELD-POINTER)</dt>
383<dd>
384<p>Returns <code>unsigned-integer</code>.</p></dd>
385<dt class="definition"><strong>procedure:</strong> (mysql-field-table-length MYSQL-FIELD-POINTER)</dt>
386<dd>
387<p>Returns <code>unsigned-integer</code>.</p></dd>
388<dt class="definition"><strong>procedure:</strong> (mysql-field-org-name-length MYSQL-FIELD-POINTER)</dt>
389<dd>
390<p>Returns <code>unsigned-integer</code>.</p></dd>
391<dt class="definition"><strong>procedure:</strong> (mysql-field-name-length MYSQL-FIELD-POINTER)</dt>
392<dd>
393<p>Returns <code>unsigned-integer</code>.</p></dd>
394<dt class="definition"><strong>procedure:</strong> (mysql-field-max-length MYSQL-FIELD-POINTER)</dt>
395<dd>
396<p>Returns <code>unsigned-integer</code>.</p></dd>
397<dt class="definition"><strong>procedure:</strong> (mysql-field-length MYSQL-FIELD-POINTER)</dt>
398<dd>
399<p>Returns <code>unsigned-integer</code>.</p></dd></div></div>
400<div class="subsection">
401<h4>Field Flag Testing</h4>
402<dt class="definition"><strong>procedure:</strong> (mysql-field-flags-on? MYSQL-FIELD-POINTER MYSQL-FIELD-FLAG ...)</dt>
403<dd>
404<p>Does the field, <tt>MYSQL-FIELD-POINTER</tt>, have all of the <tt>MYSQL-FIELD-FLAG ...</tt> set?</p></dd>
405<dt class="definition"><strong>procedure:</strong> (mysql-field-flags-off? MYSQL-FIELD-POINTER MYSQL-FIELD-FLAG ...)</dt>
406<dd>
407<p>Does the field, <tt>MYSQL-FIELD-POINTER</tt>, have all of the <tt>MYSQL-FIELD-FLAG ...</tt> not set?</p></dd>
408<dt class="definition"><strong>procedure:</strong> (mysql-field-primary-key? MYSQL-FIELD-POINTER)</dt>
409<dd>
410<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, a primary key?</p></dd>
411<dt class="definition"><strong>procedure:</strong> (mysql-field-not-null? MYSQL-FIELD-POINTER)</dt>
412<dd>
413<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, not null?</p></dd>
414<dt class="definition"><strong>procedure:</strong> (mysql-field-binary? MYSQL-FIELD-POINTER)</dt>
415<dd>
416<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, binary?</p></dd>
417<dt class="definition"><strong>procedure:</strong> (mysql-field-numeric? MYSQL-FIELD-POINTER)</dt>
418<dd>
419<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, numeric?</p></dd></div>
420<div class="subsection">
421<h4>Field Type Testing</h4>
422<dt class="definition"><strong>procedure:</strong> (mysql-field-type-any? MYSQL-FIELD-POINTER MYSQL-TYPE ...)</dt>
423<dd>
424<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, type any of <tt>MYSQL-TYPE ...</tt>?</p></dd>
425<dt class="definition"><strong>procedure:</strong> (mysql-field-type=? MYSQL-FIELD-POINTER MYSQL-TYPE)</dt>
426<dd>
427<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, <tt>MYSQL-TYPE</tt>?</p></dd>
428<dt class="definition"><strong>procedure:</strong> (mysql-field-type-clock? MYSQL-FIELD-POINTER)</dt>
429<dd>
430<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, type time or date related?</p></dd>
431<dt class="definition"><strong>procedure:</strong> (mysql-field-type-number? MYSQL-FIELD-POINTER)</dt>
432<dd>
433<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, type a number?</p></dd>
434<dt class="definition"><strong>procedure:</strong> (mysql-field-type-blob? MYSQL-FIELD-POINTER)</dt>
435<dd>
436<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, type some kind of blob?</p></dd>
437<dt class="definition"><strong>procedure:</strong> (mysql-field-type-string? MYSQL-FIELD-POINTER)</dt>
438<dd>
439<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, type some kind of string?</p></dd>
440<dt class="definition"><strong>procedure:</strong> (mysql-field-type-magnitude? MYSQL-FIELD-POINTER)</dt>
441<dd>
442<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, type some kind of number?</p></dd>
443<dt class="definition"><strong>procedure:</strong> (mysql-field-type-binary? MYSQL-FIELD-POINTER)</dt>
444<dd>
445<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, type some kind of binary string or blob?</p></dd>
446<dt class="definition"><strong>procedure:</strong> (mysql-field-type-text? MYSQL-FIELD-POINTER)</dt>
447<dd>
448<p>Is the field, <tt>MYSQL-FIELD-POINTER</tt>, type some kind of non-binary string or blob?</p></dd></div>
449<div class="subsection">
450<h4>Character Set Access</h4>
451<dt class="definition"><strong>procedure:</strong> (mysql-set-character-set CONN CHARACTER-SET-NAME)</dt>
452<dd>
453<p>Sets the current character set.</p></dd>
454<dt class="definition"><strong>procedure:</strong> (mysql-character-set-name CONN)</dt>
455<dd>
456<p>Returns a <tt>string</tt>.</p></dd>
457<dt class="definition"><strong>procedure:</strong> (mysql-get-character-set-info CONN)</dt>
458<dd>
459<p>Returns a <tt>MY-CHARSET-INFO-POINTER</tt>.</p></dd>
460<div class="subsubsection">
461<h5>Slot Getters</h5>
462<dt class="definition"><strong>procedure:</strong> (my-charset-info-name MY-CHARSET-INFO-POINTER)</dt>
463<dd>
464<p>Return a <code>string</code>.</p></dd>
465<dt class="definition"><strong>procedure:</strong> (my-charset-info-csname MY-CHARSET-INFO-POINTER)</dt>
466<dd>
467<p>Return a <code>string</code>.</p></dd>
468<dt class="definition"><strong>procedure:</strong> (my-charset-info-comment MY-CHARSET-INFO-POINTER)</dt>
469<dd>
470<p>Return a <code>string</code>.</p></dd>
471<dt class="definition"><strong>procedure:</strong> (my-charset-info-dir MY-CHARSET-INFO-POINTER)</dt>
472<dd>
473<p>Return a <code>string</code>.</p></dd>
474<dt class="definition"><strong>procedure:</strong> (my-charset-info-mbminlen MY-CHARSET-INFO-POINTER)</dt>
475<dd>
476<p>Return a <code>number</code>.</p></dd>
477<dt class="definition"><strong>procedure:</strong> (my-charset-info-mbmaxlen MY-CHARSET-INFO-POINTER)</dt>
478<dd>
479<p>Return a <code>number</code>.</p></dd></div></div>
480<div class="subsection">
481<h4>Miscellaneous Procedures</h4>
482<dt class="definition"><strong>procedure:</strong> (mysql-change-user CONN [KEYWORD ...])</dt>
483<dd>
484<p>Changes the user identity.</p>
485<p>Any number of the following <tt>KEYWORD ...</tt> may be included:
486<ul>
487<li><tt>user</tt></li>
488<li><tt>passwd</tt></li>
489<li><tt>db</tt></li></ul></p></dd>
490<dt class="definition"><strong>procedure:</strong> (mysql-debug DEBUG)</dt>
491<dd>
492<p>.</p></dd>
493<dt class="definition"><strong>procedure:</strong> (mysql-dump-debug-info CONN)</dt>
494<dd>
495<p>.</p></dd>
496<dt class="definition"><strong>procedure:</strong> (mysql-errno CONN)</dt>
497<dd>
498<p>.</p></dd>
499<dt class="definition"><strong>procedure:</strong> (mysql-error CONN)</dt>
500<dd>
501<p>Returns a string describing the last mysql error, or #f if no error has occurred.</p></dd>
502<dt class="definition"><strong>procedure:</strong> (mysql-escape-string CONN SQL)</dt>
503<dd>
504<p>Returns an escape encoded form of the <tt>SQL</tt> string.</p></dd>
505<dt class="definition"><strong>procedure:</strong> (mysql-free-result CONN)</dt>
506<dd>
507<p>.</p></dd>
508<dt class="definition"><strong>procedure:</strong> (mysql-get-client-info)</dt>
509<dd>
510<p>.</p></dd>
511<dt class="definition"><strong>procedure:</strong> (mysql-get-client-version)</dt>
512<dd>
513<p>.</p></dd>
514<dt class="definition"><strong>procedure:</strong> (mysql-get-host-info CONN)</dt>
515<dd>
516<p>.</p></dd>
517<dt class="definition"><strong>procedure:</strong> (mysql-get-proto-info CONN)</dt>
518<dd>
519<p>.</p></dd>
520<dt class="definition"><strong>procedure:</strong> (mysql-get-server-info CONN)</dt>
521<dd>
522<p>.</p></dd>
523<dt class="definition"><strong>procedure:</strong> (mysql-get-server-version CONN)</dt>
524<dd>
525<p>.</p></dd>
526<dt class="definition"><strong>procedure:</strong> (mysql-info CONN)</dt>
527<dd>
528<p>.</p></dd>
529<dt class="definition"><strong>procedure:</strong> (mysql-insert-id CONN)</dt>
530<dd>
531<p>.</p></dd>
532<dt class="definition"><strong>procedure:</strong> (mysql-kill CONN PID)</dt>
533<dd>
534<p>.</p></dd>
535<dt class="definition"><strong>procedure:</strong> (mysql-list-dbs CONN LIKE)</dt>
536<dd>
537<p>.</p></dd>
538<dt class="definition"><strong>procedure:</strong> (mysql-list-fields CONN TABLE WILD)</dt>
539<dd>
540<p>.</p></dd>
541<dt class="definition"><strong>procedure:</strong> (mysql-list-processes CONN)</dt>
542<dd>
543<p>.</p></dd>
544<dt class="definition"><strong>procedure:</strong> (mysql-list-tables CONN WILD)</dt>
545<dd>
546<p>.</p></dd>
547<dt class="definition"><strong>procedure:</strong> (mysql-num-fields CONN)</dt>
548<dd>
549<p>.</p></dd>
550<dt class="definition"><strong>procedure:</strong> (mysql-num-rows CONN)</dt>
551<dd>
552<p>.</p></dd>
553<dt class="definition"><strong>procedure:</strong> (mysql-ping CONN)</dt>
554<dd>
555<p>.</p></dd>
556<dt class="definition"><strong>procedure:</strong> (mysql-select-db CONN DB)</dt>
557<dd>
558<p>Returns <code>#t</code> if the select was successful, signals exception otherwise.</p></dd>
559<dt class="definition"><strong>procedure:</strong> (mysql-stat CONN)</dt>
560<dd>
561<p>.</p></dd>
562<dt class="definition"><strong>procedure:</strong> (mysql-store-result CONN)</dt>
563<dd>
564<p>.</p></dd>
565<dt class="definition"><strong>procedure:</strong> (mysql-thread-id CONN)</dt>
566<dd>
567<p>.</p></dd></div>
568<div class="subsection">
569<h4>Enumerations &amp; Flags</h4>
570<div class="subsubsection">
571<h5>Client Flags</h5>
572<p><table class="symbol-table">Symbolic Value
573<tr>
574<td class="symbol">client-compress</td>
575<td>CLIENT_COMPRESS</td></tr>
576<tr>
577<td class="symbol">client-found-rows</td>
578<td>CLIENT_FOUND_ROWS</td></tr>
579<tr>
580<td class="symbol">client-ignore-sigpipe</td>
581<td>CLIENT_IGNORE_SIGPIPE</td></tr>
582<tr>
583<td class="symbol">client-ignore-space</td>
584<td>CLIENT_IGNORE_SPACE</td></tr>
585<tr>
586<td class="symbol">client-interactive</td>
587<td>CLIENT_INTERACTIVE</td></tr>
588<tr>
589<td class="symbol">client-local-files</td>
590<td>CLIENT_LOCAL_FILES</td></tr>
591<tr>
592<td class="symbol">client-multi-results</td>
593<td>CLIENT_MULTI_RESULTS</td></tr>
594<tr>
595<td class="symbol">client-multi-statements</td>
596<td>CLIENT_MULTI_STATEMENTS</td></tr>
597<tr>
598<td class="symbol">client-no-schema</td>
599<td>CLIENT_NO_SCHEMA</td></tr>
600<tr>
601<td class="symbol">client-odbc</td>
602<td>CLIENT_ODBC</td></tr>
603<tr>
604<td class="symbol">client-ssl</td>
605<td>CLIENT_SSL</td></tr></table></p>
606<dt class="definition"><strong>procedure:</strong> (mysql-client-flags-value SYMBOL ...)</dt>
607<dd>
608<p>Returns the or'ed value of the <tt>SYMBOL ...</tt> values.</p></dd>
609<dt class="definition"><strong>procedure:</strong> (mysql-client-flags-symbol NUMBER)</dt>
610<dd>
611<p>Returns the symbol for the <tt>NUMBER</tt>.</p></dd></div>
612<div class="subsubsection">
613<h5>enum enum_mysql_set_option</h5>
614<p><table class="symbol-table">Symbolic Value
615<tr>
616<td class="symbol">mysql-option-multi-statements-on</td>
617<td>MYSQL_OPTION_MULTI_STATEMENTS_ON</td></tr>
618<tr>
619<td class="symbol">mysql-option-multi-statements-off</td>
620<td>MYSQL_OPTION_MULTI_STATEMENTS_OFF</td></tr></table></p>
621<dt class="definition"><strong>procedure:</strong> (mysql-server-option-value SYMBOL ...)</dt>
622<dd>
623<p>Returns the or'ed value of the <tt>SYMBOL ...</tt> values.</p></dd>
624<dt class="definition"><strong>procedure:</strong> (mysql-server-option-symbol NUMBER)</dt>
625<dd>
626<p>Returns the symbol for the <tt>NUMBER</tt>.</p></dd></div>
627<div class="subsubsection">
628<h5>enum mysql_option</h5>
629<p><table class="symbol-table">Symbolic Value
630<tr>
631<td class="symbol">mysql-opt-connect-timeout</td>
632<td>MYSQL_OPT_CONNECT_TIMEOUT</td></tr>
633<tr>
634<td class="symbol">mysql-opt-compress</td>
635<td>MYSQL_OPT_COMPRESS</td></tr>
636<tr>
637<td class="symbol">mysql-opt-named-pipe</td>
638<td>MYSQL_OPT_NAMED_PIPE</td></tr>
639<tr>
640<td class="symbol">mysql-init-command</td>
641<td>MYSQL_INIT_COMMAND</td></tr>
642<tr>
643<td class="symbol">mysql-read-default-file</td>
644<td>MYSQL_READ_DEFAULT_FILE</td></tr>
645<tr>
646<td class="symbol">mysql-read-default-group</td>
647<td>MYSQL_READ_DEFAULT_GROUP</td></tr>
648<tr>
649<td class="symbol">mysql-set-charset-dir</td>
650<td>MYSQL_SET_CHARSET_DIR</td></tr>
651<tr>
652<td class="symbol">mysql-set-charset-name</td>
653<td>MYSQL_SET_CHARSET_NAME</td></tr>
654<tr>
655<td class="symbol">mysql-opt-local-infile</td>
656<td>MYSQL_OPT_LOCAL_INFILE</td></tr>
657<tr>
658<td class="symbol">mysql-opt-protocol</td>
659<td>MYSQL_OPT_PROTOCOL</td></tr>
660<tr>
661<td class="symbol">mysql-shared-memory-base-name</td>
662<td>MYSQL_SHARED_MEMORY_BASE_NAME</td></tr>
663<tr>
664<td class="symbol">mysql-opt-read-timeout</td>
665<td>MYSQL_OPT_READ_TIMEOUT</td></tr>
666<tr>
667<td class="symbol">mysql-opt-write-timeout</td>
668<td>MYSQL_OPT_WRITE_TIMEOUT</td></tr>
669<tr>
670<td class="symbol">mysql-opt-use-result</td>
671<td>MYSQL_OPT_USE_RESULT</td></tr>
672<tr>
673<td class="symbol">mysql-opt-use-remote-connection</td>
674<td>MYSQL_OPT_USE_REMOTE_CONNECTION</td></tr>
675<tr>
676<td class="symbol">mysql-opt-use-embedded-connection</td>
677<td>MYSQL_OPT_USE_EMBEDDED_CONNECTION</td></tr>
678<tr>
679<td class="symbol">mysql-opt-guess-connection</td>
680<td>MYSQL_OPT_GUESS_CONNECTION</td></tr>
681<tr>
682<td class="symbol">mysql-set-client-ip</td>
683<td>MYSQL_SET_CLIENT_IP</td></tr>
684<tr>
685<td class="symbol">mysql-secure-auth</td>
686<td>MYSQL_SECURE_AUTH</td></tr>
687<tr>
688<td class="symbol">mysql-report-data-truncation</td>
689<td>MYSQL_REPORT_DATA_TRUNCATION</td></tr></table></p>
690<dt class="definition"><strong>procedure:</strong> (mysql-option-value SYMBOL ...)</dt>
691<dd>
692<p>Returns the or'ed value of the <tt>SYMBOL ...</tt> values.</p></dd>
693<dt class="definition"><strong>procedure:</strong> (mysql-option-symbol NUMBER)</dt>
694<dd>
695<p>Returns the symbol for the <tt>NUMBER</tt>.</p></dd></div>
696<div class="subsubsection">
697<h5>enum enum_field_types</h5>
698<p><table class="symbol-table">Symbolic Value
699<tr>
700<td class="symbol">mysql-type-decimal</td>
701<td>MYSQL_TYPE_DECIMAL</td></tr>
702<tr>
703<td class="symbol">mysql-type-tiny</td>
704<td>MYSQL_TYPE_TINY</td></tr>
705<tr>
706<td class="symbol">mysql-type-short</td>
707<td>MYSQL_TYPE_SHORT</td></tr>
708<tr>
709<td class="symbol">mysql-type-long</td>
710<td>MYSQL_TYPE_LONG</td></tr>
711<tr>
712<td class="symbol">mysql-type-float</td>
713<td>MYSQL_TYPE_FLOAT</td></tr>
714<tr>
715<td class="symbol">mysql-type-double</td>
716<td>MYSQL_TYPE_DOUBLE</td></tr>
717<tr>
718<td class="symbol">mysql-type-null</td>
719<td>MYSQL_TYPE_NULL</td></tr>
720<tr>
721<td class="symbol">mysql-type-timestamp</td>
722<td>MYSQL_TYPE_TIMESTAMP</td></tr>
723<tr>
724<td class="symbol">mysql-type-longlong</td>
725<td>MYSQL_TYPE_LONGLONG</td></tr>
726<tr>
727<td class="symbol">mysql-type-int24</td>
728<td>MYSQL_TYPE_INT24</td></tr>
729<tr>
730<td class="symbol">mysql-type-date</td>
731<td>MYSQL_TYPE_DATE</td></tr>
732<tr>
733<td class="symbol">mysql-type-time</td>
734<td>MYSQL_TYPE_TIME</td></tr>
735<tr>
736<td class="symbol">mysql-type-datetime</td>
737<td>MYSQL_TYPE_DATETIME</td></tr>
738<tr>
739<td class="symbol">mysql-type-year</td>
740<td>MYSQL_TYPE_YEAR</td></tr>
741<tr>
742<td class="symbol">mysql-type-newdate</td>
743<td>MYSQL_TYPE_NEWDATE</td></tr>
744<tr>
745<td class="symbol">mysql-type-varchar</td>
746<td>MYSQL_TYPE_VARCHAR</td></tr>
747<tr>
748<td class="symbol">mysql-type-bit</td>
749<td>MYSQL_TYPE_BIT</td></tr>
750<tr>
751<td class="symbol">mysql-type-newdecimal</td>
752<td>MYSQL_TYPE_NEWDECIMAL</td></tr>
753<tr>
754<td class="symbol">mysql-type-enum</td>
755<td>MYSQL_TYPE_ENUM</td></tr>
756<tr>
757<td class="symbol">mysql-type-set</td>
758<td>MYSQL_TYPE_SET</td></tr>
759<tr>
760<td class="symbol">mysql-type-tiny-blob</td>
761<td>MYSQL_TYPE_TINY_BLOB</td></tr>
762<tr>
763<td class="symbol">mysql-type-medium-blob</td>
764<td>MYSQL_TYPE_MEDIUM_BLOB</td></tr>
765<tr>
766<td class="symbol">mysql-type-long-blob</td>
767<td>MYSQL_TYPE_LONG_BLOB</td></tr>
768<tr>
769<td class="symbol">mysql-type-blob</td>
770<td>MYSQL_TYPE_BLOB</td></tr>
771<tr>
772<td class="symbol">mysql-type-var-string</td>
773<td>MYSQL_TYPE_VAR_STRING</td></tr>
774<tr>
775<td class="symbol">mysql-type-string</td>
776<td>MYSQL_TYPE_STRING</td></tr>
777<tr>
778<td class="symbol">mysql-type-geometry</td>
779<td>MYSQL_TYPE_GEOMETRY</td></tr></table></p>
780<dt class="definition"><strong>procedure:</strong> (mysql-type-value SYMBOL ...)</dt>
781<dd>
782<p>Returns the or'ed value of the <tt>SYMBOL ...</tt> values.</p></dd>
783<dt class="definition"><strong>procedure:</strong> (mysql-type-symbol NUMBER)</dt>
784<dd>
785<p>Returns the symbol for the <tt>NUMBER</tt>.</p></dd></div>
786<div class="subsubsection">
787<h5>MYSQL_FIELD.flags Flags</h5>
788<p><table class="symbol-table">Symbolic Value
789<tr>
790<td class="symbol">not-null-flag</td>
791<td>NOT-NULL-FLAG</td></tr>
792<tr>
793<td class="symbol">pri-key-flag</td>
794<td>PRI-KEY-FLAG</td></tr>
795<tr>
796<td class="symbol">unique-key-flag</td>
797<td>UNIQUE-KEY-FLAG</td></tr>
798<tr>
799<td class="symbol">multiple-key-flag</td>
800<td>MULTIPLE-KEY-FLAG</td></tr>
801<tr>
802<td class="symbol">unsigned-flag</td>
803<td>UNSIGNED-FLAG</td></tr>
804<tr>
805<td class="symbol">zerofill-flag</td>
806<td>ZEROFILL-FLAG</td></tr>
807<tr>
808<td class="symbol">binary-flag</td>
809<td>BINARY-FLAG</td></tr>
810<tr>
811<td class="symbol">auto-increment-flag</td>
812<td>AUTO-INCREMENT-FLAG</td></tr>
813<tr>
814<td class="symbol">no-default-value-flag</td>
815<td>NO-DEFAULT-VALUE-FLAG</td></tr></table></p>
816<dt class="definition"><strong>procedure:</strong> (mysql-field-flags-value SYMBOL ...)</dt>
817<dd>
818<p>Returns the or'ed value of the <tt>SYMBOL ...</tt> values.</p></dd>
819<dt class="definition"><strong>procedure:</strong> (mysql-field-flags-symbol NUMBER)</dt>
820<dd>
821<p>Returns the symbol for the <tt>NUMBER</tt>.</p></dd></div></div></div>
822<div class="section">
823<h3>Examples</h3>
824<div id="examples">
825<p>A bulky usage might look like:
826<pre>(use mysql)
827
828(let [(db (mysql-connect host: &quot;mysql.example.com&quot; user: &quot;example&quot;
829                         passwd: &quot;secret&quot;))]
830  (mysql-query db &quot;SHOW DATABASES&quot;)
831  (do [(row (mysql-fetch-row db) (mysql-fetch-row db))]
832      [(not row)]
833    (display (conc &quot;Row &quot; idx &quot;: &quot; (row &quot;Database&quot;) &quot;\n&quot;)))
834  (mysql-close db))</pre></p>
835<p>A slightly more compact version that does the same thing:
836<pre>(use mysql)
837
838(let [(db (mysql-connect host: &quot;mysql.example.com&quot; user: &quot;example&quot;
839                         passwd: &quot;secret&quot;))]
840  (mysql-query-foreach db &quot;SHOW DATABASES&quot;
841                       (lambda (row idx)
842                         (display (conc &quot;Row &quot; idx &quot;: &quot; (row &quot;Database&quot;) &quot;\n&quot;))))
843  (mysql-close db))</pre></p></div></div>
844<div class="section">
845<h3>Data Type Conversion</h3>
846<p>All MySQL result data (except NULL) are returned as Scheme strings.</p>
847<p>The NULL value is represented by <tt>#f</tt>.</p>
848<p>Booleans are expressed as the Scheme strings <tt>&quot;1&quot;</tt> and <tt>&quot;0&quot;</tt>.</p>
849<p>All remaining types, including numeric types, blobs, and strings are returned as Scheme strings.</p></div>
850<div class="section">
851<h3>Bugs</h3>
852<p>No prepared statement support.</p>
853<p>This is alpha quality software. Only very basic functionality has been tested so far. I look forward to providing a more complete test suite (and probably a slew of bugfixes) with the next release.</p>
854<p><tt>mysql-escape-string</tt> is broken when it's used for binary data.</p>
855<p>I need to nail down the supported libmysqlclient versions. Right now there are some functions I've put off because they may or may not be supported in my target range. We'll see, soon...</p></div>
856<div class="section">
857<h3>License</h3>
858<pre id="license">Copyright (c) 2005 Toby Butzon.
859
860Permission is hereby granted, free of charge, to any person obtaining a
861copy of this software and associated documentation files (the &quot;Software&quot;),
862to deal in the Software without restriction, including without limitation
863the rights to use, copy, modify, merge, publish, distribute, sublicense,
864and/or sell copies of the Software, and to permit persons to whom the
865Software is furnished to do so, subject to the following conditions:
866
867The above copyright notice and this permission notice shall be included
868in all copies or substantial portions of the Software.
869
870THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
871IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
872FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
873THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
874OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
875ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
876OTHER DEALINGS IN THE SOFTWARE.</pre></div></div>
877<div id="footer">
878<hr /><a href="index.html">&lt; Egg index</a>
879<div id="revision-history">$Revision$ $Date$</div>&nbsp;</div></body></html>
Note: See TracBrowser for help on using the repository browser.