r9576: Add generalized-boolean
[clsql.git] / doc / intro.xml
1 <?xml version='1.0' ?>
2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
4 <!ENTITY % myents SYSTEM "entities.inc">
5 %myents;
6 ]>
7
8 <chapter id="introduction">
9   <title>Introduction</title>
10
11   <sect1 id="purpose">
12     <title>Purpose</title>
13     <para>&clsql; is a Common Lisp interface to <glossterm
14     linkend="gloss-sql">SQL</glossterm> databases.  A number of Common
15     Lisp implementations and SQL databases are supported. The general
16     structure of &clsql; is based on the &commonsql; package by
17     Xanalys.
18     </para>
19   </sect1>
20   
21   <sect1 id="history">
22     <title>History</title>
23     <para>
24       The &clsql; project was started by Kevin M. Rosenberg in 2001 to
25       support SQL access on multiple Common Lisp implementations using
26       the &uffi; library. The initial code was based substantially on
27       Pierre R. Mai's excellent &maisql; package. In late 2003, the
28       &usql; library was orphaned by its author, onShore Development,
29       Inc. In April 2004, Marcus Pearce ported the &usql; library to
30       &clsql;.  The &usql; library provides a &commonsql;-compatible
31       API for &clsql;.
32     </para>
33
34     <para>The main changes from &maisql; and &usql; are:
35       <itemizedlist>
36         <listitem>
37           <para>Port from the &cmucl; FFI to &uffi; which provide
38           compatibility with the major Common Lisp
39           implementations.</para>
40         </listitem>
41         <listitem>
42           <para>Optimized loading of integer and floating-point fields.</para>
43         </listitem>
44         <listitem>
45           <para>Additional database backends: &odbc;, &aodbc;, and &sqlite;.</para>
46         </listitem>
47         <listitem>
48           <para>A compatibility layer for &cmucl; specific code.</para>
49         </listitem>
50         <listitem>
51           <para>Much improved robustness for the &mysql; back-end
52           along with version 4 client library support.</para>
53         </listitem>
54         <listitem>
55           <para>Improved library loading and installation documentation.</para>
56         </listitem>
57         <listitem>
58           <para>Improved packages and symbol export.</para>
59         </listitem>
60         <listitem>
61           <para>Pooled connections.</para>
62         </listitem>
63         <listitem>
64           <para>Integrated transaction support for the classic
65           &maisql; iteration macros.</para>
66         </listitem>
67       </itemizedlist>
68     </para>
69   </sect1>
70   
71   <sect1 id="prerequisites">
72     <title>Prerequisites</title>
73     
74     <sect2>
75       <title>&asdf;</title>
76       <para>
77         &clsql; uses &asdf; to compile and load its components.
78         &asdf; is included in the <ulink
79         url="http://cclan.sourceforge.net"><citetitle>&cclan;</citetitle></ulink>
80         collection.
81       </para>
82     </sect2>
83     
84     <sect2>
85       <title>&uffi;</title>
86       <para>
87         &clsql; uses <ulink
88         url="http://uffi.b9.com/"><citetitle>&uffi;</citetitle></ulink>
89         as a <emphasis>Foreign Function Interface</emphasis>
90         (<glossterm linkend="gloss-ffi">FFI</glossterm>) to support
91         multiple &cl; implementations.
92       </para> 
93     </sect2>
94     
95     <sect2>
96       <title>&md5;</title>
97       <para>&clsql;'s postgresql-socket interface uses Pierre Mai's 
98         <ulink url="ftp://clsql.b9.com/">md5</ulink>
99         module.
100       </para>       
101     </sect2>
102     <sect2>
103       <title>Supported Common Lisp Implementation</title>
104       <para>
105         The implementations that support &clsql; is governed by the supported
106         implementations of &uffi;. The following implementations are supported:
107       </para>
108       <itemizedlist mark="opencircle">
109         <listitem><para>&acl; v6.2 and 7.0b on Debian Linux x86 &amp;
110         x86_64 &amp; PowerPC, FreeBSD 4.5, and Microsoft Windows
111         XP.</para></listitem>
112         <listitem><para>&lw; v4.3 on Debian Linux and Microsoft
113         Windows XP.</para></listitem>
114         <listitem><para>&cmucl; 18e on Debian Linux, FreeBSD 4.5, and
115         Solaris 2.8.</para></listitem>
116         <listitem><para>&sbcl; 0.8.5 on Debian
117         Linux.</para></listitem>
118         <listitem><para>&scl; 1.1.1 on Debian Linux.</para></listitem>
119         <listitem><para>&openmcl; 0.14 on Debian Linux
120         PowerPC.</para></listitem>
121       </itemizedlist>
122     </sect2>
123     
124     <sect2>
125       <title>Supported &sql; Implementation</title>
126       <para>
127         Currently, &clsql; supports the following databases:
128       </para>
129       <itemizedlist mark="opencircle">
130         <listitem><para>&mysql; v3.23.51 and v4.0.18.</para></listitem>
131         <listitem><para>&postgresql; v7.4 with both direct API and TCP
132         socket connections.</para></listitem>
133         <listitem><para>&sqlite;.</para></listitem>
134         <listitem><para>Direct &odbc; interface.</para></listitem>
135         <listitem><para>&oracle; OCI.</para></listitem>
136         <listitem><para>Allegro's DB interface (&aodbc;).</para></listitem>
137       </itemizedlist>
138     </sect2>
139     
140   </sect1>
141   
142   <sect1 id="installation">
143     <title>Installation</title>
144     
145     <sect2>
146       <title>Ensure &asdf; is loaded</title>
147       <para>
148         Simply load the file <filename>asdf.lisp</filename>.
149         <screen>
150 (load "asdf.lisp")
151         </screen>
152       </para>
153     </sect2>
154     
155     <sect2>
156       <title>Build &c; helper libraries</title>
157       <para>&clsql; uses functions that require 64-bit integer
158         parameters and return values. The &ffi; in most &clsql;
159         implementations do not support 64-bit integers. Thus, C helper
160         libraries are required to break these 64-bit integers into two compatible
161         32-bit integers. The helper libraries reside in the directories
162         <filename>uffi</filename> and <filename>db-mysql</filename>.
163       </para>
164       
165       <sect3>
166         <title>&mswindows;</title>
167         <para>
168           Files named <filename>Makefile.msvc</filename> are supplied
169           for building the libraries under Microsoft Windows.  Since
170           &mswindows; does not come with that compiler, compiled
171           <type>DLL</type> and <type>LIB</type> library files are
172           supplied with &clsql;.
173         </para>
174       </sect3>
175
176       <sect3>
177         <title>&unix;</title>
178         <para>
179           Files named <filename>Makefile</filename> are supplied for
180           building the libraries under &unix;. Loading the
181           <filename>.asd</filename> files automatically invokes
182           <application>make</application> when necessary. So, manual
183           building of the helper libraries is not necessary on most
184           &unix; systems. However, the location of the &mysql; library
185           files and include files may need to adjusted in
186           <filename>db-mysql/Makefile</filename> on non-Debian
187           systems.
188         </para>
189       </sect3>
190       
191     </sect2>
192     
193     <sect2>
194       <title>Add &uffi; path</title>
195       <para>
196         Unzip or untar the &uffi; distribution which creates a directory
197         for the &uffi; files. Add that directory to &asdf;'s <varname>asdf:*central-registry*</varname>.
198         You can do that by pushing the pathname of the directory onto this variable.
199         The following example code assumes the &uffi; files reside in the
200         <filename>/usr/share/lisp/uffi/</filename> 
201         directory.
202         <screen>
203 (push #P"/usr/share/lisp/uffi/" asdf:*central-registry*)
204         </screen>
205       </para>
206     </sect2>
207    <sect2>
208      <title>Add &md5; path</title>
209      <para>
210        If you plan to use the clsql-postgresql-socket interface, you
211        must load the md5 module.  Unzip or untar the cl-md5
212        distribution, which creates a directory for the cl-md5 files.
213        Add that directory to &asdf;'s
214        <varname>asdf:*central-registry*</varname>.  You can do that by
215        pushing the pathname of the directory onto this variable.  The
216        following example code assumes the cl-md5 files reside in the
217        <filename>/usr/share/lisp/cl-md5/</filename> directory.
218        <screen>
219 (push #P"/usr/share/lisp/cl-md5/" asdf:*central-registry*)
220        </screen>
221      </para>
222    </sect2>
223    
224    <sect2>
225      <title>Add &clsql; path and load module</title>
226      <para>
227        Unzip or untar the &clsql; distribution which creates a
228        directory for the &clsql; files. Add that directory to &asdf;'s
229        <varname>asdf:*central-registry*</varname>.  You can do that by
230        pushing the pathname of the directory onto this variable.  The
231        following example code assumes the &clsql; files reside in the
232        <filename>/usr/share/lisp/clsql/</filename> directory. You need
233        to load the <symbol>clsql</symbol> system.
234
235         <screen>
236 (push #P"/usr/share/lisp/clsql/" asdf:*central-registry*)
237 (asdf:operate 'asdf:load-op 'clsql)                   ; main CLSQL package
238         </screen>
239       </para>
240     </sect2>
241     
242     <sect2>
243       <title>Run test suite (optional)</title>
244       <para>
245         The test suite can be executed using the &asdf;
246         <symbol>test-op</symbol> operator. If &clsql; has not been
247         loaded with <symbol>asdf:load-op</symbol>, the
248         <symbol>asdf:test-op</symbol> operator will automatically load
249         &clsql;. A configuration file named
250         <filename>.clsql-test.config</filename> must be created in
251         your home directory. There are instructures on the format of
252         that file in the <filename>tests/README</filename>. After
253         creating <filename>.clsql-test.config</filename>, you can run
254         the test suite with &asdf;:
255         <screen>
256           (asdf:operate 'asdf:test-op 'clsql)
257         </screen>
258       </para>
259     </sect2>
260     
261   </sect1>
262
263 </chapter>
264