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">
8 <reference id="ref-connect">
9 <title>Connection and Initialisation</title>
12 This section describes the &clsql; interface for initialising
13 database interfaces of different types, creating and destroying
14 databases and connecting and disconnecting from databases.
18 <!-- Connection and Initialisation -->
20 <refentry id="database">
22 <refentrytitle>DATABASE</refentrytitle>
25 <refname>DATABASE</refname>
26 <refpurpose>The super-type of all &clsql; databases</refpurpose>
27 <refclass>Class</refclass>
30 <title>Class Precedence List</title>
32 <simplelist type="inline">
33 <member><type>database</type></member>
34 <member><type>standard-object</type></member>
35 <member><type>t</type></member>
40 <title>Description</title> <para>This class is the superclass of
41 all &clsql; databases. The different database back-ends derive
42 subclasses of this class to implement their databases. No
43 instances of this class are ever created by &clsql;.</para>
47 <title class="contenttitle">Class details</title>
48 <programlisting>(defclass DATABASE ()(...))</programlisting>
51 <title class="contenttitle">Slots</title>
54 <property>slot COMMAND-RECORDING-STREAM is of type T</property>
55 <property>slot CONN-POOL is of type T</property>
56 <property>slot NAME is of type T</property>
57 <property>slot RECORD-CACHES is of type T</property>
58 <property>slot RESULT-RECORDING-STREAM is of type T</property>
59 <property>slot STATE is of type T</property>
60 <property>slot TRANSACTION is of type T</property>
61 <property>slot TRANSACTION-LEVEL is of type T</property>
62 <property>slot VIEW-CLASSES is of type T</property>
69 <refentry id="connect-if-exists">
71 <refentrytitle>*CONNECT-IF-EXISTS*</refentrytitle>
74 <refname>*CONNECT-IF-EXISTS*</refname>
75 <refpurpose>Default value for the
76 <parameter>if-exists</parameter> parameter of <link
77 linkend="connect"><function>connect</function></link>.</refpurpose>
78 <refclass>Variable</refclass>
81 <title>Value Type</title>
82 <para>A valid argument to the <parameter>if-exists</parameter>
83 parameter of <function>connect</function>, that is, one of
84 <simplelist type="inline">
85 <member><symbol>:new</symbol></member>
86 <member><symbol>:warn-new</symbol></member>
87 <member><symbol>:error</symbol></member>
88 <member><symbol>:warn-old</symbol></member>
89 <member><symbol>:old</symbol></member>
94 <title>Initial Value</title>
95 <para><symbol>:error</symbol></para>
98 <title>Description</title>
99 <para>The value of this variable is used in calls to
100 <function>connect</function> as the default
101 value of the <parameter>if-exists</parameter>
103 linkend="connect"><function>connect</function></link> for
104 the semantics of the valid values for this variable.</para>
107 <title>Examples</title>
111 <title>Affected By</title>
115 <title>See Also</title>
119 linkend="connect"><function>connect</function></link></member>
129 <refentry id="default-database">
131 <refentrytitle>*DEFAULT-DATABASE*</refentrytitle>
134 <refname>*DEFAULT-DATABASE*</refname>
135 <refpurpose>The default database object to use.</refpurpose>
136 <refclass>Variable</refclass>
139 <title>Value Type</title>
140 <para>Any object of type <type>database</type>, or &nil; to
141 indicate no default database.</para>
144 <title>Initial Value</title>
148 <title>Description</title>
149 <para>Any function or macro in &clsql; that operates on a
150 database uses the value of this variable as the default value
151 for it's <parameter>database</parameter> parameter.</para>
152 <para>The value of this parameter is changed by calls to
153 <function>connect</function>, which sets
154 <symbol>*default-database*</symbol> to the database object
155 it returns. It is also changed by calls to
156 <function>disconnect</function>, when the database object
157 being disconnected is the same as the value of
158 <symbol>*default-database*</symbol>. In this case
159 <function>disconnect</function> sets
160 <symbol>*default-database*</symbol> to the first database
161 that remains in the list of active databases as returned by
162 <function>connected-databases</function>, or
163 &nil; if no further active databases
165 <para>The user may change <symbol>*default-database*</symbol>
166 at any time to a valid value of his choice.</para>
168 <para>If the value of <symbol>*default-database*</symbol> is
169 &nil;, then all calls to &clsql; functions on
170 databases must provide a suitable
171 <parameter>database</parameter> parameter, or an error will be
176 <title>Examples</title>
178 (connected-databases)
180 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql)
181 => #<CLSQL-MYSQL:MYSQL-DATABASE {48385F55}>
182 (connect '(nil "template1" "dent" nil) :database-type :postgresql)
183 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {483868FD}>
184 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql :if-exists :new)
185 => #<CLSQL-MYSQL:MYSQL-DATABASE {48387265}>
187 => #<CLSQL-MYSQL:MYSQL-DATABASE {48387265}>
191 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {483868FD}>
195 => #<CLSQL-MYSQL:MYSQL-DATABASE {48385F55}>
200 (connected-databases)
205 <title>Affected By</title>
207 <member><link linkend="connect"><function>connect</function></link></member>
208 <member><link linkend="disconnect"><function>disconnect</function></link></member>
212 <title>See Also</title>
215 <member><link linkend="connected-databases"><function>connected-databases</function></link></member>
222 <para>This variable is intended to facilitate working with
223 &clsql; in an interactive
224 fashion at the top-level loop, and because of this,
225 <function>connect</function> and
226 <function>disconnect</function> provide some fairly
227 complex behaviour to keep
228 <symbol>*default-database*</symbol> set to useful values.
229 Programmatic use of &clsql;
230 should never depend on the value of
231 <symbol>*default-database*</symbol> and should provide
232 correct database objects via the
233 <parameter>database</parameter> parameter to functions
239 <refentry id="default-database-type">
241 <refentrytitle>*DEFAULT-DATABASE-TYPE*</refentrytitle>
244 <refname>*DEFAULT-DATABASE-TYPE*</refname>
245 <refpurpose>The default database type to use</refpurpose>
246 <refclass>Variable</refclass>
249 <title>Value Type</title>
250 <para>Any keyword representing a valid database back-end of
251 &clsql;, or &nil;.</para>
254 <title>Initial Value</title>
258 <title>Description</title>
259 <para>The value of this variable is used in calls to
260 <function>initialize-database-type</function> and
261 <function>connect</function> as the default value of the
262 <parameter>database-type</parameter> parameter.</para>
264 <para>If the value of this variable is &nil;,
266 <function>initialize-database-type</function> or
267 <function>connect</function> will have to specify the
268 <parameter>database-type</parameter> to use, or a
269 general-purpose error will be signalled.</para>
273 <title>Examples</title>
275 (setf *default-database-type* :mysql)
277 (initialize-database-type)
282 <title>Affected By</title>
286 <title>See Also</title>
289 linkend="initialize-database-type"><function>intitialize-database-type</function></link></member>
298 <refentry id="initialized-database-types">
300 <refentrytitle>*INITIALIZED-DATABASE-TYPES*</refentrytitle>
303 <refname>*INITIALIZED-DATABASE-TYPES*</refname>
304 <refpurpose>List of all initialized database types</refpurpose>
305 <refclass>Variable</refclass>
308 <title>Value Type</title>
309 <para>A list of all initialized database types, each of which
310 represented by it's corresponding keyword.</para>
313 <title>Initial Value</title>
317 <title>Description</title>
318 <para>This variable is updated whenever
319 <function>initialize-database-type</function> is called for a
320 database type which hasn't already been initialized before, as
321 determined by this variable. In that case the keyword
322 representing the database type is pushed onto the list stored in
323 <symbol>*INITIALIZED-DATABASE-TYPES*</symbol>.</para>
325 <para>Attempts to modify the value of this variable will
326 result in undefined behaviour.</para>
330 <title>Examples</title>
332 (setf *default-database-type* :mysql)
334 (initialize-database-type)
336 *initialized-database-types*
341 <title>Affected By</title>
344 <member><function>initialize-database-type</function></member>
349 <title>See Also</title>
352 linkend="initialize-database-type"><function>intitialize-database-type</function></link></member>
357 <para>Direct access to this variable is primarily provided
358 because of compatibility with Harlequin's <application>Common
359 SQL</application>.</para>
363 <refentry id="connect">
365 <refentrytitle>CONNECT</refentrytitle>
368 <refname>CONNECT</refname>
369 <refpurpose>create a connection to a database.</refpurpose>
370 <refclass>Function</refclass>
373 <title>Syntax</title>
374 <synopsis><function>connect</function> <replaceable>connection-spec</replaceable> &key <replaceable>if-exists</replaceable> <replaceable>database-type</replaceable> <replaceable>pool</replaceable> <replaceable>make-default</replaceable> => <returnvalue>database</returnvalue></synopsis>
377 <title>Arguments and Values</title>
380 <term><parameter>connection-spec</parameter></term>
382 <para>A vendor specific connection specification supplied
383 as a list or as a string.</para>
387 <term><parameter>if-exists</parameter></term>
389 <para>This indicates the action to take if a connection
390 to the same database exists already. See below for the
391 legal values and actions. It defaults to the value of
392 <symbol>*connect-if-exists*</symbol>.</para>
396 <term><parameter>database-type</parameter></term>
398 <para>A database type specifier, i.e. a keyword.
399 This defaults to the value of
400 <symbol>*default-database-type*</symbol></para>
404 <term><parameter>pool</parameter></term>
406 <para>A boolean flag. If &t;, acquire connection from a
407 pool of open connections. If the pool is empty, a new
408 connection is created. The default is &nil;.
413 <term><parameter>make-default</parameter></term>
415 <para>A boolean flag. If &t;,
416 <symbol>*default-database*</symbol> is set to the new
417 connection, otherwise <symbol>*default-database*</symbol>
418 is not changed. The default is &t;.
423 <term><returnvalue>database</returnvalue></term>
425 <para>The database object representing the connection.</para>
431 <title>Description</title>
432 <para>This function takes a connection specification and
433 a database type and creates a connection to the database
434 specified by those. The type and structure of the
435 connection specification depend on the database type.</para>
436 <para>The parameter <parameter>if-exists</parameter> specifies
437 what to do if a connection to the database specified exists
438 already, which is checked by calling
439 <function>find-database</function> on the database name
440 returned by <function>database-name-from-spec</function>
441 when called with the <parameter>connection-spec</parameter>
442 and <parameter>database-type</parameter> parameters. The
443 possible values of <parameter>if-exists</parameter> are:
446 <term><symbol>:new</symbol></term>
448 <para>Go ahead and create a new connection.</para>
452 <term><symbol>:warn-new</symbol></term>
454 <para>This is just like <symbol>:new</symbol>, but
455 also signals a warning of type
456 <errortype>clsql-exists-warning</errortype>,
457 indicating the old and newly created
462 <term><symbol>:error</symbol></term>
464 <para>This will cause <function>connect</function> to
465 signal a correctable error of type
466 <errortype>clsql-exists-error</errortype>. The
467 user may choose to proceed, either by indicating
468 that a new connection shall be created, via the
469 restart <symbol>create-new</symbol>, or by
470 indicating that the existing connection shall be
471 used, via the restart
472 <symbol>use-old</symbol>.</para>
476 <term><symbol>:old</symbol></term>
478 <para>This will cause <function>connect</function> to
479 use an old connection if one exists.</para>
483 <term><symbol>:warn-old</symbol></term>
485 <para>This is just like <symbol>:old</symbol>, but
486 also signals a warning of type
487 <errortype>clsql-exists-warning</errortype>,
488 indicating the old database used, via the slots
489 <symbol>old-db</symbol> and
490 <symbol>new-db</symbol></para>
495 <para>The database name of the returned database object will
496 be the same under <function>string=</function> as that which
497 would be returned by a call to
498 <function>database-name-from-spec</function> with the given
499 <parameter>connection-spec</parameter> and
500 <parameter>database-type</parameter> parameters.</para>
503 <title>Examples</title>
505 (database-name-from-spec '("dent" "newesim" "dent" "dent") :mysql)
506 => "dent/newesim/dent"
507 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql)
508 => #<CLSQL-MYSQL:MYSQL-DATABASE {48036F6D}>
510 => "dent/newesim/dent"
512 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql)
513 >> In call to CONNECT:
514 >> There is an existing connection #<CLSQL-MYSQL:MYSQL-DATABASE {48036F6D}> to database dent/newesim/dent.
517 >> 0: [CREATE-NEW] Create a new connection.
518 >> 1: [USE-OLD ] Use the existing connection.
519 >> 2: [ABORT ] Return to Top-Level.
521 >> Debug (type H for help)
523 >> (CONNECT ("dent" "newesim" "dent" "dent") :IF-EXISTS NIL :DATABASE-TYPE ...)
525 >> ; File: /prj/CLSQL/sql/sql.cl
526 >> (RESTART-CASE (ERROR 'CLSQL-EXISTS-ERROR :OLD-DB OLD-DB)
527 >> (CREATE-NEW NIL :REPORT "Create a new connection."
529 >> (USE-OLD NIL :REPORT "Use the existing connection."
530 >> (SETQ RESULT OLD-DB)))
532 => #<CLSQL-MYSQL:MYSQL-DATABASE {480451F5}>
536 <title>Side Effects</title>
537 <para>A database connection is established, and the resultant
538 database object is registered, so as to appear in the list
539 returned by <function>connected-databases</function>.
540 <symbol>*default-database*</symbol> may be rebound to the
541 created object.</para>
544 <title>Affected by</title>
547 <member><symbol>*default-database-type*</symbol></member>
548 <member><symbol>*connect-if-exists*</symbol></member>
553 <title>Exceptional Situations</title>
554 <para>If the connection specification is not syntactically or
555 semantically correct for the given database type, an error of
556 type <errortype>sql-user-error</errortype> is
557 signalled. If during the connection attempt an error is
558 detected (e.g. because of permission problems, network trouble
559 or any other cause), an error of type
560 <errortype>sql-database-error</errortype> is signalled.</para>
561 <para>If a connection to the database specified by
562 <parameter>connection-spec</parameter> exists already,
563 conditions are signalled according to the
564 <parameter>if-exists</parameter> parameter, as described
568 <title>See Also</title>
570 <member><link linkend="connected-databases"><function>connected-databases</function></link></member>
571 <member><link linkend="disconnect"><function>disconnect</function></link></member>
572 <member><link linkend="reconnect"><function>reconnect</function></link></member>
573 <member><link linkend="connect-if-exists"><function>*connect-if-exists*</function></link></member>
574 <member><link linkend="find-database"><function>find-database</function></link></member>
575 <member><link linkend="status"><function>status</function></link></member>
580 <para>The <parameter>pool</parameter> and
581 <parameter>make-default</parameter> keyword arguments to
582 <function>connect</function> are &clsql; extensions.</para>
586 <refentry id="connected-databases">
588 <refentrytitle>CONNECTED-DATABASES</refentrytitle>
591 <refname>CONNECTED-DATABASES</refname>
592 <refpurpose>Return the list of active database objects.</refpurpose>
593 <refclass>Function</refclass>
596 <title>Syntax</title>
598 <function>connected-databases</function> => <returnvalue>databases</returnvalue></synopsis>
601 <title>Arguments and Values</title>
604 <term><returnvalue>databases</returnvalue></term>
606 <para>The list of active database objects.</para>
612 <title>Description</title>
613 <para>This function returns the list of active database
614 objects, i.e. all those database objects created by calls to
615 <function>connect</function>, which have not been closed by
616 calling <function>disconnect</function> on them.</para>
618 <para>The consequences of modifying the list returned by
619 <function>connected-databases</function> are
624 <title>Examples</title>
626 (connected-databases)
628 (connect '(nil "template1" "dent" nil) :database-type :postgresql)
629 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {4830BC65}>
630 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql)
631 => #<CLSQL-MYSQL:MYSQL-DATABASE {4830C5AD}>
632 (connected-databases)
633 => (#<CLSQL-MYSQL:MYSQL-DATABASE {4830C5AD}>
634 #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {4830BC65}>)
637 (connected-databases)
638 => (#<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {4830BC65}>)
641 (connected-databases)
646 <title>Side Effects</title>
650 <title>Affected By</title>
653 <member><function>connect</function></member>
654 <member><function>disconnect</function></member>
659 <title>Exceptional Situations</title>
663 <title>See Also</title>
665 <member><link linkend="disconnect"><function>disconnect</function></link></member>
666 <member><link linkend="connect"><function>connect</function></link></member>
667 <member><link linkend="status"><function>status</function></link></member>
668 <member><link linkend="find-database"><function>find-database</function></link></member>
678 <refentry id="database-name">
680 <refentrytitle>DATABASE-NAME</refentrytitle>
683 <refname>DATABASE-NAME</refname>
684 <refpurpose>Get the name of a database object</refpurpose>
685 <refclass>Generic Function</refclass>
688 <title>Syntax</title>
689 <synopsis><function>database-name</function> <replaceable>database</replaceable> => <returnvalue>name</returnvalue></synopsis>
692 <title>Arguments and Values</title>
695 <term><parameter>database</parameter></term>
697 <para>A database object, either of type
698 <type>database</type> or of type
699 <type>closed-database</type>.</para>
703 <term><returnvalue>name</returnvalue></term>
705 <para>A string describing the identity of the database
706 to which this database object is connected to.</para>
712 <title>Description</title>
713 <para>This function returns the database name of the given
714 database. The database name is a string which somehow
715 describes the identity of the database to which this
716 database object is or has been connected. The database name
717 of a database object is determined at
718 <function>connect</function> time, when a call to
719 <function>database-name-from-spec</function> derives the
720 database name from the connection specification passed to
721 <function>connect</function> in the
722 <parameter>connection-spec</parameter> parameter.</para>
723 <para>The database name is used via
724 <function>find-database</function> in
725 <function>connect</function> to determine whether database
726 connections to the specified database exist already.</para>
727 <para>Usually the database name string will include
728 indications of the host, database name, user, or port that
729 where used during the connection attempt. The only
730 important thing is that this string shall try to identify
731 the database at the other end of the connection. Connection
732 specifications parts like passwords and credentials shall
733 not be used as part of the database name.</para>
736 <title>Examples</title>
738 (database-name-from-spec '("dent" "newesim" "dent" "dent") :mysql)
739 => "dent/newesim/dent"
740 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql)
741 => #<CLSQL-MYSQL:MYSQL-DATABASE {48391DCD}>
742 (database-name *default-database*)
743 => "dent/newesim/dent"
745 (database-name-from-spec '(nil "template1" "dent" nil) :postgresql)
747 (connect '(nil "template1" "dent" nil) :database-type :postgresql)
748 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {48392D2D}>
749 (database-name *default-database*)
752 (database-name-from-spec '("www.pmsf.de" "template1" "dent" nil) :postgresql)
753 => "www.pmsf.de/template1/dent"
757 <title>Side Effects</title>
761 <title>Affected By</title>
764 <member><link linkend="database-name-from-spec"><function>database-name-from-spec</function></link></member>
769 <title>Exceptional Situations</title>
770 <para>Will signal an error if the object passed as the
771 <parameter>database</parameter> parameter is neither of type
772 <type>database</type> nor of type
773 <type>closed-database</type>.</para>
776 <title>See Also</title>
780 linkend="connect"><function>connect</function></link></member>
782 linkend="find-database"><function>find-database</function></link></member>
783 <member><link linkend="connected-databases"><function>connected-databases</function></link></member>
784 <member><link linkend="disconnect"><function>disconnect</function></link></member>
785 <member><link linkend="status"><function>status</function></link></member>
795 <refentry id="database-name-from-spec">
797 <refentrytitle>DATABASE-NAME-FROM-SPEC</refentrytitle>
800 <refname>DATABASE-NAME-FROM-SPEC</refname>
801 <refpurpose>Return the database name string corresponding to
802 the given connection specification.</refpurpose>
803 <refclass>Generic Function</refclass>
806 <title>Syntax</title>
808 <function>database-name-from-spec</function> <replaceable>connection-spec</replaceable> <replaceable>database-type</replaceable> => <returnvalue>name</returnvalue></synopsis>
811 <title>Arguments and Values</title>
814 <term><parameter>connection-spec</parameter></term>
816 <para>A connection specification, whose structure and
817 interpretation are dependent on the
818 <parameter>database-type</parameter>.</para>
822 <term><parameter>database-type</parameter></term>
824 <para>A database type specifier, i.e. a keyword.</para>
828 <term><returnvalue>name</returnvalue></term>
830 <para>A string denoting a database name.</para>
836 <title>Description</title>
837 <para>This generic function takes a connection specification
838 and a database type and returns the database name of the
839 database object that would be created had
840 <function>connect</function> been called with the given
841 connection specification and database types.</para>
842 <para>This function is useful in determining a database name
843 from the connection specification, since the way the
844 connection specification is converted into a database name
845 is dependent on the database type.</para>
848 <title>Examples</title>
850 (database-name-from-spec '("dent" "newesim" "dent" "dent") :mysql)
851 => "dent/newesim/dent"
852 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql)
853 => #<CLSQL-MYSQL:MYSQL-DATABASE {48391DCD}>
854 (database-name *default-database*)
855 => "dent/newesim/dent"
857 (database-name-from-spec '(nil "template1" "dent" nil) :postgresql)
859 (connect '(nil "template1" "dent" nil) :database-type :postgresql)
860 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {48392D2D}>
861 (database-name *default-database*)
864 (database-name-from-spec '("www.pmsf.de" "template1" "dent" nil) :postgresql)
865 => "www.pmsf.de/template1/dent"
867 (find-database "dent/newesim/dent")
868 => #<CLSQL-MYSQL:MYSQL-DATABASE {484E91C5}>
869 (find-database "/template1/dent")
870 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {48392D2D}>
871 (find-database "www.pmsf.de/template1/dent" nil)
874 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {48392D2D}>
878 <title>Side Effects</title>
882 <title>Affected by</title>
886 <title>Exceptional Situations</title>
887 <para>If the value of <parameter>connection-spec</parameter>
888 is not a valid connection specification for the given
889 database type, an error of type
890 <errortype>clsql-invalid-spec-error</errortype> might be
894 <title>See Also</title>
897 <member><link linkend="connect"><function>connect</function></link></member>
903 <para><function>database-name-from-spec</function> is a
904 &clsql; extension.</para>
908 <refentry id="database-type">
910 <refentrytitle>DATABASE-TYPE</refentrytitle>
913 <refname>DATABASE-TYPE</refname>
914 <refpurpose>Get the type of a database object.</refpurpose>
915 <refclass>Generic Function</refclass>
918 <title>Syntax</title>
920 <function>database-type</function> <replaceable>DATABASE</replaceable> => <returnvalue>type</returnvalue></synopsis>
923 <title>Arguments and Values</title>
926 <term><parameter>database</parameter></term>
928 <para>A database object, either of type
929 <type>database</type> or of type
930 <type>closed-database</type>.</para>
934 <term><returnvalue>type</returnvalue></term>
936 <para>A keyword symbol denoting a known database back-end.</para>
942 <title>Description</title>
944 Returns the type of <parameter>database</parameter>.
948 <title>Examples</title>
950 (connect '(nil "template1" "dent" nil) :database-type :postgresql)
951 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {48392D2D}>
952 (database-type *default-database*)
957 <title>Side Effects</title>
963 <title>Affected by</title>
969 <title>Exceptional Situations</title>
970 <para>Will signal an error if the object passed as the
971 <parameter>database</parameter> parameter is neither of type
972 <type>database</type> nor of type
973 <type>closed-database</type>.</para>
976 <title>See Also</title>
980 linkend="connect"><function>connect</function></link></member>
982 linkend="find-database"><function>find-database</function></link></member>
983 <member><link linkend="connected-databases"><function>connected-databases</function></link></member>
984 <member><link linkend="disconnect"><function>disconnect</function></link></member>
985 <member><link linkend="status"><function>status</function></link></member>
992 <function>database-type</function> is a &clsql; extension.
997 <refentry id="disconnect">
999 <refentrytitle>DISCONNECT</refentrytitle>
1002 <refname>DISCONNECT</refname>
1003 <refpurpose>close a database connection</refpurpose>
1004 <refclass>Function</refclass>
1007 <title>Syntax</title>
1008 <synopsis><function>disconnect</function> &key <replaceable>database</replaceable> <replaceable>error</replaceable> => <returnvalue>result</returnvalue></synopsis>
1011 <title>Arguments and Values</title>
1014 <term><parameter>error</parameter></term>
1016 <para>A boolean flag indicating whether to signal an error
1017 if <parameter>database</parameter> is non-&nil; but cannot
1023 <term><parameter>database</parameter></term>
1025 <para>The database to disconnect, which defaults to the
1026 database indicated by
1027 <symbol>*default-database*</symbol>.</para>
1031 <term><parameter>result</parameter></term>
1033 <para>A Boolean indicating whether a connection was
1034 successfully disconnected.
1041 <title>Description</title>
1042 <para>This function takes a <type>database</type> object as
1043 returned by <function>connect</function>, and closes the
1044 connection. If no matching database is found and
1045 <parameter>error</parameter> and
1046 <parameter>database</parameter> are both non-&nil; an error is
1047 signaled, otherwise &nil; is returned. If the database is from a
1048 pool it will be released to this pool.
1051 <para>The status of the object passed is changed to closed
1052 after the disconnection succeeds, thereby preventing further
1053 use of the object as an argument to &clsql; functions, with
1054 the exception of <function>database-name</function> and
1055 <function>database-type</function>. If the user does pass a
1056 closed database to any other &clsql; function, an error of
1057 type <errortype>sql-fatal-error</errortype> is
1061 <title>Examples</title>
1063 (disconnect :database (find-database "dent/newesim/dent"))
1068 <title>Side Effects</title>
1069 <para>The database connection is closed, and the database
1070 object is removed from the list of connected databases as
1071 returned by <function>connected-databases</function>.</para>
1072 <para>The state of the database object is changed to
1073 <type>closed</type>.</para>
1074 <para>If the database object passed is the same under
1075 <function>eq</function> as the value of
1076 <symbol>*default-database*</symbol>, then
1077 <symbol>*default-database*</symbol> is set to the first
1078 remaining database from
1079 <function>connected-databases</function> or to &nil; if no
1080 further active database exists.</para>
1083 <title>Affected by</title>
1086 <member><symbol>*default-database*</symbol></member>
1091 <title>Exceptional Situations</title>
1092 <para>If during the disconnection attempt an error is detected
1093 (e.g. because of network trouble or any other cause), an error
1094 of type <errortype>sql-error</errortype> might be
1098 <title>See Also</title>
1101 <member><link linkend="connect"><function>connect</function></link></member>
1102 <member><link linkend="disconnect-pooled"><function>disconnect-pooled</function></link></member>
1107 <title>Notes</title>
1112 <refentry id="disconnect-pooled">
1114 <refentrytitle>DISCONNECT-POOLED</refentrytitle>
1117 <refname>DISCONNECT-POOLED</refname>
1118 <refpurpose>closes all pooled database connections</refpurpose>
1119 <refclass>Function</refclass>
1122 <title>Syntax</title>
1123 <synopsis><function>disconnect-pooled</function> => <returnvalue>t</returnvalue></synopsis>
1126 <title>Description</title>
1127 <para>This function disconnects all database connections
1128 that have been placed into the pool by calling <link
1129 linkend="connect"><function>connect</function></link> with
1134 <title>Examples</title>
1141 <title>Side Effects</title>
1142 <para>Database connections will be closed and entries in the pool are removed.
1146 <title>Affected by</title>
1149 <member><function>disconnect</function></member>
1154 <title>Exceptional Situations</title>
1155 <para>If during the disconnection attempt an error is
1156 detected (e.g. because of network trouble or any other
1157 cause), an error of type <errortype>clsql-error</errortype>
1158 might be signalled.</para>
1161 <title>See Also</title>
1164 <member><link linkend="connect"><function>connect</function></link></member>
1165 <member><link linkend="disconnect"><function>disconnect</function></link></member>
1170 <title>Notes</title>
1171 <para><function>disconnect-pooled</function> is a &clsql;
1176 <refentry id="find-database">
1178 <refentrytitle>FIND-DATABASE</refentrytitle>
1181 <refname>FIND-DATABASE</refname>
1182 <refpurpose>>Locate a database object through it's
1184 <refclass>Function</refclass>
1187 <title>Syntax</title>
1188 <synopsis><function>find-database</function> <replaceable>database</replaceable> &optional <replaceable>errorp</replaceable> => <returnvalue>result</returnvalue></synopsis>
1191 <title>Arguments and Values</title>
1194 <term><parameter>database</parameter></term>
1196 <para>A database object or a string, denoting a database
1201 <term><parameter>errorp</parameter></term>
1203 <para>A generalized boolean. Defaults to
1204 <symbol>t</symbol>.</para>
1208 <term><parameter>db-type</parameter></term>
1211 A keyword symbol denoting a known database back-end.
1216 <term><returnvalue>result</returnvalue></term>
1218 <para>Either a database object, or, if
1219 <parameter>errorp</parameter> is &nil;,
1220 possibly &nil;.</para>
1226 <title>Description</title>
1227 <para><function>find-database</function> locates an active
1228 database object given the specification in
1229 <parameter>database</parameter>. If
1230 <parameter>database</parameter> is an object of type
1231 <type>database</type>, <function>find-database</function>
1232 returns this. Otherwise it will search the active databases
1233 as indicated by the list returned by
1234 <function>connected-databases</function> for a database of
1235 type <parameter>db-type</parameter> whose name (as returned by
1236 <function>database-name</function> is equal as per
1237 <function>string=</function> to the string passed as
1238 <parameter>database</parameter>. If it succeeds, it returns
1239 the first database found.</para>
1241 If <parameter>db-type</parameter> is &nil; all databases
1242 matching the string <parameter>database</parameter> are
1243 considered. If no matching databases are found and
1244 <parameter>errorp</parameter> is &nil; then &nil; is
1245 returned. If <parameter>errorp</parameter> is &nil; and one or
1246 more matching databases are found, then the most recently
1247 connected database is returned as a first value and the
1248 number of matching databases is returned as a second
1249 value. If no, or more than one, matching databases are found
1250 and <parameter>errorp</parameter> is true, an error is
1255 <title>Examples</title>
1257 (database-name-from-spec '("dent" "newesim" "dent" "dent") :mysql)
1258 => "dent/newesim/dent"
1259 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql)
1260 => #<CLSQL-MYSQL:MYSQL-DATABASE {48391DCD}>
1261 (database-name *default-database*)
1262 => "dent/newesim/dent"
1264 (database-name-from-spec '(nil "template1" "dent" nil) :postgresql)
1265 => "/template1/dent"
1266 (connect '(nil "template1" "dent" nil) :database-type :postgresql)
1267 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {48392D2D}>
1268 (database-name *default-database*)
1269 => "/template1/dent"
1271 (database-name-from-spec '("www.pmsf.de" "template1" "dent" nil) :postgresql)
1272 => "www.pmsf.de/template1/dent"
1274 (find-database "dent/newesim/dent")
1275 => #<CLSQL-MYSQL:MYSQL-DATABASE {484E91C5}>
1276 (find-database "/template1/dent")
1277 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {48392D2D}>
1278 (find-database "www.pmsf.de/template1/dent" nil)
1281 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {48392D2D}>
1285 <title>Side Effects</title>
1289 <title>Affected By</title>
1292 <member><link linkend="connected-databases"><function>connected-databases</function></link></member>
1297 <title>Exceptional Situations</title>
1298 <para>Will signal an error of type
1299 <errortype>clsql-error</errortype> if no matching database
1300 can be found, and <parameter>errorp</parameter> is true.
1301 Will signal an error if the value of
1302 <parameter>database</parameter> is neither an object of type
1303 <type>database</type> nor a string.</para>
1306 <title>See Also</title>
1310 linkend="database-name"><function>database-name</function></link></member>
1312 linkend="database-name-from-spec"><function>database-name-from-spec</function></link></member>
1313 <member><link linkend="disconnect"><function>disconnect</function></link></member>
1314 <member><link linkend="connect"><function>connect</function></link></member>
1315 <member><link linkend="status"><function>status</function></link></member>
1316 <member><link linkend="connected-databases"><function>connected-databases</function></link></member>
1321 <title>Notes</title>
1322 <para>The <parameter>db-type</parameter> keyword argument to
1323 <function>find-database</function> is a &clsql;
1328 <refentry id="initialize-database-type">
1330 <refentrytitle>INITIALIZE-DATABASE-TYPE</refentrytitle>
1333 <refname>INITIALIZE-DATABASE-TYPE</refname>
1334 <refpurpose>Initializes a database type</refpurpose>
1335 <refclass>Function</refclass>
1338 <title>Syntax</title>
1340 <function>initialize-database-type &key database-type</function> => <returnvalue>result</returnvalue></synopsis>
1343 <title>Arguments and Values</title>
1346 <term><parameter>database-type</parameter></term>
1348 <para>The database type to initialize, i.e. a keyword
1349 symbol denoting a known database back-end. Defaults to
1351 <symbol>*default-database-type*</symbol>.</para>
1355 <term><returnvalue>result</returnvalue></term>
1357 <para>Either &nil; if the initialization
1358 attempt fails, or <symbol>t</symbol> otherwise.</para>
1364 <title>Description</title>
1365 <para>If the back-end specified by
1366 <parameter>database-type</parameter> has not already been
1367 initialized, as seen from
1368 <symbol>*initialized-database-types*</symbol>, an attempt is
1369 made to initialize the database. If this attempt succeeds,
1370 or the back-end has already been initialized, the function
1371 returns t, and places the keyword denoting the database type
1372 onto the list stored in
1373 <symbol>*initialized-database-types*</symbol>, if not
1374 already present.</para>
1375 <para>If initialization fails, the function returns
1376 &nil;, and/or signals an error of type
1377 <errortype>clsql-error</errortype>. The kind of action
1378 taken depends on the back-end and the cause of the
1382 <title>Examples</title>
1384 *initialized-database-types*
1386 (setf *default-database-type* :mysql)
1388 (initialize-database-type)
1389 >> Compiling LAMBDA (#:G897 #:G898 #:G901 #:G902):
1390 >> Compiling Top-Level Form:
1393 *initialized-database-types*
1395 (initialize-database-type)
1397 *initialized-database-types*
1402 <title>Side Effects</title>
1403 <para>The database back-end corresponding to the database type
1404 specified is initialized, unless it has already been
1405 initialized. This can involve any number of other side
1406 effects, as determined by the back-end implementation (like
1407 e.g. loading of foreign code, calling of foreign code,
1408 networking operations, etc.). If initialization is
1409 attempted and succeeds, the
1410 <parameter>database-type</parameter> is pushed onto the list
1412 <symbol>*initialized-database-types*</symbol>.</para>
1415 <title>Affected by</title>
1418 <member><symbol>*default-database-type*</symbol></member>
1419 <member><symbol>*initialized-database-types*</symbol></member>
1424 <title>Exceptional Situations</title>
1425 <para>If an error is encountered during the initialization
1426 attempt, the back-end may signal errors of kind
1427 <errortype>clsql-error</errortype>.</para>
1430 <title>See Also</title>
1432 <member><link linkend="initialized-database-types"><function>*initialized-database-types*</function></link></member>
1433 <member><link linkend="default-database-type"><function>*default-database-type*</function></link></member>
1437 <title>Notes</title>
1442 <refentry id="reconnect">
1444 <refentrytitle>RECONNECT</refentrytitle>
1447 <refname>RECONNECT</refname>
1448 <refpurpose>Re-establishes the connection between a database object and its RDBMS.</refpurpose>
1449 <refclass>Function</refclass>
1452 <title>Syntax</title>
1454 <function>reconnect</function> &key <parameter>database</parameter> <parameter>error</parameter> <parameter>force</parameter> => <returnvalue>result</returnvalue></synopsis>
1457 <title>Arguments and Values</title>
1460 <term><parameter>database</parameter></term>
1462 <para>The database to reconnect, which defaults to the
1463 database indicated by
1464 <symbol>*default-database*</symbol>.</para>
1468 <term><parameter>error</parameter></term>
1470 <para>A boolean flag indicating whether to signal an error
1471 if <parameter>database</parameter> is non-nil but cannot
1472 be found. The default value is &nil;.
1477 <term><parameter>force</parameter></term>
1479 <para>A Boolean indicating whether to signal an error if the
1480 database connection has been lost. The default value is &t;.
1485 <term><parameter>result</parameter></term>
1487 <para>A Boolean indicating whether the database was
1488 successfully reconnected.
1495 <title>Description</title>
1496 <para>Reconnects <parameter>database</parameter> which defaults
1497 to <symbol>*default-database*</symbol> to the underlying
1498 database management system. On success, &t; is returned and the
1499 variable <symbol>*default-database*</symbol> is set to the newly
1500 reconnected database. If <parameter>database</parameter> is a
1501 database instance, this object is closed. If
1502 <parameter>database</parameter> is a string, then a connected
1503 database whose name matches <parameter>database</parameter> is
1504 sought in the list of connected databases. If no matching
1505 database is found and <parameter>error</parameter> and
1506 <parameter>database</parameter> are both non-&nil; an error is
1507 signaled, otherwise &nil; is returned.</para>
1509 <para> When the current database connection has been lost, if
1510 <parameter>force</parameter> is non-&nil; as it is by default, the
1511 connection is closed and errors are suppressed. If
1512 <parameter>force</parameter> is &nil; and the database connection
1513 cannot be closed, an error is signalled.
1517 <title>Examples</title>
1520 => #<CLSQL-SQLITE:SQLITE-DATABASE :memory: OPEN {48CFBEA5}>
1522 => #<CLSQL-SQLITE:SQLITE-DATABASE :memory: OPEN {48D64105}>
1526 <title>Side Effects</title>
1527 <para>A database connection is re-established and
1528 <symbol>*default-database*</symbol> may be rebound to the supplied
1529 database object.</para>
1532 <title>Affected by</title>
1535 <member><symbol>*default-database*</symbol></member>
1540 <title>Exceptional Situations</title>
1542 An error may be signalled if the specified database cannot be
1543 located or if the database cannot be closed.
1547 <title>See Also</title>
1551 linkend="connect"><function>connect</function></link></member>
1553 linkend="disconnect"><function>disconnect</function></link></member>
1555 linkend="disconnect-pooled"><function>disconnect-pooled</function></link></member>
1560 <title>Notes</title>
1567 <refentry id="status">
1569 <refentrytitle>STATUS</refentrytitle>
1572 <refname>STATUS</refname>
1573 <refpurpose>Print information about connected databases.</refpurpose>
1574 <refclass>Function</refclass>
1577 <title>Syntax</title>
1579 <function>status</function> &optional <parameter>full</parameter> => <returnvalue></returnvalue></synopsis>
1582 <title>Arguments and Values</title>
1585 <term><parameter>full</parameter></term>
1587 <para>A boolean indicating whether to print additional
1588 table information. The default value is &nil;.
1595 <title>Description</title>
1596 <para>Prints information about the currently connected databases
1597 to <symbol>*STANDARD-OUTPUT*</symbol>. The argument
1598 <parameter>full</parameter> is &nil; by default and a value of t
1599 means that more detailed information about each database is
1604 <title>Examples</title>
1608 CLSQL STATUS: 2004-06-13 15:07:39
1609 --------------------------------------------------------
1610 DATABASE TYPE RECORDING
1611 --------------------------------------------------------
1612 localhost/test/petrov mysql nil
1613 localhost/test/petrov postgresql nil
1614 localhost/test/petrov postgresql-socket nil
1615 test/petrov odbc nil
1616 * :memory: sqlite nil
1617 --------------------------------------------------------
1621 CLSQL STATUS: 2004-06-13 15:08:08
1622 -------------------------------------------------------------------------------
1623 DATABASE TYPE RECORDING POOLED TABLES VIEWS
1624 -------------------------------------------------------------------------------
1625 localhost/test/petrov mysql nil nil 7 0
1626 localhost/test/petrov postgresql nil nil 7 0
1627 localhost/test/petrov postgresql-socket nil nil 7 0
1628 test/petrov odbc nil nil 7 0
1629 * :memory: sqlite nil nil 0 0
1630 -------------------------------------------------------------------------------
1634 <title>Side Effects</title>
1640 <title>Affected by</title>
1646 <title>Exceptional Situations</title>
1652 <title>See Also</title>
1655 <member><link linkend="connected-databases"><function>connected-databases</function></link></member>
1656 <member><link linkend="connect"><function>connect</function></link></member>
1657 <member><link linkend="disconnect"><function>disconnect</function></link></member>
1658 <member><link linkend="connect-if-exists"><function>*connect-if-exists*</function></link></member>
1659 <member><link linkend="find-database"><function>find-database</function></link></member>
1664 <title>Notes</title>
1672 <!-- create/probe/list/destroytruncate-database -->
1674 <refentry id="create-database">
1676 <refentrytitle>CREATE-DATABASE</refentrytitle>
1679 <refname>CREATE-DATABASE</refname>
1680 <refpurpose>create a database</refpurpose>
1681 <refclass>Function</refclass>
1684 <title>Syntax</title>
1685 <synopsis><function>create-database</function> <replaceable>connection-spec</replaceable> &key <replaceable>database-type</replaceable> => <returnvalue>success</returnvalue></synopsis>
1688 <title>Arguments and Values</title>
1691 <term><parameter>connection-spec</parameter></term>
1693 <para>A connection specification</para>
1697 <term><parameter>database-type</parameter></term>
1699 <para>A database type specifier, i.e. a keyword.
1700 This defaults to the value of
1701 <symbol>*default-database-type*</symbol></para>
1705 <term><parameter>success</parameter></term>
1707 <para>A boolean flag. If &t;, a new database was
1708 successfully created.
1715 <title>Description</title>
1716 <para>This function creates a database in the database system
1717 specified by <parameter>database-type</parameter>.
1721 <title>Examples</title>
1723 (create-database '("localhost" "new" "dent" "dent") :database-type :mysql)
1726 (create-database '("localhost" "new" "dent" "badpasswd") :database-type :mysql)
1728 Error: While trying to access database localhost/new/dent
1729 using database-type MYSQL:
1730 Error database-create failed: mysqladmin: connect to server at 'localhost' failed
1731 error: 'Access denied for user: 'root@localhost' (Using password: YES)'
1733 [condition type: CLSQL-ACCESS-ERROR]
1737 <title>Side Effects</title>
1738 <para>A database will be created on the filesystem of the host.</para>
1741 <title>Exceptional Situations</title>
1742 <para>An exception will be thrown if the database system does
1743 not allow new databases to be created or if database creation
1747 <title>See Also</title>
1750 <member><link linkend="destroy-database"><function>destroy-database</function></link></member>
1751 <member><link linkend="probe-database"><function>probe-database</function></link></member>
1752 <member><link linkend="list-databases"><function>list-databases</function></link></member>
1757 <title>Notes</title>
1758 <para>This function may invoke the operating systems
1759 functions. Thus, some database systems may require the
1760 administration functions to be available in the current
1761 <symbol>PATH</symbol>. At this time, the
1762 <symbol>:mysql</symbol> backend requires
1763 <filename>mysqladmin</filename> and the
1764 <symbol>:postgresql</symbol> backend requires
1765 <filename>createdb</filename>.</para>
1767 <function>create-database</function> is a &clsql; extension.
1772 <refentry id="destroy-database">
1774 <refentrytitle>DESTROY-DATABASE</refentrytitle>
1777 <refname>DESTROY-DATABASE</refname>
1778 <refpurpose>destroys a database</refpurpose>
1779 <refclass>Function</refclass>
1782 <title>Syntax</title>
1783 <synopsis><function>destroy-database</function> <replaceable>connection-spec</replaceable> &key <replaceable>database-type</replaceable> => <returnvalue>success</returnvalue></synopsis>
1786 <title>Arguments and Values</title>
1789 <term><parameter>connection-spec</parameter></term>
1791 <para>A connection specification</para>
1795 <term><parameter>database-type</parameter></term>
1797 <para>A database type specifier, i.e. a keyword.
1798 This defaults to the value of
1799 <symbol>*default-database-type*</symbol></para>
1803 <term><parameter>success</parameter></term>
1805 <para>A boolean flag. If &t;, the database was
1806 successfully destroyed.
1813 <title>Description</title>
1814 <para>This function destroys a database in the database system
1815 specified by <parameter>database-type</parameter>.
1819 <title>Examples</title>
1821 (destroy-database '("localhost" "new" "dent" "dent") :database-type :postgresql)
1824 (destroy-database '("localhost" "new" "dent" "dent") :database-type :postgresql)
1826 Error: While trying to access database localhost/test2/root
1827 using database-type POSTGRESQL:
1828 Error database-destroy failed: dropdb: database removal failed: ERROR: database "test2" does not exist
1830 [condition type: CLSQL-ACCESS-ERROR]
1834 <title>Side Effects</title>
1835 <para>A database will be removed from the filesystem of the host.</para>
1838 <title>Exceptional Situations</title>
1839 <para>An exception will be thrown if the database system does not
1840 allow databases to be removed, the database does not exist, or
1841 if database removal fails.</para>
1844 <title>See Also</title>
1847 <member><link linkend="create-database"><function>create-database</function></link></member>
1848 <member><link linkend="probe-database"><function>probe-database</function></link></member>
1849 <member><link linkend="list-databases"><function>list-databases</function></link></member>
1854 <title>Notes</title>
1855 <para>This function may invoke the operating systems
1856 functions. Thus, some database systems may require the
1857 administration functions to be available in the current
1858 <symbol>PATH</symbol>. At this time, the
1859 <symbol>:mysql</symbol> backend requires
1860 <filename>mysqladmin</filename> and the
1861 <symbol>:postgresql</symbol> backend requires
1862 <filename>dropdb</filename>.</para>
1864 <function>destroy-database</function> is a &clsql; extension.
1869 <refentry id="probe-database">
1871 <refentrytitle>PROBE-DATABASE</refentrytitle>
1874 <refname>PROBE-DATABASE</refname>
1875 <refpurpose>tests for existence of a database</refpurpose>
1876 <refclass>Function</refclass>
1879 <title>Syntax</title>
1880 <synopsis><function>probe-database</function> <replaceable>connection-spec</replaceable> &key <replaceable>database-type</replaceable> => <returnvalue>success</returnvalue></synopsis>
1883 <title>Arguments and Values</title>
1886 <term><parameter>connection-spec</parameter></term>
1888 <para>A connection specification</para>
1892 <term><parameter>database-type</parameter></term>
1894 <para>A database type specifier, i.e. a keyword.
1895 This defaults to the value of
1896 <symbol>*default-database-type*</symbol></para>
1900 <term><parameter>success</parameter></term>
1902 <para>A boolean flag. If &t;, the database exists
1903 in the database system.
1910 <title>Description</title>
1911 <para>This function tests for the existence of a database in
1912 the database system specified by
1913 <parameter>database-type</parameter>.
1917 <title>Examples</title>
1919 (probe-database '("localhost" "new" "dent" "dent") :database-type :postgresql)
1924 <title>Side Effects</title>
1928 <title>Exceptional Situations</title>
1929 <para>An exception maybe thrown if the database system does
1930 not receive administrator-level authentication since function
1931 may need to read the administrative database of the database
1935 <title>See Also</title>
1938 <member><link linkend="create-database"><function>create-database</function></link></member>
1939 <member><link linkend="destroy-database"><function>destroy-database</function></link></member>
1940 <member><link linkend="list-databases"><function>list-databases</function></link></member>
1945 <title>Notes</title>
1947 <function>probe-database</function> is a &clsql; extension.
1952 <refentry id="list-databases">
1954 <refentrytitle>LIST-DATABASES</refentrytitle>
1957 <refname>LIST-DATABASES</refname>
1958 <refpurpose>List databases matching the supplied connection spec
1959 and database type.</refpurpose>
1960 <refclass>Function</refclass>
1963 <title>Syntax</title>
1965 <function>list-databases</function> <parameter>connection-spec</parameter> &key <parameter>database-type</parameter> => <returnvalue>result</returnvalue></synopsis>
1968 <title>Arguments and Values</title>
1971 <term><parameter>connection-spec</parameter></term>
1973 <para>A connection specification</para>
1977 <term><parameter>database-type</parameter></term>
1979 <para>A database type specifier, i.e. a keyword.
1980 This defaults to the value of
1981 <symbol>*default-database-type*</symbol></para>
1985 <term><parameter>result</parameter></term>
1987 <para>A list of matching databases.
1994 <title>Description</title>
1996 This function returns a list of databases existing in the
1997 database system specified by
1998 <parameter>database-type</parameter>.
2002 <title>Examples</title>
2004 (list-databases '("localhost" "new" "dent" "dent") :database-type :postgresql)
2005 => ("address-book" "sql-test" "template1" "template0" "test1" "dent" "test")
2009 <title>Side Effects</title>
2015 <title>Affected by</title>
2021 <title>Exceptional Situations</title>
2023 An exception maybe thrown if the database system does not
2024 receive administrator-level authentication since function may
2025 need to read the administrative database of the database
2030 <title>See Also</title>
2033 <member><link linkend="create-database"><function>create-database</function></link></member>
2034 <member><link linkend="destroy-database"><function>destroy-database</function></link></member>
2035 <member><link linkend="probe-database"><function>probe-database</function></link></member>
2040 <title>Notes</title>
2042 <function>list-databases</function> is a &clsql; extension.
2048 <!-- with-database and with-default-database -->
2050 <refentry id="with-database">
2052 <refentrytitle>WITH-DATABASE</refentrytitle>
2055 <refname>WITH-DATABASE</refname>
2056 <refpurpose>Execute a body of code with a variable bound to a
2057 specified database object.</refpurpose>
2058 <refclass>Macro</refclass>
2061 <title>Syntax</title>
2063 <function>with-database</function> <replaceable>db-var</replaceable> <replaceable>connection-spec</replaceable> &rest <replaceable>connect-args</replaceable> &body <replaceable>body</replaceable> => <returnvalue>result</returnvalue></synopsis>
2066 <title>Arguments and Values</title>
2069 <term><parameter>db-var</parameter></term>
2071 <para>A variable which is bound to the specified database.
2076 <term><parameter>connection-spec</parameter></term>
2078 <para>A vendor specific connection specification supplied
2079 as a list or as a string.</para>
2083 <term><parameter>connect-args</parameter></term>
2085 <para>Other optional arguments to
2086 <function>connect</function>. This macro use a value of
2087 &nil; for <function>connect</function>'s
2088 <replaceable>make-default</replaceable> key, This is in
2089 contrast to to the connect function which has a default
2090 value of &t; for <replaceable>make-default</replaceable>.
2095 <term><parameter>body</parameter></term>
2097 <para>A Lisp code body.
2102 <term><parameter>result</parameter></term>
2104 <para>Determined by the result of executing the last
2105 expression in <parameter>body</parameter>.
2112 <title>Description</title>
2113 <para>Evaluate <parameter>body</parameter> in an environment,
2114 where <parameter>db-var</parameter> is bound to the database
2115 connection given by <parameter>connection-spec</parameter> and
2116 <parameter>connect-args</parameter>. The connection is
2117 automatically closed or released to the pool on exit from the
2122 <title>Examples</title>
2124 (connected-databases)
2126 (with-database (db '(":memory:") :database-type :sqlite
2130 (connected-databases)
2135 <title>Side Effects</title>
2137 See <function>connect</function> and <function>disconnect</function>.
2141 <title>Affected by</title>
2143 See <function>connect</function> and <function>disconnect</function>.
2147 <title>Exceptional Situations</title>
2149 See <function>connect</function> and <function>disconnect</function>.
2153 <title>See Also</title>
2156 <member><link linkend="connect"><function>connect</function></link></member>
2157 <member><link linkend="disconnect"><function>disconnect</function></link></member>
2158 <member><link linkend="disconnect-pooled"><function>disconnect-pooled</function></link></member>
2159 <member><link linkend="with-default-database"><function>with-default-database</function></link></member>
2164 <title>Notes</title>
2166 <function>with-database</function> is a &clsql; extension.
2171 <refentry id="with-default-database">
2173 <refentrytitle>WITH-DEFAULT-DATABASE</refentrytitle>
2176 <refname>WITH-DEFAULT-DATABASE</refname>
2177 <refpurpose>Execute a body of code with <symbol>*default-database*</symbol> bound to a specified database.</refpurpose>
2178 <refclass>Macro</refclass>
2181 <title>Syntax</title>
2183 <function>with-default-database</function> <replaceable>database</replaceable> &rest <replaceable>body</replaceable> => <returnvalue>result</returnvalue></synopsis>
2186 <title>Arguments and Values</title>
2189 <term><parameter>database</parameter></term>
2191 <para>An active database object.
2196 <term><parameter>body</parameter></term>
2198 <para>A Lisp code body.
2203 <term><parameter>result</parameter></term>
2205 <para>Determined by the result of executing the last
2206 expression in <parameter>body</parameter>.
2213 <title>Description</title>
2214 <para>Perform <parameter>body</parameter> with
2215 <parameter>DATABASE</parameter> bound as
2216 <symbol>*default-database*</symbol>.
2220 <title>Examples</title>
2223 => #<CLSQL-ODBC:ODBC-DATABASE new/dent OPEN {49095CAD}>
2225 (let ((database (clsql:find-database ":memory:")))
2226 (with-default-database (database)
2227 (database-name *default-database*)))
2232 <title>Side Effects</title>
2238 <title>Affected by</title>
2244 <title>Exceptional Situations</title>
2246 Calls to &clsql; functions in <parameter>body</parameter> may signal
2247 errors if <parameter>database</parameter> is not an active database
2252 <title>See Also</title>
2255 <member><link linkend="with-database"><function>with-database</function></link></member>
2256 <member><link linkend="default-database"><symbol>*default-database*</symbol></link></member>
2261 <title>Notes</title>
2263 <function>with-default-database</function> is a &clsql; extension.