+ </varlistentry>
+ </variablelist>
+ </refsect1>
+ <refsect1>
+ <title>Slot Options</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <parameter>:db-kind</parameter> - specifies the kind of
+ database mapping which is performed for this slot and
+ defaults to <parameter>:base</parameter> which indicates
+ that the slot maps to an ordinary column of the database
+ table. A <parameter>:db-kind</parameter> value of
+ <parameter>:key</parameter> indicates that this slot is a
+ special kind of <parameter>:base</parameter> slot which
+ maps onto a column which is one of the unique keys for the
+ database table, the value <parameter>:join</parameter>
+ indicates this slot represents a join onto another
+ <glossterm linkend="gloss-view-class">View Class</glossterm>
+ which contains View Class objects, and the value
+ <parameter>:virtual</parameter> indicates a standard CLOS
+ slot which does not map onto columns of the database
+ table.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:db-info</parameter> - if a slot is specified
+ with <parameter>:db-kind</parameter>
+ <parameter>:join</parameter>, the slot option
+ <parameter>:db-info</parameter> contains a property list
+ which specifies the nature of the join. The valid members
+ of the list are:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <parameter>:join-class</parameter>
+ <emphasis>class-name</emphasis> - the name of the
+ class to join on.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:home-key</parameter>
+ <emphasis>slot-name</emphasis> - the name of the slot
+ of this class for joining
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:foreign-key</parameter>
+ <emphasis>slot-name</emphasis> - the name of the slot
+ of the <parameter>:join-class</parameter> for joining
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:target-slot</parameter>
+ <emphasis>target-slot</emphasis> - this is an optional
+ parameter. If specified, then the join slot of the
+ defining class will contain instances of this target
+ slot rather than of the join class. This can be useful
+ when the <parameter>:join-class</parameter> is an
+ intermediate class in a
+ <emphasis>many-to-many</emphasis> relationship and the
+ application is actually interested in the
+ <parameter>:target-slot</parameter>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:retrieval</parameter>
+ <emphasis>time</emphasis> - The default value is
+ <parameter>:deferred</parameter>, which defers filling
+ this slot until the value is accessed. The other valid
+ value is <parameter>:immediate</parameter> which
+ performs the SQL query when the instance of the class
+ is created. In this case, the
+ <parameter>:set</parameter> is automatically set to
+ &nil;
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:set</parameter> <emphasis>set</emphasis> -
+ This controls what is stored in the join slot. The
+ default value is &t;. When <emphasis>set</emphasis> is
+ &t; and <emphasis>target-slot</emphasis> is undefined,
+ the join slot will contain a list of instances of the
+ join class. Whereas, if
+ <emphasis>target-slot</emphasis> is defined, then the
+ join slot will contain a list of pairs of
+ <emphasis>(target-value join-instance)</emphasis>.
+ When <emphasis>set</emphasis> is &nil;, the join slot
+ will contain a single instances.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:type</parameter> - for slots of
+ <parameter>:db-kind</parameter> <parameter>:base</parameter> or
+ <parameter>:key</parameter>, the <parameter>:type</parameter> slot
+ option has a special interpretation such that Lisp
+ types, such as string, integer and float are
+ automatically converted into appropriate SQL types for
+ the column onto which the slot maps. This behaviour may
+ be overridden using the <parameter>:db-type</parameter> slot
+ option. The valid values are:
+ <simplelist>
+ <member>
+ <parameter>string</parameter> - a variable length
+ character field up to <link
+ linkend="default-string-length">*default-string-length*</link>
+ characters.
+ </member>
+ <member>
+ <parameter>(string n)</parameter> - a fixed length
+ character field <parameter>n</parameter> characters
+ long.
+ </member>
+ <member>
+ <parameter>varchar</parameter> - a variable length
+ character field up to <link
+ linkend="default-string-length">*default-string-length*</link>
+ characters.
+ </member>
+ <member>
+ <parameter>(varchar n)</parameter> - a variable length
+ character field up to <parameter>n</parameter>
+ characters in length.
+ </member>
+ <member>
+ <parameter>char</parameter> - a single character field
+ </member>
+ <member><parameter>integer</parameter> - signed integer
+ at least 32-bits wide</member>
+ <member><parameter>(integer n)</parameter></member>
+ <member><parameter>float</parameter></member>
+ <member><parameter>(float n)</parameter></member>
+ <member><parameter>long-float</parameter></member>
+ <member><parameter>number</parameter></member>
+ <member><parameter>(number n)</parameter></member>
+ <member><parameter>(number n p)</parameter></member>
+ <member>
+ <parameter>tinyint</parameter> - An integer column 8-bits
+ wide. [not supported by all database backends]
+ </member>
+ <member>
+ <parameter>smallint</parameter> - An integer column 16-bits
+ wide. [not supported by all database backends]
+ </member>
+ <member>
+ <parameter>bigint</parameter> - An integer column
+ 64-bits wide. [not supported by all database backends]
+ </member>
+ <member>
+ <parameter>universal-time</parameter> - an integer
+ field sufficiently wide to store a
+ universal-time. On most databases, a slot of this
+ type assigned a SQL type of
+ <parameter>BIGINT</parameter>
+ </member>
+ <member>
+ <parameter>wall-time</parameter> - a slot which stores
+ a date and time in a SQL timestamp column. &clsql;
+ provides a number of time manipulation functions to
+ support objects of type <type>wall-time</type>.
+ </member>
+ <member>
+ <parameter>date</parameter> - a slot which stores the
+ date (without any time of day resolution) in a
+ column. &clsql; provides a number of time
+ manipulation functions that operate on date values.
+ </member>
+ <member>
+ <parameter>duration</parameter> - stores a
+ <type>duration</type> structure. &clsql; provides
+ routines for <type>wall-time</type> and
+ <type>duration</type> processing.
+ </member>
+ <member><parameter>boolean</parameter> - stores a &t; or
+ &nil; value.</member>
+ <member>
+ <parameter>generalized-boolean</parameter> - similar
+ to a <parameter>boolean</parameter> in that either a
+ &t; or &nil; value is stored in the SQL
+ database. However, any Lisp object can be stored in
+ the Lisp object. A Lisp value of &nil; is stored as
+ <constant>FALSE</constant> in the database, any
+ other Lisp value is stored as
+ <constant>TRUE</constant>.
+ </member>
+ <member>
+ <parameter>keyword</parameter> - stores a keyword
+ </member>
+ <member><parameter>symbol</parameter> - stores a symbol</member>
+ <member>
+ <parameter>list</parameter> - stores a list by writing
+ it to a string. The items in the list must be able to
+ be readable written.
+ </member>
+ <member><parameter>vector</parameter> - stores a vector
+ similarly to <parameter>list</parameter></member>
+ <member><parameter>array</parameter> - stores a array
+ similarly to <parameter>list</parameter></member>
+ </simplelist>
+ </para>
+
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:column</parameter> - specifies the name of
+ the SQL column which the slot maps onto, if
+ <parameter>:db-kind</parameter> is not
+ <parameter>:virtual</parameter>, and defaults to the
+ slot name. If the slot name is used for the SQL column
+ name, any hypens in the slot name are converted
+ to underscore characters.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:void-value</parameter> - specifies the value
+ to store in the Lisp instance if the SQL value is NULL and
+ defaults to NIL.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:db-constraints</parameter> - is a keyword
+ symbol representing an SQL column constraint expression or
+ a list of such symbols. The following column constraints
+ are supported: <symbol>:not-null</symbol>,
+ <symbol>:primary-key</symbol>, <symbol>:unique</symbol>,
+ <symbol>:unsigned</symbol> (&mysql; specific),
+ <symbol>:zerofill</symbol> (&mysql; specific) and
+ <symbol>:auto-increment</symbol> (&mysql; specific).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:db-type</parameter> - a string to specify the SQL
+ column type. If specified, this string overrides the SQL
+ column type as computed from the <parameter>:type</parameter>
+ slot value.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:db-reader</parameter> - If a string, then when
+ reading values from the database, the string will be used
+ for a format string, with the only value being the value
+ from the database. The resulting string will be used as
+ the slot value. If a function then it will take one
+ argument, the value from the database, and return the
+ value that should be put into the slot. If a symbol, then
+ the symbol-function of the symbol will be used.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>:db-writer</parameter> - If a string, then when
+ reading values from the slot for the database, the string
+ will be used for a format string, with the only value
+ being the value of the slot. The resulting string will be
+ used as the column value in the database. If a function
+ then it will take one argument, the value of the slot, and
+ return the value that should be put into the database. If
+ a symbol, then the symbol-function of the symbol will be
+ used.
+ </para>
+ </listitem>