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 <!-- Connection and Initialisation -->
9 <reference id="ref-connect">
10 <title>Connection and Initialisation</title>
17 <refentry id="database">
19 <refname>DATABASE</refname>
20 <refpurpose>The super-type of all &clsql; databases</refpurpose>
21 <refclass>Class</refclass>
24 <title>Class Precedence List</title>
26 <simplelist type="inline">
27 <member><type>database</type></member>
28 <member><type>standard-object</type></member>
29 <member><type>t</type></member>
34 <title>Description</title> <para>This class is the superclass
35 of all &clsql; databases. The different database back-ends
36 derive subclasses of this class to implement their databases.
37 No instances of this class are ever created by &clsql;.</para>
40 <title class="contenttitle">Class details</title>
41 <programlisting>(defclass DATABASE ()(...))</programlisting>
44 <title class="contenttitle">Slots</title>
47 <property>slot COMMAND-RECORDING-STREAM is of type T</property>
48 <property>slot CONN-POOL is of type T</property>
49 <property>slot NAME is of type T</property>
50 <property>slot RECORD-CACHES is of type T</property>
51 <property>slot RESULT-RECORDING-STREAM is of type T</property>
52 <property>slot STATE is of type T</property>
53 <property>slot TRANSACTION is of type T</property>
54 <property>slot TRANSACTION-LEVEL is of type T</property>
55 <property>slot VIEW-CLASSES is of type T</property>
61 <refentry id="connect-if-exists">
63 <refname>*CONNECT-IF-EXISTS*</refname>
64 <refpurpose>Default value for the
65 <parameter>if-exists</parameter> parameter of
66 <function>connect</function>.</refpurpose>
67 <refclass>Variable</refclass>
70 <title>Value Type</title>
71 <para>A valid argument to the <parameter>if-exists</parameter>
72 parameter of <function>connect</function>, i.e. one of
73 <simplelist type="inline">
74 <member><symbol>:new</symbol></member>
75 <member><symbol>:warn-new</symbol></member>
76 <member><symbol>:error</symbol></member>
77 <member><symbol>:warn-old</symbol></member>
78 <member><symbol>:old</symbol></member>
83 <title>Initial Value</title>
84 <para><symbol>:error</symbol></para>
87 <title>Description</title>
88 <para>The value of this variable is used in calls to
89 <function>connect</function> as the default
90 value of the <parameter>if-exists</parameter>
92 linkend="connect"><function>connect</function></link> for
93 the semantics of the valid values for this variable.</para>
96 <title>Examples</title>
100 <title>Affected By</title>
104 <title>See Also</title>
108 linkend="connect"><function>connect</function></link></member>
119 <refentry id="default-database">
121 <refname>*DEFAULT-DATABASE*</refname>
122 <refpurpose>The default database object to use</refpurpose>
123 <refclass>Variable</refclass>
126 <title>Value Type</title>
127 <para>Any object of type <type>database</type>, or nil to
128 indicate no default database.</para>
131 <title>Initial Value</title>
132 <para><symbol>nil</symbol></para>
135 <title>Description</title>
136 <para>Any function or macro in
137 &clsql; that operates on a
138 database uses the value of this variable as the default
139 value for it's <parameter>database</parameter>
141 <para>The value of this parameter is changed by calls to
142 <function>connect</function>, which sets
143 <symbol>*default-database*</symbol> to the database object
144 it returns. It is also changed by calls to
145 <function>disconnect</function>, when the database object
146 being disconnected is the same as the value of
147 <symbol>*default-database*</symbol>. In this case
148 <function>disconnect</function> sets
149 <symbol>*default-database*</symbol> to the first database
150 that remains in the list of active databases as returned by
151 <function>connected-databases</function>, or
152 <symbol>nil</symbol> if no further active databases
154 <para>The user may change <symbol>*default-database*</symbol>
155 at any time to a valid value of his choice.</para>
157 <para>If the value of <symbol>*default-database*</symbol> is
158 <symbol>nil</symbol>, then all calls to
159 &clsql; functions on databases
160 must provide a suitable <parameter>database</parameter>
161 parameter, or an error will be signalled.</para>
165 <title>Examples</title>
167 (connected-databases)
169 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql)
170 => #<CLSQL-MYSQL:MYSQL-DATABASE {48385F55}>
171 (connect '(nil "template1" "dent" nil) :database-type :postgresql)
172 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {483868FD}>
173 (connect '("dent" "newesim" "dent" "dent") :database-type :mysql :if-exists :new)
174 => #<CLSQL-MYSQL:MYSQL-DATABASE {48387265}>
176 => #<CLSQL-MYSQL:MYSQL-DATABASE {48387265}>
180 => #<CLSQL-POSTGRESQL:POSTGRESQL-DATABASE {483868FD}>
184 => #<CLSQL-MYSQL:MYSQL-DATABASE {48385F55}>
189 (connected-databases)
194 <title>Affected By</title>
197 <member><link linkend="connect"><function>connect</function></link></member>
198 <member><link linkend="disconnect"><function>disconnect</function></link></member>
203 <title>See Also</title>
206 <member><link linkend="connected-databases"><function>connected-databases</function></link></member>
213 <para>This variable is intended to facilitate working with
214 &clsql; in an interactive
215 fashion at the top-level loop, and because of this,
216 <function>connect</function> and
217 <function>disconnect</function> provide some fairly
218 complex behaviour to keep
219 <symbol>*default-database*</symbol> set to useful values.
220 Programmatic use of &clsql;
221 should never depend on the value of
222 <symbol>*default-database*</symbol> and should provide
223 correct database objects via the
224 <parameter>database</parameter> parameter to functions
231 <refentry id="default-database-type">
233 <refname>*DEFAULT-DATABASE-TYPE*</refname>
234 <refpurpose>The default database type to use</refpurpose>
235 <refclass>Variable</refclass>
238 <title>Value Type</title>
239 <para>Any keyword representing a valid database back-end of
241 <symbol>nil</symbol>.</para>
244 <title>Initial Value</title>
245 <para><symbol>nil</symbol></para>
248 <title>Description</title>
249 <para>The value of this variable is used in calls to
250 <function>initialize-database-type</function> and
251 <function>connect</function> as the default
252 value of the <parameter>database-type</parameter>
255 <para>If the value of this variable is <symbol>nil</symbol>,
257 <function>initialize-database-type</function> or
258 <function>connect</function> will have to specify the
259 <parameter>database-type</parameter> to use, or a
260 general-purpose error will be signalled.</para>
264 <title>Examples</title>
266 (setf *default-database-type* :mysql)
268 (initialize-database-type)
273 <title>Affected By</title>
277 <title>See Also</title>
286 <refentry id="initialized-database-types">
288 <refname>*INITIALIZED-DATABASE-TYPES*</refname>
289 <refpurpose>List of all initialized database types</refpurpose>
290 <refclass>Variable</refclass>
293 <title>Value Type</title>
294 <para>A list of all initialized database types, each of which
295 represented by it's corresponding keyword.</para>
298 <title>Initial Value</title>
299 <para><symbol>nil</symbol></para>
302 <title>Description</title>
303 <para>This variable is updated whenever
304 <function>initialize-database-type</function> is called for a
305 database type which hasn't already been initialized before,
306 as determined by this variable. In that case the keyword
307 representing the database type is pushed onto the list
309 <symbol>*INITIALIZED-DATABASE-TYPES*</symbol>.</para>
311 <para>Attempts to modify the value of this variable will
312 result in undefined behaviour.</para>
316 <title>Examples</title>
318 (setf *default-database-type* :mysql)
320 (initialize-database-type)
322 *initialized-database-types*
327 <title>Affected By</title>
330 <member><function>initialize-database-type</function></member>
335 <title>See Also</title>
340 <para>Direct access to this variable is primarily provided
341 because of compatibility with Harlequin's <application>Common
342 SQL</application>.</para>
346 <refentry id="connect">
348 <refname>CONNECT</refname>
349 <refpurpose><!-- purpose --></refpurpose>
350 <refclass>Function</refclass>
353 <title>Syntax</title>
355 <function> (CONNECT CONNECTION-SPEC &KEY (IF-EXISTS *CONNECT-IF-EXISTS*) (MAKE-DEFAULT T) (POOL NIL) (DATABASE-TYPE *DEFAULT-DATABASE-TYPE*)) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
358 <title>Arguments and Values</title>
360 <!-- arguments and values -->
364 <title>Description</title>
365 <para>Connects to a database of the supplied DATABASE-TYPE
366 which defaults to *DEFAULT-DATABASE-TYPE*, using the
367 type-specific connection specification CONNECTION-SPEC. The
368 value of IF-EXISTS, which defaults to *CONNECT-IF-EXISTS*,
369 determines what happens if a connection to the database
370 specified by CONNECTION-SPEC is already established. A value
371 of :new means create a new connection. A value of :warn-new
372 means warn the user and create a new connect. A value of
373 :warn-old means warn the user and use the old connection. A
374 value of :error means fail, notifying the user. A value of
375 :old means return the old connection. MAKE-DEFAULT is t by
376 default which means that *DEFAULT-DATABASE* is set to the new
377 connection, otherwise *DEFAULT-DATABASE* is not changed. If
378 POOL is t the connection will be taken from the general pool,
379 if POOL is a CONN-POOL object the connection will be taken
384 <title>Examples</title>
390 <title>Side Effects</title>
392 <!-- side effects -->
396 <title>Affected by</title>
404 <title>Exceptional Situations</title>
406 <!-- execeptional situations -->
410 <title>See Also</title>
413 <!-- see also list here -->
425 <refentry id="connected-databases">
427 <refname>CONNECTED-DATABASES</refname>
428 <refpurpose><!-- purpose --></refpurpose>
429 <refclass>Function</refclass>
432 <title>Syntax</title>
434 <function> (CONNECTED-DATABASES) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
437 <title>Arguments and Values</title>
439 <!-- arguments and values -->
443 <title>Description</title>
444 <para>Returns the list of active database objects.
448 <title>Examples</title>
454 <title>Side Effects</title>
456 <!-- side effects -->
460 <title>Affected by</title>
468 <title>Exceptional Situations</title>
470 <!-- execeptional situations -->
474 <title>See Also</title>
489 <refentry id="create-database">
491 <refname>CREATE-DATABASE</refname>
492 <refpurpose><!-- purpose --></refpurpose>
493 <refclass>Function</refclass>
496 <title>Syntax</title>
498 <function> (CREATE-DATABASE CONNECTION-SPEC &KEY DATABASE-TYPE) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
501 <title>Arguments and Values</title>
503 <!-- arguments and values -->
507 <title>Description</title>
513 <title>Examples</title>
519 <title>Side Effects</title>
521 <!-- side effects -->
525 <title>Affected by</title>
533 <title>Exceptional Situations</title>
535 <!-- execeptional situations -->
539 <title>See Also</title>
542 <!-- see also list here -->
554 <refentry id="database-name">
556 <refname>DATABASE-NAME</refname>
557 <refpurpose><!-- purpose --></refpurpose>
558 <refclass>Function</refclass>
561 <title>Syntax</title>
563 <function> (DATABASE-NAME (OBJ DATABASE)) [reader]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
566 <title>Arguments and Values</title>
568 <!-- arguments and values -->
572 <title>Description</title>
574 "Returns the name of DATABASE."
578 <title>Examples</title>
584 <title>Side Effects</title>
586 <!-- side effects -->
590 <title>Affected by</title>
598 <title>Exceptional Situations</title>
600 <!-- execeptional situations -->
604 <title>See Also</title>
607 <!-- see also list here -->
619 <refentry id="database-type">
621 <refname>DATABASE-TYPE</refname>
622 <refpurpose><!-- purpose --></refpurpose>
623 <refclass>Function</refclass>
626 <title>Syntax</title>
628 <function> (DATABASE-TYPE (OBJ DATABASE)) [reader]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
631 <title>Arguments and Values</title>
633 <!-- arguments and values -->
637 <title>Description</title>
639 "Returns the type of DATABASE."
643 <title>Examples</title>
649 <title>Side Effects</title>
651 <!-- side effects -->
655 <title>Affected by</title>
663 <title>Exceptional Situations</title>
665 <!-- execeptional situations -->
669 <title>See Also</title>
672 <!-- see also list here -->
684 <refentry id="destroy-database">
686 <refname>DESTROY-DATABASE</refname>
687 <refpurpose><!-- purpose --></refpurpose>
688 <refclass>Function</refclass>
691 <title>Syntax</title>
693 <function> (DESTROY-DATABASE CONNECTION-SPEC &KEY DATABASE-TYPE) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
696 <title>Arguments and Values</title>
698 <!-- arguments and values -->
702 <title>Description</title>
708 <title>Examples</title>
714 <title>Side Effects</title>
716 <!-- side effects -->
720 <title>Affected by</title>
728 <title>Exceptional Situations</title>
730 <!-- execeptional situations -->
734 <title>See Also</title>
737 <!-- see also list here -->
749 <refentry id="disconnect">
751 <refname>DISCONNECT</refname>
752 <refpurpose><!-- purpose --></refpurpose>
753 <refclass>Function</refclass>
756 <title>Syntax</title>
758 <function> (DISCONNECT &KEY (DATABASE *DEFAULT-DATABASE*) (ERROR NIL)) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
761 <title>Arguments and Values</title>
763 <!-- arguments and values -->
767 <title>Description</title>
768 <para>Closes the connection to DATABASE and resets
769 *DEFAULT-DATABASE* if that database was
770 disconnected. If DATABASE is a database instance, this
771 object is closed. If DATABASE is a string, then a
772 connected database whose name matches DATABASE is
773 sought in the list of connected databases. If no
774 matching database is found and ERROR and DATABASE are
775 both non-nil an error is signaled, otherwise nil is
776 returned. If the database is from a pool it will be
777 released to this pool.
781 <title>Examples</title>
787 <title>Side Effects</title>
789 <!-- side effects -->
793 <title>Affected by</title>
801 <title>Exceptional Situations</title>
803 <!-- execeptional situations -->
807 <title>See Also</title>
822 <refentry id="disconnect-pooled">
824 <refname>DISCONNECT-POOLED</refname>
825 <refpurpose><!-- purpose --></refpurpose>
826 <refclass>Function</refclass>
829 <title>Syntax</title>
831 <function> (DISCONNECT-POOLED &OPTIONAL CLEAR) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
834 <title>Arguments and Values</title>
836 <!-- arguments and values -->
840 <title>Description</title>
841 <para>Disconnects all connections in the pool.
845 <title>Examples</title>
851 <title>Side Effects</title>
853 <!-- side effects -->
857 <title>Affected by</title>
865 <title>Exceptional Situations</title>
867 <!-- execeptional situations -->
871 <title>See Also</title>
887 <refentry id="find-database">
889 <refname>FIND-DATABASE</refname>
890 <refpurpose><!-- purpose --></refpurpose>
891 <refclass>Function</refclass>
894 <title>Syntax</title>
896 <function> (FIND-DATABASE DATABASE &KEY (ERRORP T) (DB-TYPE NIL)) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
899 <title>Arguments and Values</title>
901 <!-- arguments and values -->
905 <title>Description</title>
906 <para>Returns the connected databases of type
907 DB-TYPE whose names match the string DATABASE. If
908 DATABASE is a database object, it is returned. If
909 DB-TYPE is nil all databases matching the string
910 DATABASE are considered. If no matching databases are
911 found and ERRORP is nil then nil is returned. If
912 ERRORP is nil and one or more matching databases are
913 found, then the most recently connected database is
914 returned as a first value and the number of matching
915 databases is returned as a second value. If no, or
916 more than one, matching databases are found and ERRORP
917 is true, an error is signalled.
921 <title>Examples</title>
927 <title>Side Effects</title>
929 <!-- side effects -->
933 <title>Affected by</title>
941 <title>Exceptional Situations</title>
943 <!-- execeptional situations -->
947 <title>See Also</title>
962 <refentry id="initialize-database-type">
964 <refname>INITIALIZE-DATABASE-TYPE</refname>
965 <refpurpose><!-- purpose --></refpurpose>
966 <refclass>Function</refclass>
969 <title>Syntax</title>
971 <function> (INITIALIZE-DATABASE-TYPE &KEY (DATABASE-TYPE *DEFAULT-DATABASE-TYPE*)) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
974 <title>Arguments and Values</title>
976 <!-- arguments and values -->
980 <title>Description</title>
981 <para>Initializes the supplied DATABASE-TYPE, if it
982 is not already initialized, as indicated by
983 *INITIALIZED-DATABASE-TYPES* and returns
984 DATABASE-TYPE. *DEFAULT-DATABASE-TYPE* is set to
985 DATABASE-TYPE and, if DATABASE-TYPE has not been
986 initialised, it is added to
987 *INITIALIZED-DATABASE-TYPES*.
991 <title>Examples</title>
997 <title>Side Effects</title>
999 <!-- side effects -->
1003 <title>Affected by</title>
1006 <!-- affected by -->
1011 <title>Exceptional Situations</title>
1013 <!-- execeptional situations -->
1017 <title>See Also</title>
1025 <title>Notes</title>
1032 <refentry id="list-databases">
1034 <refname>LIST-DATABASES</refname>
1035 <refpurpose><!-- purpose --></refpurpose>
1036 <refclass>Function</refclass>
1039 <title>Syntax</title>
1041 <function> (LIST-DATABASES CONNECTION-SPEC &KEY DATABASE-TYPE) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
1044 <title>Arguments and Values</title>
1046 <!-- arguments and values -->
1050 <title>Description</title>
1052 <!-- description -->
1056 <title>Examples</title>
1062 <title>Side Effects</title>
1064 <!-- side effects -->
1068 <title>Affected by</title>
1071 <!-- affected by -->
1076 <title>Exceptional Situations</title>
1078 <!-- execeptional situations -->
1082 <title>See Also</title>
1085 <!-- see also list here -->
1090 <title>Notes</title>
1097 <refentry id="probe-database">
1099 <refname>PROBE-DATABASE</refname>
1100 <refpurpose><!-- purpose --></refpurpose>
1101 <refclass>Function</refclass>
1104 <title>Syntax</title>
1106 <function> (PROBE-DATABASE CONNECTION-SPEC &KEY DATABASE-TYPE) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
1109 <title>Arguments and Values</title>
1111 <!-- arguments and values -->
1115 <title>Description</title>
1117 <!-- description -->
1121 <title>Examples</title>
1127 <title>Side Effects</title>
1129 <!-- side effects -->
1133 <title>Affected by</title>
1136 <!-- affected by -->
1141 <title>Exceptional Situations</title>
1143 <!-- execeptional situations -->
1147 <title>See Also</title>
1150 <!-- see also list here -->
1155 <title>Notes</title>
1162 <refentry id="reconnect">
1164 <refname>RECONNECT</refname>
1165 <refpurpose><!-- purpose --></refpurpose>
1166 <refclass>Function</refclass>
1169 <title>Syntax</title>
1171 <function> (RECONNECT &KEY (DATABASE *DEFAULT-DATABASE*) (ERROR NIL) (FORCE T)) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
1174 <title>Arguments and Values</title>
1176 <!-- arguments and values -->
1180 <title>Description</title>
1181 <para>Reconnects DATABASE which defaults to
1182 *DEFAULT-DATABASE* to the underlying database
1183 management system. On success, t is returned and the
1184 variable *DEFAULT-DATABASE* is set to the newly
1185 reconnected database. If DATABASE is a database
1186 instance, this object is closed. If DATABASE is a
1187 string, then a connected database whose name matches
1188 DATABASE is sought in the list of connected
1189 databases. If no matching database is found and ERROR
1190 and DATABASE are both non-nil an error is signaled,
1191 otherwise nil is returned. When the current database
1192 connection cannot be closed, if FORCE is non-nil, as
1193 it is by default, the connection is closed and errors
1194 are suppressed. If force is nil and the database
1195 connection cannot be closed, an error is
1200 <title>Examples</title>
1206 <title>Side Effects</title>
1208 <!-- side effects -->
1212 <title>Affected by</title>
1215 <!-- affected by -->
1220 <title>Exceptional Situations</title>
1222 <!-- execeptional situations -->
1226 <title>See Also</title>
1234 <title>Notes</title>
1241 <refentry id="status">
1243 <refname>STATUS</refname>
1244 <refpurpose><!-- purpose --></refpurpose>
1245 <refclass>Function</refclass>
1248 <title>Syntax</title>
1250 <function> (STATUS &OPTIONAL FULL) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
1253 <title>Arguments and Values</title>
1255 <!-- arguments and values -->
1259 <title>Description</title>
1260 <para>Prints information about the currently connected databases to
1261 *STANDARD-OUTPUT*. The argument FULL is nil by default and a
1262 value of t means that more detailed information about each
1263 database is printed.
1267 <title>Examples</title>
1273 <title>Side Effects</title>
1275 <!-- side effects -->
1279 <title>Affected by</title>
1282 <!-- affected by -->
1287 <title>Exceptional Situations</title>
1289 <!-- execeptional situations -->
1293 <title>See Also</title>
1301 <title>Notes</title>
1308 <refentry id="truncate-database">
1310 <refname>TRUNCATE-DATABASE</refname>
1311 <refpurpose><!-- purpose --></refpurpose>
1312 <refclass>Function</refclass>
1315 <title>Syntax</title>
1317 <function> (TRUNCATE-DATABASE &KEY (DATABASE *DEFAULT-DATABASE*)) [function]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
1320 <title>Arguments and Values</title>
1322 <!-- arguments and values -->
1326 <title>Description</title>
1328 <!-- description -->
1332 <title>Examples</title>
1338 <title>Side Effects</title>
1340 <!-- side effects -->
1344 <title>Affected by</title>
1347 <!-- affected by -->
1352 <title>Exceptional Situations</title>
1354 <!-- execeptional situations -->
1358 <title>See Also</title>
1361 <!-- see also list here -->
1366 <title>Notes</title>
1373 <refentry id="with-database">
1375 <refname>WITH-DATABASE</refname>
1376 <refpurpose><!-- purpose --></refpurpose>
1377 <refclass>Function</refclass>
1380 <title>Syntax</title>
1382 <function> (WITH-DATABASE DB-VAR CONNECTION-SPEC &REST CONNECT-ARGS &BODY BODY) [macro]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
1385 <title>Arguments and Values</title>
1387 <!-- arguments and values -->
1391 <title>Description</title>
1392 <para>Evaluate the body in an environment, where
1393 `db-var' is bound to the database connection given by
1394 `connection-spec' and `connect-args'. The connection
1395 is automatically closed or released to the pool on
1400 <title>Examples</title>
1406 <title>Side Effects</title>
1408 <!-- side effects -->
1412 <title>Affected by</title>
1415 <!-- affected by -->
1420 <title>Exceptional Situations</title>
1422 <!-- execeptional situations -->
1426 <title>See Also</title>
1434 <title>Notes</title>
1441 <refentry id="with-default-database">
1443 <refname>WITH-DEFAULT-DATABASE</refname>
1444 <refpurpose><!-- purpose --></refpurpose>
1445 <refclass>Function</refclass>
1448 <title>Syntax</title>
1450 <function> (WITH-DEFAULT-DATABASE DATABASE &REST BODY) [macro]</function> => <returnvalue><!-- result --></returnvalue></synopsis>
1453 <title>Arguments and Values</title>
1455 <!-- arguments and values -->
1459 <title>Description</title>
1460 <para>Perform BODY with DATABASE bound as
1465 <title>Examples</title>
1471 <title>Side Effects</title>
1473 <!-- side effects -->
1477 <title>Affected by</title>
1480 <!-- affected by -->
1485 <title>Exceptional Situations</title>
1487 <!-- execeptional situations -->
1491 <title>See Also</title>
1499 <title>Notes</title>