+ <simplelist>
+ <member><link linkend="update-instance-from-records"><function>update-instance-from-records</function></link></member>
+ <member><link linkend="update-objects-joins"><function>update-objects-joins</function></link></member>
+ </simplelist>
+ </refsect1>
+ <refsect1>
+ <title>Notes</title>
+ <para>
+ None.
+ </para>
+ </refsect1>
+ </refentry>
+
+ <refentry id="update-objects-joins">
+ <refnamediv>
+ <refname>UPDATE-OBJECTS-JOINS</refname>
+ <refpurpose>Updates joined slots of objects.</refpurpose>
+ <refclass>Function</refclass>
+ </refnamediv>
+ <refsect1>
+ <title>Syntax</title>
+ <synopsis>
+ <function>update-objects-joins</function> <replaceable>objects</replaceable> &key <replaceable>slots</replaceable> <replaceable>force-p</replaceable> <replaceable>class-name</replaceable> <replaceable>max-len</replaceable> => <returnvalue><!-- no result --></returnvalue></synopsis>
+ </refsect1>
+ <refsect1>
+ <title>Arguments and Values</title>
+ <variablelist>
+ <varlistentry>
+ <term><parameter>objects</parameter></term>
+ <listitem>
+ <para>
+ A list of instances of a <glossterm
+ linkend="gloss-view-class">View Class</glossterm>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><parameter>slots</parameter></term>
+ <listitem>
+ <para>* :immediate (default) - refresh join slots with :retrieval :immediate</para>
+ <para>* :deferred - refresh join slots created with :retrieval :deferred</para>
+ <para>* :all,t - refresh all join slots regardless of :retrieval</para>
+ <para>* list of symbols - which explicit slots to refresh</para>
+ <para>* a single symobl - what slot to refresh</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><parameter>force-p</parameter></term>
+ <listitem>
+ <para>
+ A Boolean, defaulting to &t;.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><parameter>class-name</parameter></term>
+ <listitem>
+ <para>
+ A list of instances of a <glossterm
+ linkend="gloss-view-class">View Class</glossterm>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><parameter>max-len</parameter></term>
+ <listitem>
+ <para>
+ A non-negative integer or &nil; defaulting to
+ <symbol>*default-update-objects-max-len*</symbol>.
+ When non-nil this is essentially a batch size for the max number of objects
+ to query from the database at a time. If we need more than max-len
+ we loop till we have all the objects
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+ <refsect1>
+ <title>Description</title>
+ <para>
+ Updates from the records of the appropriate database tables the join slots
+ specified by SLOTS in the supplied list of
+ <glossterm linkend="gloss-view-class">View Class</glossterm> instances OBJECTS.
+
+ A simpler method of causing a join-slot to be requeried is to set it to
+ unbound, then request it again. This function has efficiency gains where
+ join-objects are shared among the `objects` (querying all join-objects,
+ then attaching them appropriately to each of the `objects`)
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>Examples</title>
+ <screen>
+(defvar *addresses* (select 'deferred-employee-address :order-by [ea_join aaddressid] :flatp t))
+=> *ADDRESSES*
+(slot-boundp (car *addresses*) 'address)
+=> NIL
+(update-objects-joins *addresses*)
+=>
+(slot-boundp (car *addresses*) 'address)
+=> T
+(slot-value (car *addresses*) 'address)
+=> #<ADDRESS {480B0F1D}>
+ </screen>
+ </refsect1>
+ <refsect1>
+ <title>Side Effects</title>
+ <para>
+ The slot values of <parameter>objects</parameter> are modified.
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>Affected by</title>
+ <para>
+ <simplelist>
+ <member><link
+ linkend="default-update-objects-max-len"><varname>*default-update-objects-max-len*</varname></link></member>
+ </simplelist>
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>Exceptional Situations</title>