Updated get-database-type-specifier to handle text/longchar type
[clsql.git] / doc / ref-fddl.xml
1 <?xml version='1.0' ?>
2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
4 <!ENTITY % myents SYSTEM "entities.inc">
5 %myents;
6 ]>
7
8 <!-- Functional Data Definition Language --> 
9 <reference id="ref-fddl"> 
10   <title>Functional Data Definition Language (FDDL)</title> 
11   <partintro>
12     <para>
13       &clsql; provides a functional DDL which supports the creation
14       and destruction of a variety of database objects including
15       tables, views, indexes and sequences. Functions which return
16       information about currently defined database objects are also
17       provided. In addition, the FDDL includes functionality for
18       examining table attributes and attribute types. 
19     </para>
20   </partintro>
21
22   <refentry id="create-table">
23     <refmeta>
24       <refentrytitle>CREATE-TABLE</refentrytitle>
25     </refmeta>
26     <refnamediv>
27       <refname>CREATE-TABLE</refname>
28       <refpurpose>Create a database table.</refpurpose>
29       <refclass>Function</refclass>
30     </refnamediv>
31     <refsect1>
32       <title>Syntax</title>
33       <synopsis>
34       <function>create-table</function> <replaceable>name</replaceable> <replaceable>description</replaceable> &amp;key <replaceable>database</replaceable> <replaceable>constraints</replaceable> <replaceable>transactions</replaceable> => <returnvalue></returnvalue></synopsis>
35     </refsect1>
36     <refsect1>
37       <title>Arguments and Values</title>
38       <variablelist>
39         <varlistentry>
40           <term><parameter>name</parameter></term>
41           <listitem>
42             <para>
43               The name of the table as a string, symbol or SQL expression. 
44             </para>
45           </listitem>
46         </varlistentry>
47         <varlistentry> 
48           <term><parameter>database</parameter></term>
49           <listitem>
50             <para>
51               A database object which defaults to
52               <symbol>*default-database*</symbol>.
53             </para>
54           </listitem>
55         </varlistentry>
56         <varlistentry>
57           <term><parameter>description</parameter></term>
58           <listitem>
59             <para>
60               A list. 
61             </para>
62           </listitem>
63         </varlistentry>
64         <varlistentry>
65           <term><parameter>constraints</parameter></term>
66           <listitem>
67             <para>
68               A string, a list of strings or &nil;. 
69             </para>
70           </listitem>
71         </varlistentry>
72         <varlistentry>
73           <term><parameter>transactions</parameter></term>
74           <listitem>
75             <para>
76               A Boolean. The default value is &t;. 
77             </para>
78           </listitem>
79         </varlistentry>
80       </variablelist>
81     </refsect1>
82     <refsect1>
83       <title>Description</title>
84       <para>Creates a table called <parameter>name</parameter>, which
85       may be a string, symbol or SQL table identifier, in
86       <parameter>database</parameter> which defaults to
87       <symbol>*default-database*</symbol>. <parameter>description</parameter>
88       is a list whose elements are lists containing the attribute
89       names, types, and other constraints such as not-null or
90       primary-key for each column in the table.
91       </para> 
92       <para>
93         <parameter>constraints</parameter> is a string representing an
94         SQL table constraint expression or a list of such strings.
95       </para> 
96       <para> 
97         With MySQL databases, if <parameter>transactions</parameter>
98         is &t; an InnoDB table is created which supports transactions.
99       </para>
100     </refsect1>
101     <refsect1>
102       <title>Examples</title>
103       <screen>
104 (create-table [foo]
105               '(([id] integer)
106                 ([height] float)
107                 ([name] (string 24))
108                 ([comments] text)))
109 => 
110 (table-exists-p [foo]) 
111 => T 
112
113 (create-table [foo] '(([bar] integer :not-null :unique :primary-key) 
114                       ([baz] string :not-null :unique)))
115 => 
116 (table-exists-p [foo])
117 => T
118
119 (create-table [foo] '(([bar] integer :not-null) ([baz] string :not-null))
120               :constraints '("UNIQUE (bar,baz)" "PRIMARY KEY (bar)"))
121 => 
122 (table-exists-p [foo])
123 => T
124       </screen>
125     </refsect1>
126     <refsect1>
127       <title>Side Effects</title>
128       <para>
129         A table is created in <parameter>database</parameter>. 
130       </para>
131     </refsect1>
132     <refsect1>
133       <title>Affected by</title>
134       <para>
135         <symbol>*default-database*</symbol>
136       </para>
137     </refsect1>
138     <refsect1>
139       <title>Exceptional Situations</title>
140       <para>
141         An error is signalled if <parameter>name</parameter> is not a
142         string, symbol or SQL expression. An error of type
143         <symbol>sql-database-data-error</symbol> is signalled if a
144         relation called <parameter>name</parameter> already exists.
145       </para>
146     </refsect1>
147     <refsect1>
148       <title>See Also</title>
149       <simplelist>
150         <member><link linkend="drop-table"><function>drop-table</function></link></member>
151         <member><link linkend="list-tables"><function>list-tables</function></link></member>
152         <member><link linkend="table-exists-p"><function>table-exists-p</function></link></member>
153       </simplelist>
154     </refsect1>
155     <refsect1>
156       <title>Notes</title>
157       <para>
158         The <parameter>constraints</parameter> and
159         <parameter>transactions</parameter> keyword arguments to
160         <function>create-table</function> are &clsql; extensions. The
161         <parameter>transactions</parameter> keyword argument is for
162         compatibility with MySQL databases.
163       </para>
164     </refsect1>
165   </refentry>
166
167   <refentry id="drop-table">
168     <refmeta>
169       <refentrytitle>DROP-TABLE</refentrytitle>
170     </refmeta>
171     <refnamediv>
172       <refname>DROP-TABLE</refname>
173       <refpurpose>Drop a database table.</refpurpose>
174       <refclass>Function</refclass>
175     </refnamediv>
176     <refsect1>
177       <title>Syntax</title>
178       <synopsis>
179       <function>drop-table</function> <replaceable>name</replaceable> &amp;key <replaceable>if-does-not-exist</replaceable> <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
180     </refsect1>
181     <refsect1>
182       <title>Arguments and Values</title>
183       <variablelist>
184         <varlistentry>
185           <term><parameter>name</parameter></term>
186           <listitem>
187             <para>
188               The name of the table as a string, symbol or SQL expression. 
189             </para>
190           </listitem>
191         </varlistentry>
192         <varlistentry> 
193           <term><parameter>database</parameter></term>
194           <listitem>
195             <para>
196               A database object which defaults to
197               <symbol>*default-database*</symbol>.
198             </para>
199           </listitem>
200         </varlistentry>
201         <varlistentry> 
202           <term><parameter>if-does-not-exist</parameter></term>
203           <listitem>
204             <para>
205               A symbol. Meaningful values are <symbol>:ignore</symbol>
206               or <symbol>:error</symbol> (the default).  
207             </para>
208           </listitem>
209         </varlistentry>
210       </variablelist>
211     </refsect1>
212     <refsect1>
213       <title>Description</title>
214       <para>Drops the table called <parameter>name</parameter> from
215       <parameter>database</parameter> which defaults to
216       <symbol>*default-database*</symbol>. If the table does not exist
217       and <parameter>if-does-not-exist</parameter> is
218       <symbol>:ignore</symbol> then <function>drop-table</function>
219       returns &nil; whereas an error is signalled if
220       <parameter>if-does-not-exist</parameter> is
221       <symbol>:error</symbol>.
222       </para>
223     </refsect1>
224     <refsect1>
225       <title>Examples</title>
226       <screen>
227 (table-exists-p [foo])
228 => T
229 (drop-table [foo] :if-does-not-exist :ignore)
230 => 
231 (table-exists-p [foo])
232 => NIL        
233       </screen>
234     </refsect1>
235     <refsect1>
236       <title>Side Effects</title>
237       <para>
238         A table is dropped <parameter>database</parameter>. 
239       </para>
240     </refsect1>
241     <refsect1>
242       <title>Affected by</title>
243       <para>
244         <symbol>*default-database*</symbol>
245       </para> 
246     </refsect1>
247     <refsect1>
248       <title>Exceptional Situations</title>
249       <para>
250         An error is signalled if <parameter>name</parameter> is not a
251         string, symbol or SQL expression. An error of type
252         <symbol>sql-database-data-error</symbol> is signalled if
253         <parameter>name</parameter> doesn't exist and
254         <parameter>if-does-not-exist</parameter> has a value of
255         <symbol>:error</symbol>.
256       </para>
257     </refsect1>
258     <refsect1>
259       <title>See Also</title>
260       <simplelist>
261         <member><link linkend="create-table"><function>create-table</function></link></member>
262         <member><link linkend="list-tables"><function>list-tables</function></link></member>
263         <member><link linkend="table-exists-p"><function>table-exists-p</function></link></member>
264       </simplelist>
265     </refsect1>
266     <refsect1>
267       <title>Notes</title>
268       <para>
269         The <parameter>if-does-not-exist</parameter> keyword argument
270         to <function>drop-table</function> is a &clsql; extension.
271       </para>
272     </refsect1>
273   </refentry>
274
275   <refentry id="list-tables">
276     <refmeta>
277       <refentrytitle>LIST-TABLES</refentrytitle>
278     </refmeta>
279     <refnamediv>
280       <refname>LIST-TABLES</refname>
281       <refpurpose>Returns a list of database tables.</refpurpose>
282       <refclass>Function</refclass>
283     </refnamediv>
284     <refsect1>
285       <title>Syntax</title>
286       <synopsis>
287       <function>list-tables</function> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
288     </refsect1>
289     <refsect1>
290       <title>Arguments and Values</title>
291       <variablelist>
292         <varlistentry>
293           <term><parameter>owner</parameter></term>
294           <listitem>
295             <para>
296               A string, &nil; or <symbol>:all</symbol>. 
297             </para>
298           </listitem>
299         </varlistentry>
300         <varlistentry> 
301           <term><parameter>database</parameter></term>
302           <listitem>
303             <para>
304               A database object which defaults to
305               <symbol>*default-database*</symbol>.
306             </para>
307           </listitem>
308         </varlistentry>
309         <varlistentry> 
310           <term><parameter>result</parameter></term>
311           <listitem>
312             <para>
313               A list of strings.
314             </para>
315           </listitem>
316         </varlistentry>
317       </variablelist>
318     </refsect1>
319     <refsect1>
320       <title>Description</title>
321       <para>Returns a list of strings representing table names in
322       <parameter>database</parameter> which defaults to
323       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
324       is &nil; by default which means that only tables owned by users
325       are listed. If <parameter>owner</parameter> is a string denoting
326       a user name, only tables owned by <parameter>owner</parameter>
327       are listed. If <parameter>owner</parameter> is
328       <symbol>:all</symbol> then all tables are listed.
329       </para>
330     </refsect1>
331     <refsect1>
332       <title>Examples</title>
333       <screen>
334 (list-tables :owner "fred")
335 => ("type_table" "type_bigint" "employee" "company" "addr" "ea_join" "big")
336
337 (list-tables :owner :all)
338 => ("pg_description" "pg_group" "pg_proc" "pg_rewrite" "pg_type" "pg_attribute"
339     "pg_class" "pg_inherits" "pg_index" "pg_operator" "pg_opclass" "pg_am"
340     "pg_amop" "pg_amproc" "pg_language" "pg_largeobject" "pg_aggregate"
341     "pg_trigger" "pg_listener" "pg_cast" "pg_namespace" "pg_shadow"
342     "pg_conversion" "pg_depend" "pg_attrdef" "pg_constraint" "pg_database"
343     "type_table" "type_bigint" "employee" "company" "pg_statistic" "addr"
344     "ea_join" "big")
345       </screen>
346     </refsect1>
347     <refsect1>
348       <title>Side Effects</title>
349       <para>
350         None. 
351       </para>
352     </refsect1>
353     <refsect1>
354       <title>Affected by</title>
355       <para>
356         <symbol>*default-database*</symbol>
357       </para> 
358     </refsect1>
359     <refsect1>
360       <title>Exceptional Situations</title>
361       <para>
362         None. 
363       </para>
364     </refsect1>
365     <refsect1>
366       <title>See Also</title>
367       <simplelist>
368         <member><link linkend="create-table"><function>create-table</function></link></member>
369         <member><link linkend="drop-table"><function>drop-table</function></link></member>
370         <member><link linkend="table-exists-p"><function>table-exists-p</function></link></member>
371       </simplelist>
372     </refsect1>
373     <refsect1>
374       <title>Notes</title>
375       <para>
376         None. 
377       </para>
378     </refsect1>
379   </refentry>
380
381   <refentry id="table-exists-p">
382     <refmeta>
383       <refentrytitle>TABLE-EXISTS-P</refentrytitle>
384     </refmeta>
385     <refnamediv>
386       <refname>TABLE-EXISTS-P</refname>
387       <refpurpose>Tests for the existence of a database table.</refpurpose>
388       <refclass>Function</refclass>
389     </refnamediv>
390     <refsect1>
391       <title>Syntax</title>
392       <synopsis>
393       <function>table-exists-p</function> <replaceable>name</replaceable> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
394     </refsect1>
395     <refsect1>
396       <title>Arguments and Values</title>
397       <variablelist>
398         <varlistentry>
399           <term><parameter>name</parameter></term>
400           <listitem>
401             <para>
402               The name of the table as a string, symbol or SQL expression. 
403             </para>
404           </listitem>
405         </varlistentry>
406         <varlistentry>
407           <term><parameter>owner</parameter></term>
408           <listitem>
409             <para>
410               A string, &nil; or <symbol>:all</symbol>. 
411             </para>
412           </listitem>
413         </varlistentry>
414         <varlistentry> 
415           <term><parameter>database</parameter></term>
416           <listitem>
417             <para>
418               A database object which defaults to
419               <symbol>*default-database*</symbol>.
420             </para>
421           </listitem>
422         </varlistentry>
423         <varlistentry> 
424           <term><parameter>result</parameter></term>
425           <listitem>
426             <para>
427               A Boolean. 
428             </para>
429           </listitem>
430         </varlistentry>
431       </variablelist>
432     </refsect1>
433     <refsect1>
434       <title>Description</title>
435       <para>Tests for the existence of an SQL table called
436       <parameter>name</parameter> in <parameter>database</parameter>
437       which defaults to <symbol>*default-database*</symbol>.
438       <parameter>owner</parameter> is &nil; by default which means
439       that only tables owned by users are examined. If
440       <parameter>owner</parameter> is a string denoting a user name,
441       only tables owned by <parameter>owner</parameter> are
442       examined. If <parameter>owner</parameter> is
443       <symbol>:all</symbol> then all tables are examined.
444       </para>
445     </refsect1>
446     <refsect1>
447       <title>Examples</title>
448       <screen>
449 (table-exists-p [foo])
450 => T
451       </screen>
452     </refsect1>
453     <refsect1>
454       <title>Side Effects</title>
455       <para>
456         None. 
457       </para>
458     </refsect1>
459     <refsect1>
460       <title>Affected by</title>
461       <para>
462         <symbol>*default-database*</symbol>
463       </para> 
464     </refsect1>
465     <refsect1>
466       <title>Exceptional Situations</title>
467       <para>
468         None. 
469       </para>
470     </refsect1>
471     <refsect1>
472       <title>See Also</title>
473       <simplelist>
474         <member><link linkend="create-table"><function>create-table</function></link></member>
475         <member><link linkend="drop-table"><function>drop-table</function></link></member>
476         <member><link linkend="list-tables"><function>list-tables</function></link></member>
477       </simplelist>
478     </refsect1>
479     <refsect1>
480       <title>Notes</title>
481       <para>
482         None. 
483       </para>
484     </refsect1>
485   </refentry>
486
487   <refentry id="create-view">
488     <refmeta>
489       <refentrytitle>CREATE-VIEW</refentrytitle>
490     </refmeta>
491     <refnamediv>
492       <refname>CREATE-VIEW</refname>
493       <refpurpose>Create a database view.</refpurpose>
494       <refclass>Function</refclass>
495     </refnamediv>
496     <refsect1>
497       <title>Syntax</title>
498       <synopsis>
499       <function>create-view</function> <replaceable>name</replaceable> &amp;key <replaceable>as</replaceable> <replaceable>column-list</replaceable> <replaceable>with-check-option</replaceable> <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
500     </refsect1>
501     <refsect1>
502       <title>Arguments and Values</title>
503       <variablelist>
504         <varlistentry>
505           <term><parameter>name</parameter></term>
506           <listitem>
507             <para>
508               The name of the view as a string, symbol or SQL expression. 
509             </para>
510           </listitem>
511         </varlistentry>
512         <varlistentry> 
513           <term><parameter>database</parameter></term>
514           <listitem>
515             <para>
516               A database object which defaults to
517               <symbol>*default-database*</symbol>.
518             </para>
519           </listitem>
520         </varlistentry>
521         <varlistentry>
522           <term><parameter>as</parameter></term>
523           <listitem>
524             <para>
525               A symbolic SQL query expression. 
526             </para>
527           </listitem>
528         </varlistentry>
529         <varlistentry>
530           <term><parameter>column-list</parameter></term>
531           <listitem>
532             <para>
533               A list. 
534             </para>
535           </listitem>
536         </varlistentry>
537         <varlistentry>
538           <term><parameter>with-check-option</parameter></term>
539           <listitem>
540             <para>
541               A Boolean. 
542             </para>
543           </listitem>
544         </varlistentry>
545       </variablelist>
546     </refsect1>
547     <refsect1>
548       <title>Description</title>
549       <para>Creates a view called <parameter>name</parameter> in
550       <parameter>database</parameter> which defaults to
551       <symbol>*default-database*</symbol>. The view is created using
552       the query <parameter>as</parameter> and the columns of the view
553       may be specified using the <parameter>column-list</parameter>
554       parameter. The <parameter>with-check-option</parameter> is &nil;
555       by default but if it has a non-&nil; value, then all
556       insert/update commands on the view are checked to ensure that
557       the new data satisfy the query <parameter>as</parameter>.
558       </para>
559     </refsect1>
560     <refsect1>
561       <title>Examples</title>
562       <screen>
563 (create-view [lenins-group]
564              :as [select [first-name] [last-name] [email]
565                          :from [employee]
566                          :where [= [managerid] 1]])
567 => 
568
569 (select [*] :from [lenins-group])
570 => (("Josef" "Stalin" "stalin@soviet.org") 
571     ("Leon" "Trotsky" "trotsky@soviet.org")
572     ("Nikita" "Kruschev" "kruschev@soviet.org")
573     ("Leonid" "Brezhnev" "brezhnev@soviet.org")
574     ("Yuri" "Andropov" "andropov@soviet.org")
575     ("Konstantin" "Chernenko" "chernenko@soviet.org")
576     ("Mikhail" "Gorbachev" "gorbachev@soviet.org")
577     ("Boris" "Yeltsin" "yeltsin@soviet.org")
578     ("Vladimir" "Putin" "putin@soviet.org")), 
579    ("first_name" "last_name" "email")
580       </screen>
581     </refsect1>
582     <refsect1>
583       <title>Side Effects</title>
584       <para>
585         A view is created in <parameter>database</parameter>. 
586       </para>
587     </refsect1>
588     <refsect1>
589       <title>Affected by</title>
590       <para>
591         <symbol>*default-database*</symbol>
592       </para>
593     </refsect1>
594     <refsect1>
595       <title>Exceptional Situations</title>
596       <para>
597         An error is signalled if <parameter>name</parameter> is not a
598         string, symbol or SQL expression. An error of type
599         <symbol>sql-database-data-error</symbol> is signalled if a
600         relation called <parameter>name</parameter> already exists.
601       </para>
602     </refsect1>
603     <refsect1>
604       <title>See Also</title>
605       <simplelist>
606         <member><link linkend="drop-view"><function>drop-view</function></link></member>
607         <member><link linkend="list-views"><function>list-views</function></link></member>
608         <member><link linkend="view-exists-p"><function>view-exists-p</function></link></member>
609       </simplelist>
610     </refsect1>
611     <refsect1>
612       <title>Notes</title>
613       <para>
614         None. 
615       </para>
616     </refsect1>
617   </refentry>
618
619   <refentry id="drop-view">
620     <refmeta>
621       <refentrytitle>DROP-VIEW</refentrytitle>
622     </refmeta>
623     <refnamediv>
624       <refname>DROP-VIEW</refname>
625       <refpurpose>Drops a database view.</refpurpose>
626       <refclass>Function</refclass>
627     </refnamediv>
628     <refsect1>
629       <title>Syntax</title>
630       <synopsis>
631       <function>drop-view</function> <replaceable>name</replaceable> &amp;key <replaceable>if-does-not-exist</replaceable> <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
632     </refsect1>
633     <refsect1>
634       <title>Arguments and Values</title>
635       <variablelist>
636         <varlistentry>
637           <term><parameter>name</parameter></term>
638           <listitem>
639             <para>
640               The name of the view as a string, symbol or SQL expression. 
641             </para>
642           </listitem>
643         </varlistentry>
644         <varlistentry> 
645           <term><parameter>database</parameter></term>
646           <listitem>
647             <para>
648               A database object which defaults to
649               <symbol>*default-database*</symbol>.
650             </para>
651           </listitem>
652         </varlistentry>
653         <varlistentry> 
654           <term><parameter>if-does-not-exist</parameter></term>
655           <listitem>
656             <para>
657               A symbol. Meaningful values are <symbol>:ignore</symbol>
658               or <symbol>:error</symbol> (the default). 
659             </para>
660           </listitem>
661         </varlistentry>
662       </variablelist>
663     </refsect1>
664     <refsect1>
665       <title>Description</title>
666       <para>Drops the view called <parameter>name</parameter> from
667       <parameter>database</parameter> which defaults to
668       <symbol>*default-database*</symbol>. If the view does not exist
669       and <parameter>if-does-not-exist</parameter> is
670       <symbol>:ignore</symbol> then <function>drop-view</function>
671       returns &nil; whereas an error is signalled if
672       <parameter>if-does-not-exist</parameter> is
673       <symbol>:error</symbol>.
674       </para>
675     </refsect1>
676     <refsect1>
677       <title>Examples</title>
678       <screen>
679 (view-exists-p [foo])
680 => T
681 (drop-view [foo] :if-does-not-exist :ignore)
682 => 
683 (view-exists-p [foo])
684 => NIL        
685       </screen>
686     </refsect1>
687     <refsect1>
688       <title>Side Effects</title>
689       <para>
690         A view is dropped <parameter>database</parameter>. 
691       </para>
692     </refsect1>
693     <refsect1>
694       <title>Affected by</title>
695       <para>
696         <symbol>*default-database*</symbol>
697       </para> 
698     </refsect1>
699     <refsect1>
700       <title>Exceptional Situations</title>
701       <para>
702         An error is signalled if <parameter>name</parameter> is not a
703         string, symbol or SQL expression. An error of type
704         <symbol>sql-database-data-error</symbol> is signalled if
705         <parameter>name</parameter> doesn't exist and
706         <parameter>if-does-not-exist</parameter> has a value of
707         <symbol>:error</symbol>.
708       </para>
709     </refsect1>
710     <refsect1>
711       <title>See Also</title>
712       <simplelist>
713         <member><link linkend="create-view"><function>create-view</function></link></member>
714         <member><link linkend="list-views"><function>list-views</function></link></member>
715         <member><link linkend="view-exists-p"><function>view-exists-p</function></link></member>
716       </simplelist>
717     </refsect1>
718     <refsect1>
719       <title>Notes</title>
720       <para>
721         The <parameter>if-does-not-exist</parameter> keyword argument
722         to <function>drop-view</function> is a &clsql; extension.
723       </para>
724     </refsect1>
725   </refentry>
726
727   <refentry id="list-views">
728     <refmeta>
729       <refentrytitle>LIST-VIEWS</refentrytitle>
730     </refmeta>
731     <refnamediv>
732       <refname>LIST-VIEWS</refname>
733       <refpurpose>Returns a list of database views.</refpurpose>
734       <refclass>Function</refclass>
735     </refnamediv>
736     <refsect1>
737       <title>Syntax</title>
738       <synopsis>
739       <function>list-views</function> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
740     </refsect1>
741     <refsect1>
742       <title>Arguments and Values</title>
743       <variablelist>
744         <varlistentry>
745           <term><parameter>owner</parameter></term>
746           <listitem>
747             <para>
748               A string, &nil; or <symbol>:all</symbol>. 
749             </para>
750           </listitem>
751         </varlistentry>
752         <varlistentry> 
753           <term><parameter>database</parameter></term>
754           <listitem>
755             <para>
756               A database object which defaults to
757               <symbol>*default-database*</symbol>.
758             </para>
759           </listitem>
760         </varlistentry>
761         <varlistentry> 
762           <term><parameter>result</parameter></term>
763           <listitem>
764             <para>
765               A list of strings.
766             </para>
767           </listitem>
768         </varlistentry>
769       </variablelist>
770     </refsect1>
771     <refsect1>
772       <title>Description</title>
773       <para>Returns a list of strings representing view names in
774       <parameter>database</parameter> which defaults to
775       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
776       is &nil; by default which means that only views owned by users
777       are listed. If <parameter>owner</parameter> is a string denoting
778       a user name, only views owned by <parameter>owner</parameter>
779       are listed. If <parameter>owner</parameter> is
780       <symbol>:all</symbol> then all views are listed.
781       </para>
782     </refsect1>
783     <refsect1>
784       <title>Examples</title>
785       <screen>
786 (list-views :owner "fred")
787 => ("lenins_group")
788
789 (list-views :owner :all)
790 => ("pg_user" "pg_rules" "pg_views" "pg_tables" "pg_indexes" "pg_stats"
791     "pg_stat_all_tables" "pg_stat_sys_tables" "pg_stat_user_tables"
792     "pg_statio_all_tables" "pg_statio_sys_tables" "pg_statio_user_tables"
793     "pg_stat_all_indexes" "pg_stat_sys_indexes" "pg_stat_user_indexes"
794     "pg_statio_all_indexes" "pg_statio_sys_indexes" "pg_statio_user_indexes"
795     "pg_statio_all_sequences" "pg_statio_sys_sequences" 
796     "pg_statio_user_sequences" "pg_stat_activity" "pg_stat_database" 
797     "pg_locks" "pg_settings" "lenins_group")        
798       </screen>
799     </refsect1>
800     <refsect1>
801       <title>Side Effects</title>
802       <para>
803         None. 
804       </para>
805     </refsect1>
806     <refsect1>
807       <title>Affected by</title>
808       <para>
809         <symbol>*default-database*</symbol>
810       </para> 
811     </refsect1>
812     <refsect1>
813       <title>Exceptional Situations</title>
814       <para>
815         None. 
816       </para>
817     </refsect1>
818     <refsect1>
819       <title>See Also</title>
820       <simplelist>
821         <member><link linkend="create-view"><function>create-view</function></link></member>
822         <member><link linkend="drop-view"><function>drop-view</function></link></member>
823         <member><link linkend="view-exists-p"><function>view-exists-p</function></link></member>
824       </simplelist>
825     </refsect1>
826     <refsect1>
827       <title>Notes</title>
828       <para>
829         <function>list-views</function> is a &clsql; extension. 
830       </para>
831     </refsect1>
832   </refentry>
833
834   <refentry id="view-exists-p">
835     <refmeta>
836       <refentrytitle>VIEW-EXISTS-P</refentrytitle>
837     </refmeta>
838     <refnamediv>
839       <refname>VIEW-EXISTS-P</refname>
840       <refpurpose>Tests for the existence of a database view.</refpurpose>
841       <refclass>Function</refclass>
842     </refnamediv>
843     <refsect1>
844       <title>Syntax</title>
845       <synopsis>
846       <function>view-exists-p</function> <replaceable>name</replaceable> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
847     </refsect1>
848     <refsect1>
849       <title>Arguments and Values</title>
850       <variablelist>
851         <varlistentry>
852           <term><parameter>name</parameter></term>
853           <listitem>
854             <para>
855               The name of the view as a string, symbol or SQL expression. 
856             </para>
857           </listitem>
858         </varlistentry>
859         <varlistentry>
860           <term><parameter>owner</parameter></term>
861           <listitem>
862             <para>
863               A string, &nil; or <symbol>:all</symbol>. 
864             </para>
865           </listitem>
866         </varlistentry>
867         <varlistentry> 
868           <term><parameter>database</parameter></term>
869           <listitem>
870             <para>
871               A database object which defaults to
872               <symbol>*default-database*</symbol>.
873             </para>
874           </listitem>
875         </varlistentry>
876         <varlistentry> 
877           <term><parameter>result</parameter></term>
878           <listitem>
879             <para>
880               A Boolean. 
881             </para>
882           </listitem>
883         </varlistentry>
884       </variablelist>
885     </refsect1>
886     <refsect1>
887       <title>Description</title>
888       <para>Tests for the existence of an SQL view called
889       <parameter>name</parameter> in <parameter>database</parameter>
890       which defaults to <symbol>*default-database*</symbol>.
891       <parameter>owner</parameter> is &nil; by default which means
892       that only views owned by users are examined. If
893       <parameter>owner</parameter> is a string denoting a user name,
894       only views owned by <parameter>owner</parameter> are
895       examined. If <parameter>owner</parameter> is
896       <symbol>:all</symbol> then all views are examined.
897       </para>
898     </refsect1>
899     <refsect1>
900       <title>Examples</title>
901       <screen>
902 (view-exists-p [lenins-group])
903 => T
904       </screen>
905     </refsect1>
906     <refsect1>
907       <title>Side Effects</title>
908       <para>
909         None. 
910       </para>
911     </refsect1>
912     <refsect1>
913       <title>Affected by</title>
914       <para>
915         <symbol>*default-database*</symbol>
916       </para> 
917     </refsect1>
918     <refsect1>
919       <title>Exceptional Situations</title>
920       <para>
921         None. 
922       </para>
923     </refsect1>
924     <refsect1>
925       <title>See Also</title>
926       <simplelist>
927         <member><link linkend="create-view"><function>create-view</function></link></member>
928         <member><link linkend="drop-view"><function>drop-view</function></link></member>
929         <member><link linkend="list-views"><function>list-views</function></link></member>
930       </simplelist>
931     </refsect1>
932     <refsect1>
933       <title>Notes</title>
934       <para>
935         <function>view-exists-p</function> is a &clsql; extension.  
936       </para>
937     </refsect1>
938   </refentry>
939
940   <refentry id="create-index">
941     <refmeta>
942       <refentrytitle>CREATE-INDEX</refentrytitle>
943     </refmeta>
944     <refnamediv>
945       <refname>CREATE-INDEX</refname>
946       <refpurpose>Create a database index.</refpurpose>
947       <refclass>Function</refclass>
948     </refnamediv>
949     <refsect1>
950       <title>Syntax</title>
951       <synopsis>
952       <function>create-index</function> <replaceable>name</replaceable> &amp;key <replaceable>on</replaceable> <replaceable>unique</replaceable> <replaceable>attributes</replaceable> <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
953     </refsect1>
954     <refsect1>
955       <title>Arguments and Values</title>
956       <variablelist>
957         <varlistentry>
958           <term><parameter>name</parameter></term>
959           <listitem>
960             <para>
961               The name of the index as a string, symbol or SQL expression. 
962             </para>
963           </listitem>
964         </varlistentry>
965         <varlistentry>
966           <term><parameter>on</parameter></term>
967           <listitem>
968             <para>
969               The name of a table as a string, symbol or SQL expression. 
970             </para>
971           </listitem>
972         </varlistentry>
973         <varlistentry>
974           <term><parameter>unique</parameter></term>
975           <listitem>
976             <para>
977               A Boolean. 
978             </para>
979           </listitem>
980         </varlistentry>
981         <varlistentry>
982           <term><parameter>attributes</parameter></term>
983           <listitem>
984             <para>
985               A list of attribute names. 
986             </para>
987           </listitem>
988         </varlistentry>
989         <varlistentry> 
990           <term><parameter>database</parameter></term>
991           <listitem>
992             <para>
993               A database object which defaults to
994               <symbol>*default-database*</symbol>.
995             </para>
996           </listitem>
997         </varlistentry>
998       </variablelist>
999     </refsect1>
1000     <refsect1>
1001       <title>Description</title>
1002       <para>Creates an index called <parameter>name</parameter> on the
1003       table specified by <parameter>on</parameter> in
1004       <parameter>database</parameter> which default to
1005       <symbol>*default-database*</symbol>. The table attributes to use
1006       in constructing the index <parameter>name</parameter> are
1007       specified by <parameter>attributes</parameter>. The
1008       <parameter>unique</parameter> argument is &nil; by default but
1009       if it has a non-&nil; value then the indexed attributes must
1010       have unique values.
1011       </para>
1012     </refsect1>
1013     <refsect1>
1014       <title>Examples</title>
1015       <screen>
1016 (create-index [bar] :on [employee] 
1017               :attributes '([first-name] [last-name] [email]) 
1018               :unique t)
1019 => 
1020
1021 (index-exists-p [bar])
1022 => T
1023       </screen>
1024     </refsect1>
1025     <refsect1>
1026       <title>Side Effects</title>
1027       <para>
1028         An index is created in <parameter>database</parameter>. 
1029       </para>
1030     </refsect1>
1031     <refsect1>
1032       <title>Affected by</title>
1033       <para>
1034         <symbol>*default-database*</symbol>
1035       </para>
1036     </refsect1>
1037     <refsect1>
1038       <title>Exceptional Situations</title>
1039       <para>
1040         An error is signalled if <parameter>name</parameter> is not a
1041         string, symbol or SQL expression. An error of type
1042         <symbol>sql-database-data-error</symbol> is signalled if a
1043         relation called <parameter>name</parameter> already exists.
1044       </para>
1045     </refsect1>
1046     <refsect1>
1047       <title>See Also</title>
1048       <simplelist>
1049         <member><link linkend="drop-index"><function>drop-index</function></link></member>
1050         <member><link linkend="list-indexes"><function>list-indexes</function></link></member>
1051         <member><link linkend="index-exists-p"><function>index-exists-p</function></link></member>
1052       </simplelist>
1053     </refsect1>
1054     <refsect1>
1055       <title>Notes</title>
1056       <para>
1057         None. 
1058       </para>
1059     </refsect1>
1060   </refentry>
1061
1062   <refentry id="drop-index">
1063     <refmeta>
1064       <refentrytitle>DROP-INDEX</refentrytitle>
1065     </refmeta>
1066     <refnamediv>
1067       <refname>DROP-INDEX</refname>
1068       <refpurpose>Drop a database index.</refpurpose>
1069       <refclass>Function</refclass>
1070     </refnamediv>
1071     <refsect1>
1072       <title>Syntax</title>
1073       <synopsis>
1074       <function>drop-index</function> <replaceable>name</replaceable> &amp;key <replaceable>if-does-not-exist</replaceable> <replaceable>on</replaceable> <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
1075     </refsect1>
1076     <refsect1>
1077       <title>Arguments and Values</title>
1078       <variablelist>
1079         <varlistentry>
1080           <term><parameter>name</parameter></term>
1081           <listitem>
1082             <para>
1083               The name of the index as a string, symbol or SQL expression. 
1084             </para>
1085           </listitem>
1086         </varlistentry>
1087         <varlistentry>
1088           <term><parameter>on</parameter></term>
1089           <listitem>
1090             <para>
1091               The name of a table as a string, symbol or SQL
1092               expression.
1093             </para>
1094           </listitem>
1095         </varlistentry>
1096         <varlistentry> 
1097           <term><parameter>database</parameter></term>
1098           <listitem>
1099             <para>
1100               A database object which defaults to
1101               <symbol>*default-database*</symbol>.
1102             </para>
1103           </listitem>
1104         </varlistentry>
1105         <varlistentry> 
1106           <term><parameter>if-does-not-exist</parameter></term>
1107           <listitem>
1108             <para>
1109               A symbol. Meaningful values are <symbol>:ignore</symbol>
1110               or <symbol>:error</symbol> (the default). 
1111             </para>
1112           </listitem>
1113         </varlistentry>
1114       </variablelist>
1115     </refsect1>
1116     <refsect1>
1117       <title>Description</title>
1118       <para>Drops the index called <parameter>name</parameter> in
1119       <parameter>database</parameter> which defaults to
1120       <symbol>*default-database*</symbol>. If the index does not exist
1121       and <parameter>if-does-not-exist</parameter> is
1122       <symbol>:ignore</symbol> then <parameter>drop-index</parameter>
1123       returns &nil; whereas an error is signalled if
1124       <parameter>if-does-not-exist</parameter> is
1125       <symbol>:error</symbol>. 
1126       </para> 
1127       <para> 
1128         The argument <parameter>on</parameter> allows the optional
1129         specification of a table to drop the index from. This is
1130         required for compatability with MySQL.
1131       </para>
1132     </refsect1>
1133     <refsect1>
1134       <title>Examples</title>
1135       <screen>
1136 (index-exists-p [foo])
1137 => T
1138 (drop-index [foo] :if-does-not-exist :ignore)
1139 => 
1140 (index-exists-p [foo])
1141 => NIL        
1142       </screen>
1143     </refsect1>
1144     <refsect1>
1145       <title>Side Effects</title>
1146       <para>
1147         An index is dropped in <parameter>database</parameter>. 
1148       </para>
1149     </refsect1>
1150     <refsect1>
1151       <title>Affected by</title>
1152       <para>
1153         <symbol>*default-database*</symbol>
1154       </para> 
1155     </refsect1>
1156     <refsect1>
1157       <title>Exceptional Situations</title>
1158       <para>
1159         An error is signalled if <parameter>name</parameter> is not a
1160         string, symbol or SQL expression. An error of type
1161         <symbol>sql-database-data-error</symbol> is signalled if
1162         <parameter>name</parameter> doesn't exist and
1163         <parameter>if-does-not-exist</parameter> has a value of
1164         <symbol>:error</symbol>.
1165       </para>
1166     </refsect1>
1167     <refsect1>
1168       <title>See Also</title>
1169       <simplelist>
1170         <member><link linkend="create-index"><function>create-index</function></link></member>
1171         <member><link linkend="list-indexes"><function>list-indexes</function></link></member>
1172         <member><link linkend="index-exists-p"><function>index-exists-p</function></link></member>
1173       </simplelist>
1174     </refsect1>
1175     <refsect1>
1176       <title>Notes</title>
1177       <para>
1178         The <parameter>if-does-not-exist</parameter> and
1179         <parameter>on</parameter> keyword arguments to
1180         <function>drop-index</function> are &clsql; extensions.  The
1181         keyword argument <parameter>on</parameter> is provided for
1182         compatibility with MySQL.
1183       </para>
1184     </refsect1>
1185   </refentry>
1186
1187   <refentry id="list-indexes">
1188     <refmeta>
1189       <refentrytitle>LIST-INDEXES</refentrytitle>
1190     </refmeta>
1191     <refnamediv>
1192       <refname>LIST-INDEXES</refname>
1193       <refpurpose>Returns a list of database indexes.</refpurpose>
1194       <refclass>Function</refclass>
1195     </refnamediv>
1196     <refsect1>
1197       <title>Syntax</title>
1198       <synopsis>
1199       <function>list-indexes</function> &amp;key <replaceable>on</replaceable><replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
1200     </refsect1>
1201     <refsect1>
1202       <title>Arguments and Values</title>
1203       <variablelist>
1204         <varlistentry>
1205           <term><parameter>owner</parameter></term>
1206           <listitem>
1207             <para>
1208               A string, &nil; or <symbol>:all</symbol>. 
1209             </para>
1210           </listitem>
1211         </varlistentry>
1212         <varlistentry> 
1213           <term><parameter>database</parameter></term>
1214           <listitem>
1215             <para>
1216               A database object which defaults to
1217               <symbol>*default-database*</symbol>.
1218             </para>
1219           </listitem>
1220         </varlistentry>
1221         <varlistentry>
1222           <term><parameter>on</parameter></term>
1223           <listitem>
1224             <para>
1225               The name of a table as a string, symbol or SQL
1226               expression, a list of such names or &nil;.
1227             </para>
1228           </listitem>
1229         </varlistentry>
1230         <varlistentry> 
1231           <term><parameter>result</parameter></term>
1232           <listitem>
1233             <para>
1234               A list of strings.
1235             </para>
1236           </listitem>
1237         </varlistentry>
1238       </variablelist>
1239     </refsect1>
1240     <refsect1>
1241       <title>Description</title>
1242       <para>Returns a list of strings representing index names in
1243       <parameter>database</parameter> which defaults to
1244       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
1245       is &nil; by default which means that only indexes owned by users
1246       are listed. If <parameter>owner</parameter> is a string denoting
1247       a user name, only indexes owned by <parameter>owner</parameter>
1248       are listed. If <parameter>owner</parameter> is
1249       <symbol>:all</symbol> then all indexes are listed.
1250       </para>
1251       <para> 
1252          The keyword argument <parameter>on</parameter> limits the
1253          results to indexes on the specified tables. Meaningful values
1254          for <parameter>on</parameter> are &nil; (the default) which
1255          means that all tables are considered, a string, symbol or SQL
1256          expression representing a table name in
1257          <parameter>database</parameter> or a list of such table
1258          identifiers.
1259       </para>
1260     </refsect1>
1261     <refsect1>
1262       <title>Examples</title>
1263       <screen>
1264 (list-indexes)
1265 => ("employeepk" "companypk" "addrpk" "bar")        
1266
1267 (list-indexes :on '([addr] [company]))
1268 => ("addrpk" "companypk")
1269       </screen>
1270     </refsect1>
1271     <refsect1>
1272       <title>Side Effects</title>
1273       <para>
1274         None. 
1275       </para>
1276     </refsect1>
1277     <refsect1>
1278       <title>Affected by</title>
1279       <para>
1280         <symbol>*default-database*</symbol>
1281       </para> 
1282     </refsect1>
1283     <refsect1>
1284       <title>Exceptional Situations</title>
1285       <para>
1286         None. 
1287       </para>
1288     </refsect1>
1289     <refsect1>
1290       <title>See Also</title>
1291       <simplelist>
1292         <member><link linkend="create-index"><function>create-index</function></link></member>
1293         <member><link linkend="drop-index"><function>drop-index</function></link></member>
1294         <member><link linkend="index-exists-p"><function>index-exists-p</function></link></member>
1295       </simplelist>
1296     </refsect1>
1297     <refsect1>
1298       <title>Notes</title>
1299       <para>
1300         <function>list-indexes</function> is a &clsql; extension. 
1301       </para>
1302     </refsect1>
1303   </refentry>
1304
1305   <refentry id="index-exists-p">
1306     <refmeta>
1307       <refentrytitle>INDEX-EXISTS-P</refentrytitle>
1308     </refmeta>
1309     <refnamediv>
1310       <refname>INDEX-EXISTS-</refname>
1311       <refpurpose>Tests for the existence of a database index.</refpurpose>
1312       <refclass>Function</refclass>
1313     </refnamediv>
1314     <refsect1>
1315       <title>Syntax</title>
1316       <synopsis>
1317       <function>index-exists-p</function> <replaceable>name</replaceable> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
1318     </refsect1>
1319     <refsect1>
1320       <title>Arguments and Values</title>
1321       <variablelist>
1322         <varlistentry>
1323           <term><parameter>name</parameter></term>
1324           <listitem>
1325             <para>
1326               The name of the index as a string, symbol or SQL expression. 
1327             </para>
1328           </listitem>
1329         </varlistentry>
1330         <varlistentry>
1331           <term><parameter>owner</parameter></term>
1332           <listitem>
1333             <para>
1334               A string, &nil; or <symbol>:all</symbol>. 
1335             </para>
1336           </listitem>
1337         </varlistentry>
1338         <varlistentry> 
1339           <term><parameter>database</parameter></term>
1340           <listitem>
1341             <para>
1342               A database object which defaults to
1343               <symbol>*default-database*</symbol>.
1344             </para>
1345           </listitem>
1346         </varlistentry>
1347         <varlistentry> 
1348           <term><parameter>result</parameter></term>
1349           <listitem>
1350             <para>
1351               A Boolean. 
1352             </para>
1353           </listitem>
1354         </varlistentry>
1355       </variablelist>
1356     </refsect1>
1357     <refsect1>
1358       <title>Description</title>
1359       <para>Tests for the existence of an SQL index called
1360       <parameter>name</parameter> in <parameter>database</parameter>
1361       which defaults to
1362       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
1363       is &nil; by default which means that only indexes owned by users
1364       are examined. If <parameter>owner</parameter> is a string
1365       denoting a user name, only indexes owned by
1366       <parameter>owner</parameter> are examined. If
1367       <parameter>owner</parameter> is <symbol>:all</symbol> then all
1368       indexes are examined.
1369       </para>
1370     </refsect1>
1371     <refsect1>
1372       <title>Examples</title>
1373       <screen>
1374 (index-exists-p [bar])
1375 => T
1376       </screen>
1377     </refsect1>
1378     <refsect1>
1379       <title>Side Effects</title>
1380       <para>
1381         None. 
1382       </para>
1383     </refsect1>
1384     <refsect1>
1385       <title>Affected by</title>
1386       <para>
1387         <symbol>*default-database*</symbol>
1388       </para> 
1389     </refsect1>
1390     <refsect1>
1391       <title>Exceptional Situations</title>
1392       <para>
1393         None. 
1394       </para>
1395     </refsect1>
1396     <refsect1>
1397       <title>See Also</title>
1398       <simplelist>
1399         <member><link linkend="create-index"><function>create-index</function></link></member>
1400         <member><link linkend="drop-index"><function>drop-index</function></link></member>
1401         <member><link linkend="list-indexes"><function>list-indexes</function></link></member>
1402       </simplelist>
1403     </refsect1>
1404     <refsect1>
1405       <title>Notes</title>
1406       <para>
1407         <function>index-exists-p</function> is a &clsql; extension. 
1408       </para>
1409     </refsect1>
1410   </refentry>
1411
1412   <refentry id="attribute-type">
1413     <refmeta>
1414       <refentrytitle>ATTRIBUTE-TYPE</refentrytitle>
1415     </refmeta>
1416     <refnamediv>
1417       <refname>ATTRIBUTE-TYPE</refname>
1418       <refpurpose>Returns the type of the supplied attribute.</refpurpose>
1419       <refclass>Function</refclass>
1420     </refnamediv>
1421     <refsect1>
1422       <title>Syntax</title>
1423       <synopsis>
1424       <function>attribute-type attribute</function> <replaceable>table</replaceable> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>type</returnvalue>, <returnvalue>precision</returnvalue>, <returnvalue>scale</returnvalue>, <returnvalue>nulls-accepted</returnvalue></synopsis>
1425     </refsect1>
1426     <refsect1>
1427       <title>Arguments and Values</title>
1428       <variablelist>
1429         <varlistentry>
1430           <term><parameter>attribute</parameter></term>
1431           <listitem>
1432             <para>
1433               The name of the index as a string, symbol or SQL expression. 
1434             </para>
1435           </listitem>
1436         </varlistentry>
1437         <varlistentry>
1438           <term><parameter>table</parameter></term>
1439           <listitem>
1440             <para>
1441               The name of a table as a string, symbol or SQL expression. 
1442             </para>
1443           </listitem>
1444         </varlistentry>
1445         <varlistentry>
1446           <term><parameter>owner</parameter></term>
1447           <listitem>
1448             <para>
1449               A string, &nil; or <symbol>:all</symbol>. 
1450             </para>
1451           </listitem>
1452         </varlistentry>
1453         <varlistentry> 
1454           <term><parameter>database</parameter></term>
1455           <listitem>
1456             <para>
1457               A database object which defaults to
1458               <symbol>*default-database*</symbol>.
1459             </para>
1460           </listitem>
1461         </varlistentry>
1462         <varlistentry> 
1463           <term><parameter>type</parameter></term>
1464           <listitem>
1465             <para>
1466               A keyword symbol denoting a vendor-specific SQL type. 
1467             </para>
1468           </listitem>
1469         </varlistentry>
1470         <varlistentry> 
1471           <term><parameter>precision</parameter></term>
1472           <listitem>
1473             <para>
1474               An integer denoting the precision of the attribute type
1475               or &nil;.
1476             </para>
1477           </listitem>
1478         </varlistentry>
1479         <varlistentry> 
1480           <term><parameter>scale</parameter></term>
1481           <listitem>
1482             <para>
1483               An integer denoting the scale of the attribute type
1484               or &nil;.              
1485             </para>
1486           </listitem>
1487         </varlistentry> 
1488         <varlistentry> 
1489           <term><parameter>nulls-accepted</parameter></term>
1490           <listitem>
1491             <para>
1492               0 or 1. 
1493             </para>
1494           </listitem>
1495         </varlistentry>
1496       </variablelist>
1497     </refsect1>
1498     <refsect1>
1499       <title>Description</title>
1500       <para>Returns a keyword symbol representing the vendor-specific
1501       field type of the supplied attribute
1502       <parameter>attribute</parameter> in the table specified by
1503       <parameter>table</parameter> in <parameter>database</parameter>
1504       which defaults to
1505       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
1506       is &nil; by default which means that the attribute specified by
1507       <parameter>attribute</parameter>, if it exists, must be user
1508       owned else &nil; is returned. If <parameter>owner</parameter> is
1509       a string denoting a user name, the attribute, if it exists, must
1510       be owned by <parameter>owner</parameter> else &nil; is returned,
1511       whereas if <parameter>owner</parameter> is <symbol>:all</symbol>
1512       then the attribute, if it exists, will be returned regardless of
1513       its owner.
1514       </para>
1515
1516       <para>Other information is also returned. The second value is
1517       the type precision, the third is the scale and the fourth
1518       represents whether or not the attribute accepts null values (a
1519       value of 0) or not (a value of 1).
1520       </para> 
1521     </refsect1>
1522     <refsect1>
1523       <title>Examples</title>
1524       <screen>
1525 (attribute-type [emplid] [employee])
1526 => :INT4, 4, NIL, 0
1527       </screen>
1528     </refsect1>
1529     <refsect1>
1530       <title>Side Effects</title>
1531       <para>
1532         None. 
1533       </para>
1534     </refsect1>
1535     <refsect1>
1536       <title>Affected by</title>
1537       <para>
1538         <symbol>*default-database*</symbol>
1539       </para> 
1540     </refsect1>
1541     <refsect1>
1542       <title>Exceptional Situations</title>
1543       <para>
1544         None. 
1545       </para>
1546     </refsect1>
1547     <refsect1>
1548       <title>See Also</title>
1549       <simplelist>
1550         <member><link linkend="list-attributes"><function>list-attributes</function></link></member>
1551         <member><link linkend="list-attribute-types"><function>list-attribute-types</function></link></member>
1552       </simplelist>
1553     </refsect1>
1554     <refsect1>
1555       <title>Notes</title>
1556       <para>
1557         None. 
1558       </para>
1559     </refsect1>
1560   </refentry>
1561
1562   <refentry id="list-attribute-types">
1563     <refmeta>
1564       <refentrytitle>LIST-ATTRIBUTE-TYPES</refentrytitle>
1565     </refmeta>
1566     <refnamediv>
1567       <refname>LIST-ATTRIBUTE-TYPES</refname>
1568       <refpurpose>Returns information about the attribute types of a table.</refpurpose>
1569       <refclass>Function</refclass>
1570     </refnamediv>
1571     <refsect1>
1572       <title>Syntax</title>
1573       <synopsis>
1574       <function>list-attribute-types</function> <replaceable>table</replaceable> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
1575     </refsect1>
1576     <refsect1>
1577       <title>Arguments and Values</title>
1578       <variablelist>
1579         <varlistentry>
1580           <term><parameter>table</parameter></term>
1581           <listitem>
1582             <para>
1583               The name of a table as a string, symbol or SQL expression. 
1584             </para>
1585           </listitem>
1586         </varlistentry>
1587         <varlistentry>
1588           <term><parameter>owner</parameter></term>
1589           <listitem>
1590             <para>
1591               A string, &nil; or <symbol>:all</symbol>. 
1592             </para>
1593           </listitem>
1594         </varlistentry>
1595         <varlistentry> 
1596           <term><parameter>database</parameter></term>
1597           <listitem>
1598             <para>
1599               A database object which defaults to
1600               <symbol>*default-database*</symbol>.
1601             </para>
1602           </listitem>
1603         </varlistentry>
1604         <varlistentry> 
1605           <term><parameter>result</parameter></term>
1606           <listitem>
1607             <para>
1608               A list. 
1609             </para>
1610           </listitem>
1611         </varlistentry>
1612       </variablelist>
1613     </refsect1>
1614     <refsect1>
1615       <title>Description</title>
1616       <para>Returns a list containing information about the SQL types
1617       of each of the attributes in the table specified by
1618       <parameter>table</parameter> in <parameter>database</parameter>
1619       which has a default value of
1620       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
1621       is &nil; by default which means that only attributes owned by
1622       users are listed. If <parameter>owner</parameter> is a string
1623       denoting a user name, only attributes owned by
1624       <parameter>owner</parameter> are listed. If
1625       <parameter>owner</parameter> is <symbol>:all</symbol> then all
1626       attributes are listed. The elements of the returned list are
1627       lists where the first element is the name of the attribute, the
1628       second element is its SQL type, the third is the type precision,
1629       the fourth is the scale of the attribute and the fifth is 1 if
1630       the attribute accepts null values and otherwise 0.
1631       </para>
1632     </refsect1>
1633     <refsect1>
1634       <title>Examples</title>
1635       <screen>
1636 (list-attribute-types [employee])
1637 => (("emplid" :INT4 4 NIL 0) ("groupid" :INT4 4 NIL 0)
1638     ("first_name" :VARCHAR 30 NIL 1) ("last_name" :VARCHAR 30 NIL 1)
1639     ("email" :VARCHAR 100 NIL 1) ("ecompanyid" :INT4 4 NIL 1)
1640     ("managerid" :INT4 4 NIL 1) ("height" :FLOAT8 8 NIL 1)
1641     ("married" :BOOL 1 NIL 1) ("birthday" :TIMESTAMP 8 NIL 1)
1642     ("bd_utime" :INT8 8 NIL 1))        
1643       </screen>
1644     </refsect1>
1645     <refsect1>
1646       <title>Side Effects</title>
1647       <para>
1648         None. 
1649       </para>
1650     </refsect1>
1651     <refsect1>
1652       <title>Affected by</title>
1653       <para>
1654         <symbol>*default-database*</symbol>
1655       </para> 
1656     </refsect1>
1657     <refsect1>
1658       <title>Exceptional Situations</title>
1659       <para>
1660         None. 
1661       </para>
1662     </refsect1>
1663     <refsect1>
1664       <title>See Also</title>
1665       <simplelist>
1666         <member><link linkend="attribute-type"><function>attribute-type</function></link></member>
1667         <member><link linkend="list-attribute-types"><function>list-attribute-types</function></link></member>
1668       </simplelist>
1669     </refsect1>
1670     <refsect1>
1671       <title>Notes</title>
1672       <para>
1673         None. 
1674       </para>
1675     </refsect1>
1676   </refentry>
1677
1678   <refentry id="list-attributes">
1679     <refmeta>
1680       <refentrytitle>LIST-ATTRIBUTES</refentrytitle>
1681     </refmeta>
1682     <refnamediv>
1683       <refname>LIST-ATTRIBUTES</refname>
1684       <refpurpose>Returns the attributes of a table as a list.</refpurpose>
1685       <refclass>Function</refclass>
1686     </refnamediv>
1687     <refsect1>
1688       <title>Syntax</title>
1689       <synopsis>
1690       <function>list-attributes</function> <replaceable>name</replaceable> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
1691     </refsect1>
1692     <refsect1>
1693       <title>Arguments and Values</title>
1694       <variablelist>
1695         <varlistentry>
1696           <term><parameter>name</parameter></term>
1697           <listitem>
1698             <para>
1699               The name of a table as a string, symbol or SQL expression. 
1700             </para>
1701           </listitem>
1702         </varlistentry>
1703         <varlistentry>
1704           <term><parameter>owner</parameter></term>
1705           <listitem>
1706             <para>
1707               A string, &nil; or <symbol>:all</symbol>. 
1708             </para>
1709           </listitem>
1710         </varlistentry>
1711         <varlistentry> 
1712           <term><parameter>database</parameter></term>
1713           <listitem>
1714             <para>
1715               A database object which defaults to
1716               <symbol>*default-database*</symbol>.
1717             </para>
1718           </listitem>
1719         </varlistentry>
1720         <varlistentry> 
1721           <term><parameter>result</parameter></term>
1722           <listitem>
1723             <para>
1724               A list. 
1725             </para>
1726           </listitem>
1727         </varlistentry>
1728       </variablelist>
1729     </refsect1>
1730     <refsect1>
1731       <title>Description</title>
1732       <para>Returns a list of strings representing the attributes of
1733       table <parameter>name</parameter> in
1734       <parameter>database</parameter> which defaults to
1735       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
1736       is &nil; by default which means that only attributes owned by
1737       users are listed. If <parameter>owner</parameter> is a string
1738       denoting a user name, only attributes owned by
1739       <parameter>owner</parameter> are listed. If
1740       <parameter>owner</parameter> is <symbol>:all</symbol> then all
1741       attributes are listed.
1742       </para>
1743     </refsect1>
1744     <refsect1>
1745       <title>Examples</title>
1746       <screen>
1747 (list-attributes [employee])
1748 => ("emplid" "groupid" "first_name" "last_name" "email" "ecompanyid" "managerid"
1749     "height" "married" "birthday" "bd_utime")      
1750       </screen>
1751     </refsect1>
1752     <refsect1>
1753       <title>Side Effects</title>
1754       <para>
1755         None. 
1756       </para>
1757     </refsect1>
1758     <refsect1>
1759       <title>Affected by</title>
1760       <para>
1761         <symbol>*default-database*</symbol>
1762       </para> 
1763     </refsect1>
1764     <refsect1>
1765       <title>Exceptional Situations</title>
1766       <para>
1767         None. 
1768       </para>
1769     </refsect1>
1770     <refsect1>
1771       <title>See Also</title>
1772       <simplelist>
1773         <member><link linkend="attribute-type"><function>attribute-type</function></link></member>
1774         <member><link linkend="list-attribute-types"><function>list-attribute-types</function></link></member>
1775       </simplelist>
1776     </refsect1>
1777     <refsect1>
1778       <title>Notes</title>
1779       <para>
1780         None. 
1781       </para>
1782     </refsect1>
1783   </refentry>
1784
1785   <refentry id="create-sequence">
1786     <refmeta>
1787       <refentrytitle>CREATE-SEQUENCE</refentrytitle>
1788     </refmeta>
1789     <refnamediv>
1790       <refname>CREATE-SEQUENCE</refname>
1791       <refpurpose>Create a database sequence.</refpurpose>
1792       <refclass>Function</refclass>
1793     </refnamediv>
1794     <refsect1>
1795       <title>Syntax</title>
1796       <synopsis>
1797       <function>create-sequence</function> <replaceable>name</replaceable> &amp;key <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
1798     </refsect1>
1799     <refsect1>
1800       <title>Arguments and Values</title>
1801       <variablelist>
1802         <varlistentry>
1803           <term><parameter>name</parameter></term>
1804           <listitem>
1805             <para>
1806               The name of the sequence as a string, symbol or SQL expression. 
1807             </para>
1808           </listitem>
1809         </varlistentry>
1810         <varlistentry> 
1811           <term><parameter>database</parameter></term>
1812           <listitem>
1813             <para>
1814               A database object which defaults to
1815               <symbol>*default-database*</symbol>.
1816             </para>
1817           </listitem>
1818         </varlistentry>
1819       </variablelist>
1820     </refsect1>
1821     <refsect1>
1822       <title>Description</title>
1823       <para>Creates a sequence called <parameter>name</parameter> in
1824       <parameter>database</parameter> which defaults to
1825       <symbol>*default-database*</symbol>.
1826       </para>
1827     </refsect1>
1828     <refsect1>
1829       <title>Examples</title>
1830       <screen>
1831 (create-sequence [foo])
1832 => 
1833 (sequence-exists-p [foo])
1834 => T        
1835       </screen>
1836     </refsect1>
1837     <refsect1>
1838       <title>Side Effects</title>
1839       <para>
1840         A sequence is created in <parameter>database</parameter>. 
1841       </para>
1842     </refsect1>
1843     <refsect1>
1844       <title>Affected by</title>
1845       <para>
1846         <symbol>*default-database*</symbol>
1847       </para>
1848     </refsect1>
1849     <refsect1>
1850       <title>Exceptional Situations</title>
1851       <para>
1852         An error is signalled if <parameter>name</parameter> is not a
1853         string, symbol or SQL expression. An error of type
1854         <symbol>sql-database-data-error</symbol> is signalled if a
1855         relation called <parameter>name</parameter> already exists.
1856       </para>
1857     </refsect1>
1858     <refsect1>
1859       <title>See Also</title>
1860       <simplelist>
1861         <member><link linkend="drop-sequence"><function>drop-sequence</function></link></member>
1862         <member><link linkend="list-sequences"><function>list-sequences</function></link></member>
1863         <member><link linkend="sequence-exists-p"><function>sequence-exists-p</function></link></member>
1864         <member><link linkend="sequence-last"><function>sequence-last</function></link></member>
1865         <member><link linkend="sequence-next"><function>sequence-next</function></link></member>
1866         <member><link linkend="set-sequence-position"><function>set-sequence-position</function></link></member>
1867       </simplelist>
1868     </refsect1>
1869     <refsect1>
1870       <title>Notes</title>
1871       <para>
1872         <function>create-sequence</function> is a &clsql; extension. 
1873       </para>
1874     </refsect1>
1875   </refentry>
1876
1877   <refentry id="drop-sequence">
1878     <refmeta>
1879       <refentrytitle>DROP-SEQUENCE</refentrytitle>
1880     </refmeta>
1881     <refnamediv>
1882       <refname>DROP-SEQUENCE</refname>
1883       <refpurpose>Drop a database sequence.</refpurpose>
1884       <refclass>Function</refclass>
1885     </refnamediv>
1886     <refsect1>
1887       <title>Syntax</title>
1888       <synopsis>
1889       <function>drop-sequence</function> <replaceable>name</replaceable> &amp;key <replaceable>if-does-not-exist</replaceable> <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
1890     </refsect1>
1891     <refsect1>
1892       <title>Arguments and Values</title>
1893       <variablelist>
1894         <varlistentry>
1895           <term><parameter>name</parameter></term>
1896           <listitem>
1897             <para>
1898               The name of the sequence as a string, symbol or SQL expression. 
1899             </para>
1900           </listitem>
1901         </varlistentry>
1902         <varlistentry> 
1903           <term><parameter>database</parameter></term>
1904           <listitem>
1905             <para>
1906               A database object which defaults to
1907               <symbol>*default-database*</symbol>.
1908             </para>
1909           </listitem>
1910         </varlistentry>
1911         <varlistentry> 
1912           <term><parameter>if-does-not-exist</parameter></term>
1913           <listitem>
1914             <para>
1915               A symbol. Meaningful values are <symbol>:ignore</symbol>
1916               or <symbol>:error</symbol> (the default). 
1917             </para>
1918           </listitem>
1919         </varlistentry>
1920       </variablelist>
1921     </refsect1>
1922     <refsect1>
1923       <title>Description</title>
1924       <para>Drops the sequence called <parameter>name</parameter> from
1925       <parameter>database</parameter> which defaults to
1926       <symbol>*default-database*</symbol>. If the sequence does not
1927       exist and <parameter>if-does-not-exist</parameter> is
1928       <symbol>:ignore</symbol> then
1929       <parameter>drop-sequence</parameter> returns &nil; whereas an
1930       error is signalled if <parameter>if-does-not-exist</parameter>
1931       is <symbol>:error</symbol>.
1932       </para>
1933     </refsect1>
1934     <refsect1>
1935       <title>Examples</title>
1936       <screen>
1937 (sequence-exists-p [foo])
1938 => T
1939 (drop-sequence [foo] :if-does-not-exist :ignore)
1940 => 
1941 (sequence-exists-p [foo])
1942 => NIL        
1943       </screen>
1944     </refsect1>
1945     <refsect1>
1946       <title>Side Effects</title>
1947       <para>
1948         A sequence is dropped from <parameter>database</parameter>.  
1949       </para>
1950     </refsect1>
1951     <refsect1>
1952       <title>Affected by</title>
1953       <para>
1954         <symbol>*default-database*</symbol>
1955       </para> 
1956     </refsect1>
1957     <refsect1>
1958       <title>Exceptional Situations</title>
1959       <para>
1960         An error is signalled if <parameter>name</parameter> is not a
1961         string, symbol or SQL expression. An error of type
1962         <symbol>sql-database-data-error</symbol> is signalled if
1963         <parameter>name</parameter> doesn't exist and
1964         <parameter>if-does-not-exist</parameter> has a value of
1965         <symbol>:error</symbol>.
1966       </para>
1967     </refsect1>
1968     <refsect1>
1969       <title>See Also</title>
1970       <simplelist>
1971         <member><link linkend="create-sequence"><function>create-sequence</function></link></member>
1972         <member><link linkend="list-sequences"><function>list-sequences</function></link></member>
1973         <member><link linkend="sequence-exists-p"><function>sequence-exists-p</function></link></member>
1974         <member><link linkend="sequence-last"><function>sequence-last</function></link></member>
1975         <member><link linkend="sequence-next"><function>sequence-next</function></link></member>
1976         <member><link linkend="set-sequence-position"><function>set-sequence-position</function></link></member>
1977       </simplelist>
1978     </refsect1>
1979     <refsect1>
1980       <title>Notes</title>
1981       <para>
1982         <function>drop-sequence</function> is a &clsql; extension. 
1983       </para>
1984     </refsect1>
1985   </refentry>
1986
1987   <refentry id="list-sequences">
1988     <refmeta>
1989       <refentrytitle>LIST-SEQUENCES</refentrytitle>
1990     </refmeta>
1991     <refnamediv>
1992       <refname>LIST-SEQUENCES</refname>
1993       <refpurpose>Returns a list of database sequences.</refpurpose>
1994       <refclass>Function</refclass>
1995     </refnamediv>
1996     <refsect1>
1997       <title>Syntax</title>
1998       <synopsis>
1999       <function>list-sequences</function> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
2000     </refsect1>
2001     <refsect1>
2002       <title>Arguments and Values</title>
2003       <variablelist>
2004         <varlistentry>
2005           <term><parameter>owner</parameter></term>
2006           <listitem>
2007             <para>
2008               A string, &nil; or <symbol>:all</symbol>. 
2009             </para>
2010           </listitem>
2011         </varlistentry>
2012         <varlistentry> 
2013           <term><parameter>database</parameter></term>
2014           <listitem>
2015             <para>
2016               A database object which defaults to
2017               <symbol>*default-database*</symbol>.
2018             </para>
2019           </listitem>
2020         </varlistentry>
2021         <varlistentry> 
2022           <term><parameter>result</parameter></term>
2023           <listitem>
2024             <para>
2025               A list of strings.
2026             </para>
2027           </listitem>
2028         </varlistentry>
2029       </variablelist>
2030     </refsect1>
2031     <refsect1>
2032       <title>Description</title>
2033       <para>Returns a list of strings representing sequence names in
2034       <parameter>database</parameter> which defaults to
2035       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
2036       is &nil; by default which means that only sequences owned by
2037       users are listed. If <parameter>owner</parameter> is a string
2038       denoting a user name, only sequences owned by
2039       <parameter>owner</parameter> are listed. If
2040       <parameter>owner</parameter> is <symbol>:all</symbol> then all
2041       sequences are listed.
2042       </para>
2043     </refsect1>
2044     <refsect1>
2045       <title>Examples</title>
2046       <screen>
2047 (list-sequences)
2048 => ("foo")  
2049       </screen>
2050     </refsect1>
2051     <refsect1>
2052       <title>Side Effects</title>
2053       <para>
2054         None. 
2055       </para>
2056     </refsect1>
2057     <refsect1>
2058       <title>Affected by</title>
2059       <para>
2060         <symbol>*default-database*</symbol>
2061       </para> 
2062     </refsect1>
2063     <refsect1>
2064       <title>Exceptional Situations</title>
2065       <para>
2066         None. 
2067       </para>
2068     </refsect1>
2069     <refsect1>
2070       <title>See Also</title>
2071       <simplelist>
2072         <member><link linkend="create-sequence"><function>create-sequence</function></link></member>
2073         <member><link linkend="drop-sequence"><function>drop-sequence</function></link></member>
2074         <member><link linkend="sequence-exists-p"><function>sequence-exists-p</function></link></member>
2075         <member><link linkend="sequence-last"><function>sequence-last</function></link></member>
2076         <member><link linkend="sequence-next"><function>sequence-next</function></link></member>
2077         <member><link linkend="set-sequence-position"><function>set-sequence-position</function></link></member>
2078       </simplelist>
2079     </refsect1>
2080     <refsect1>
2081       <title>Notes</title>
2082       <para>
2083         <function>list-sequences</function> is a &clsql; extension. 
2084       </para>
2085     </refsect1>
2086   </refentry>
2087
2088   <refentry id="sequence-exists-p">
2089     <refmeta>
2090       <refentrytitle>SEQUENCE-EXISTS-P</refentrytitle>
2091     </refmeta>
2092     <refnamediv>
2093       <refname>SEQUENCE-EXISTS-P</refname>
2094       <refpurpose>Tests for the existence of a database sequence.</refpurpose>
2095       <refclass>Function</refclass>
2096     </refnamediv>
2097     <refsect1>
2098       <title>Syntax</title>
2099       <synopsis>
2100       <function>sequence-exists-p</function> <replaceable>name</replaceable> &amp;key <replaceable>owner</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
2101     </refsect1>
2102     <refsect1>
2103       <title>Arguments and Values</title>
2104       <variablelist>
2105         <varlistentry>
2106           <term><parameter>name</parameter></term>
2107           <listitem>
2108             <para>
2109               The name of the sequence as a string, symbol or SQL expression. 
2110             </para>
2111           </listitem>
2112         </varlistentry>
2113         <varlistentry>
2114           <term><parameter>owner</parameter></term>
2115           <listitem>
2116             <para>
2117               A string, &nil; or <symbol>:all</symbol>. 
2118             </para>
2119           </listitem>
2120         </varlistentry>
2121         <varlistentry> 
2122           <term><parameter>database</parameter></term>
2123           <listitem>
2124             <para>
2125               A database object which defaults to
2126               <symbol>*default-database*</symbol>.
2127             </para>
2128           </listitem>
2129         </varlistentry>
2130         <varlistentry> 
2131           <term><parameter>result</parameter></term>
2132           <listitem>
2133             <para>
2134               A Boolean. 
2135             </para>
2136           </listitem>
2137         </varlistentry>
2138       </variablelist>
2139     </refsect1>
2140     <refsect1>
2141       <title>Description</title>
2142       <para>Tests for the existence of an SQL sequence called
2143       <parameter>name</parameter> in <parameter>database</parameter>
2144       which defaults to
2145       <symbol>*default-database*</symbol>. <parameter>owner</parameter>
2146       is &nil; by default which means that only sequences owned by
2147       users are examined. If <parameter>owner</parameter> is a string
2148       denoting a user name, only sequences owned by
2149       <parameter>owner</parameter> are examined. If
2150       <parameter>owner</parameter> is <symbol>:all</symbol> then all
2151       sequences are examined.
2152       </para>
2153     </refsect1>
2154     <refsect1>
2155       <title>Examples</title>
2156       <screen>
2157 (sequence-exists-p [foo])
2158 => NIL        
2159       </screen>
2160     </refsect1>
2161     <refsect1>
2162       <title>Side Effects</title>
2163       <para>
2164         None. 
2165       </para>
2166     </refsect1>
2167     <refsect1>
2168       <title>Affected by</title>
2169       <para>
2170         <symbol>*default-database*</symbol>
2171       </para> 
2172     </refsect1>
2173     <refsect1>
2174       <title>Exceptional Situations</title>
2175       <para>
2176         None. 
2177       </para>
2178     </refsect1>
2179     <refsect1>
2180       <title>See Also</title>
2181       <simplelist>
2182         <member><link linkend="create-sequence"><function>create-sequence</function></link></member>
2183         <member><link linkend="drop-sequence"><function>drop-sequence</function></link></member>
2184         <member><link linkend="list-sequences"><function>list-sequences</function></link></member>
2185         <member><link linkend="sequence-last"><function>sequence-last</function></link></member>
2186         <member><link linkend="sequence-next"><function>sequence-next</function></link></member>
2187         <member><link linkend="set-sequence-position"><function>set-sequence-position</function></link></member>
2188       </simplelist>
2189     </refsect1>
2190     <refsect1>
2191       <title>Notes</title>
2192       <para>
2193         <function>sequence-exists-p</function> is a &clsql; extension. 
2194       </para>
2195     </refsect1>
2196   </refentry>
2197
2198   <refentry id="sequence-last">
2199     <refmeta>
2200       <refentrytitle>SEQUENCE-LAST</refentrytitle>
2201     </refmeta>
2202     <refnamediv>
2203       <refname>SEQUENCE-LAST</refname>
2204       <refpurpose>Return the last element in a database sequence.</refpurpose>
2205       <refclass>Function</refclass>
2206     </refnamediv>
2207     <refsect1>
2208       <title>Syntax</title>
2209       <synopsis>
2210       <function>sequence-last</function> <replaceable>name</replaceable> &amp;key <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
2211     </refsect1>
2212     <refsect1>
2213       <title>Arguments and Values</title>
2214       <variablelist>
2215         <varlistentry>
2216           <term><parameter>name</parameter></term>
2217           <listitem>
2218             <para>
2219               The name of the sequence as a string, symbol or SQL expression. 
2220             </para>
2221           </listitem>
2222         </varlistentry>
2223         <varlistentry> 
2224           <term><parameter>database</parameter></term>
2225           <listitem>
2226             <para>
2227               A database object which defaults to
2228               <symbol>*default-database*</symbol>.
2229             </para>
2230           </listitem>
2231         </varlistentry>
2232         <varlistentry>
2233           <term><parameter>result</parameter></term>
2234           <listitem>
2235             <para>
2236               An integer. 
2237             </para>
2238           </listitem>
2239         </varlistentry>
2240       </variablelist>
2241     </refsect1>
2242     <refsect1>
2243       <title>Description</title>
2244       <para>Return the last value allocated in the sequence called
2245       <parameter>name</parameter> in <parameter>database</parameter>
2246       which defaults to <symbol>*default-database*</symbol>.
2247       </para>
2248     </refsect1>
2249     <refsect1>
2250       <title>Examples</title>
2251       <screen>
2252 (sequence-last [foo])
2253 => 1        
2254       </screen>
2255     </refsect1>
2256     <refsect1>
2257       <title>Side Effects</title>
2258       <para>
2259         None. 
2260       </para>
2261     </refsect1>
2262     <refsect1>
2263       <title>Affected by</title>
2264       <para>
2265         The current value stored in database sequence
2266         <parameter>name</parameter>.
2267       </para>
2268       <para> 
2269         <symbol>*default-database*</symbol> 
2270       </para>
2271     </refsect1>
2272     <refsect1>
2273       <title>Exceptional Situations</title>
2274       <para>
2275         Will signal an error of type
2276         <symbol>sql-database-data-error</symbol> if a sequence called
2277         <parameter>name</parameter> does not exist in
2278         <parameter>database</parameter>.
2279       </para>
2280     </refsect1>
2281     <refsect1>
2282       <title>See Also</title>
2283       <simplelist>
2284         <member><link linkend="create-sequence"><function>create-sequence</function></link></member>
2285         <member><link linkend="drop-sequence"><function>drop-sequence</function></link></member>
2286         <member><link linkend="list-sequences"><function>list-sequences</function></link></member>
2287         <member><link linkend="sequence-exists-p"><function>sequence-exists-p</function></link></member>
2288         <member><link linkend="sequence-next"><function>sequence-next</function></link></member>
2289         <member><link linkend="set-sequence-position"><function>set-sequence-position</function></link></member>
2290       </simplelist>
2291     </refsect1>
2292     <refsect1>
2293       <title>Notes</title>
2294       <para>
2295         <function>sequence-last</function> is a &clsql; extension. 
2296       </para>
2297     </refsect1>
2298   </refentry>
2299
2300   <refentry id="sequence-next">
2301     <refmeta>
2302       <refentrytitle>SEQUENCE-NEXT</refentrytitle>
2303     </refmeta>
2304     <refnamediv>
2305       <refname>SEQUENCE-NEXT</refname>
2306       <refpurpose>Increment the value of a database sequence.</refpurpose>
2307       <refclass>Function</refclass>
2308     </refnamediv>
2309     <refsect1>
2310       <title>Syntax</title>
2311       <synopsis>
2312       <function>sequence-next</function> <replaceable>name</replaceable> &amp;key <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
2313     </refsect1>
2314     <refsect1>
2315       <title>Arguments and Values</title>
2316       <variablelist>
2317         <varlistentry>
2318           <term><parameter>name</parameter></term>
2319           <listitem>
2320             <para>
2321               The name of the sequence as a string, symbol or SQL expression. 
2322             </para>
2323           </listitem>
2324         </varlistentry>
2325         <varlistentry> 
2326           <term><parameter>database</parameter></term>
2327           <listitem>
2328             <para>
2329               A database object which defaults to
2330               <symbol>*default-database*</symbol>.
2331             </para>
2332           </listitem>
2333         </varlistentry>
2334         <varlistentry>
2335           <term><parameter>result</parameter></term>
2336           <listitem>
2337             <para>
2338               An integer. 
2339             </para>
2340           </listitem>
2341         </varlistentry>
2342       </variablelist>
2343     </refsect1>
2344     <refsect1>
2345       <title>Description</title>
2346       <para>Increment and return the value of the sequence called
2347       <parameter>name</parameter> in <parameter>database</parameter>
2348       which defaults to <symbol>*default-database*</symbol>.
2349       </para>
2350     </refsect1>
2351     <refsect1>
2352       <title>Examples</title>
2353       <screen>
2354 (sequence-last [foo])
2355 => 3
2356 (sequence-next [foo])
2357 => 4
2358 (sequence-next [foo])
2359 => 5
2360 (sequence-next [foo])
2361 => 6
2362       </screen>
2363     </refsect1>
2364     <refsect1>
2365       <title>Side Effects</title>
2366       <para>
2367         Modifies the value of the sequence <parameter>name</parameter>
2368         in <parameter>database</parameter>.
2369       </para>
2370     </refsect1>
2371     <refsect1>
2372       <title>Affected by</title>
2373       <para>
2374         The current value stored in database sequence
2375         <parameter>name</parameter>.
2376       </para>
2377       <para> 
2378         <symbol>*default-database*</symbol> 
2379       </para>
2380     </refsect1>
2381     <refsect1>
2382       <title>Exceptional Situations</title>
2383       <para>
2384         Will signal an error of type
2385         <symbol>sql-database-data-error</symbol> if a sequence called
2386         <parameter>name</parameter> does not exist in
2387         <parameter>database</parameter>.
2388       </para>
2389     </refsect1>
2390     <refsect1>
2391       <title>See Also</title>
2392       <simplelist>
2393         <member><link linkend="create-sequence"><function>create-sequence</function></link></member>
2394         <member><link linkend="drop-sequence"><function>drop-sequence</function></link></member>
2395         <member><link linkend="list-sequences"><function>list-sequences</function></link></member>
2396         <member><link linkend="sequence-exists-p"><function>sequence-exists-p</function></link></member>
2397         <member><link linkend="sequence-last"><function>sequence-last</function></link></member>
2398         <member><link linkend="set-sequence-position"><function>set-sequence-position</function></link></member>
2399       </simplelist>
2400     </refsect1>
2401     <refsect1>
2402       <title>Notes</title>
2403       <para>
2404         <function>sequence-next</function> is a &clsql; extension. 
2405       </para>
2406     </refsect1>
2407   </refentry>
2408
2409   <refentry id="set-sequence-position">
2410     <refmeta>
2411       <refentrytitle>SET-SEQUENCE-POSITION</refentrytitle>
2412     </refmeta>
2413     <refnamediv>
2414       <refname>SET-SEQUENCE-POSITION</refname>
2415       <refpurpose>Sets the position of a database sequence.</refpurpose>
2416       <refclass>Function</refclass>
2417     </refnamediv>
2418     <refsect1>
2419       <title>Syntax</title>
2420       <synopsis>
2421       <function>set-sequence-position</function> <replaceable>name</replaceable> <replaceable>position</replaceable> &amp;key <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
2422     </refsect1>
2423     <refsect1>
2424       <title>Arguments and Values</title>
2425       <variablelist>
2426         <varlistentry>
2427           <term><parameter>name</parameter></term>
2428           <listitem>
2429             <para>
2430               The name of the sequence as a string, symbol or SQL expression. 
2431             </para>
2432           </listitem>
2433         </varlistentry>
2434         <varlistentry>
2435           <term><parameter>position</parameter></term>
2436           <listitem>
2437             <para>
2438               An integer. 
2439             </para>
2440           </listitem>
2441         </varlistentry>
2442         <varlistentry> 
2443           <term><parameter>database</parameter></term>
2444           <listitem>
2445             <para>
2446               A database object which defaults to
2447               <symbol>*default-database*</symbol>.
2448             </para>
2449           </listitem>
2450         </varlistentry>
2451         <varlistentry>
2452           <term><parameter>result</parameter></term>
2453           <listitem>
2454             <para>
2455               An integer. 
2456             </para>
2457           </listitem>
2458         </varlistentry>
2459       </variablelist>
2460     </refsect1>
2461     <refsect1>
2462       <title>Description</title>
2463       <para>Explicitly set the position of the sequence called
2464       <parameter>name</parameter> in <parameter>database</parameter>,
2465       which defaults to <symbol>*default-database*</symbol>, to
2466       <parameter>position</parameter> which is returned.
2467       </para>
2468     </refsect1>
2469     <refsect1>
2470       <title>Examples</title>
2471       <screen>
2472 (sequence-last [foo])
2473 => 4
2474 (set-sequence-position [foo] 50)
2475 => 50
2476 (sequence-next [foo])
2477 => 51
2478       </screen>
2479     </refsect1>
2480     <refsect1>
2481       <title>Side Effects</title>
2482       <para>
2483         Modifies the value of the sequence <parameter>name</parameter>
2484         in <parameter>database</parameter>.
2485       </para>
2486     </refsect1>
2487     <refsect1>
2488       <title>Affected by</title>
2489       <para>
2490         <symbol>*default-database*</symbol>
2491       </para> 
2492     </refsect1>
2493     <refsect1>
2494       <title>Exceptional Situations</title>
2495       <para>
2496         Will signal an error of type
2497         <symbol>sql-database-data-error</symbol> if a sequence called
2498         <parameter>name</parameter> does not exist in
2499         <parameter>database</parameter>.
2500       </para>
2501     </refsect1>
2502     <refsect1>
2503       <title>See Also</title>
2504       <simplelist>
2505         <member><link linkend="create-sequence"><function>create-sequence</function></link></member>
2506         <member><link linkend="drop-sequence"><function>drop-sequence</function></link></member>
2507         <member><link linkend="list-sequences"><function>list-sequences</function></link></member>
2508         <member><link linkend="sequence-exists-p"><function>sequence-exists-p</function></link></member>
2509         <member><link linkend="sequence-last"><function>sequence-last</function></link></member>
2510         <member><link linkend="sequence-next"><function>sequence-next</function></link></member>
2511       </simplelist>
2512     </refsect1>
2513     <refsect1>
2514       <title>Notes</title>
2515       <para>
2516         <function>set-sequence-position</function> is a &clsql; extension.  
2517       </para>
2518     </refsect1>
2519   </refentry>
2520
2521   <refentry id="truncate-database">
2522     <refmeta>
2523       <refentrytitle>TRUNCATE-DATABASE</refentrytitle>
2524     </refmeta>
2525     <refnamediv>
2526       <refname>TRUNCATE-DATABASE</refname>
2527       <refpurpose>Drop all tables, views, indexes and sequences in a database.</refpurpose>
2528       <refclass>Function</refclass>
2529     </refnamediv>
2530     <refsect1>
2531       <title>Syntax</title>
2532       <synopsis>
2533       <function>truncate-database</function> &amp;key <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
2534     </refsect1>
2535     <refsect1>
2536       <title>Arguments and Values</title>
2537       <variablelist>
2538         <varlistentry>
2539           <term><parameter>database</parameter></term>
2540           <listitem>
2541             <para>A 
2542             <glossterm linkend="gloss-database-object">database
2543             object</glossterm>. This will default to the value
2544             of <symbol>*default-database*</symbol>.</para>
2545           </listitem>
2546         </varlistentry>
2547       </variablelist>
2548     </refsect1>
2549     <refsect1>
2550       <title>Description</title>
2551       <para>
2552         Drop all tables, views, indexes and sequences in
2553         <parameter>database</parameter> which defaults to
2554         <symbol>*default-database*</symbol>.
2555       </para>
2556     </refsect1>
2557     <refsect1>
2558       <title>Examples</title>
2559       <screen>
2560 (list-tables)
2561 => ("type_table" "type_bigint" "employee" "company" "addr" "ea_join" "big")
2562 (list-indexes)
2563 => ("employeepk" "companypk" "addrpk")
2564 (list-views)
2565 => ("lenins_group")
2566 (list-sequences)
2567 => ("foo" "bar")
2568 (truncate-database)
2569 => 
2570 (list-tables)
2571 => NIL
2572 (list-indexes)
2573 => NIL
2574 (list-views)
2575 => NIL
2576 (list-sequences)
2577 => NIL
2578       </screen>
2579     </refsect1>
2580     <refsect1>
2581       <title>Side Effects</title>
2582       <para>
2583         Modifications are made to the underlying database. 
2584       </para>
2585     </refsect1>
2586     <refsect1>
2587       <title>Affected by</title>
2588       <para>
2589         None. 
2590       </para>
2591     </refsect1>
2592     <refsect1>
2593       <title>Exceptional Situations</title>
2594       <para>
2595         Signals an error of type <symbol>sql-database-error</symbol> if 
2596         <parameter>database</parameter> is not a database object. 
2597       </para>
2598     </refsect1>
2599     <refsect1>
2600       <title>See Also</title>
2601       <para>
2602         <simplelist>
2603           <member><link linkend="drop-table"><function>drop-table</function></link></member>
2604           <member><link linkend="drop-view"><function>drop-view</function></link></member>
2605           <member><link linkend="drop-index"><function>drop-index</function></link></member>
2606           <member><link linkend="drop-sequence"><function>drop-sequence</function></link></member>
2607         </simplelist>
2608       </para>
2609     </refsect1>
2610     <refsect1>
2611       <title>Notes</title>
2612       <para>
2613         <function>truncate-database</function> is a &clsql; extension. 
2614       </para>
2615     </refsect1>
2616   </refentry>
2617
2618 </reference>