r9347: Automated commit for Debian build of clsql upstream-version-2.10.17
[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>Allegro's DB interface (&aodbc;).</para></listitem>
136       </itemizedlist>
137     </sect2>
138     
139   </sect1>
140   
141   <sect1 id="installation">
142     <title>Installation</title>
143     
144     <sect2>
145       <title>Ensure &asdf; is loaded</title>
146       <para>
147         Simply load the file <filename>asdf.lisp</filename>.
148         <screen>
149 (load "asdf.lisp")
150         </screen>
151       </para>
152     </sect2>
153     
154     <sect2>
155       <title>Build &c; helper libraries</title>
156       <para>&clsql; uses functions that require 64-bit integer
157         parameters and return values. The &ffi; in most &clsql;
158         implementations do not support 64-bit integers. Thus, C helper
159         libraries are required to break these 64-bit integers into two compatible
160         32-bit integers. The helper libraries reside in the directories
161         <filename>uffi</filename> and <filename>db-mysql</filename>.
162       </para>
163       
164       <sect3>
165         <title>&mswindows;</title>
166         <para>
167           Files named <filename>Makefile.msvc</filename> are supplied
168           for building the libraries under Microsoft Windows.  Since
169           &mswindows; does not come with that compiler, compiled
170           <type>DLL</type> and <type>LIB</type> library files are
171           supplied with &clsql;.
172         </para>
173       </sect3>
174
175       <sect3>
176         <title>&unix;</title>
177         <para>
178           Files named <filename>Makefile</filename> are supplied for
179           building the libraries under &unix;. Loading the
180           <filename>.asd</filename> files automatically invokes
181           <application>make</application> when necessary. So, manual
182           building of the helper libraries is not necessary on most
183           &unix; systems. However, the location of the &mysql; library
184           files and include files may need to adjusted in
185           <filename>db-mysql/Makefile</filename> on non-Debian
186           systems.
187         </para>
188       </sect3>
189       
190     </sect2>
191     
192     <sect2>
193       <title>Load &uffi;</title>
194       <para>
195         Unzip or untar the &uffi; distribution which creates a directory
196         for the &uffi; files. Add that directory to &asdf;'s <varname>asdf:*central-registry*</varname>.
197         You can do that by pushing the pathname of the directory onto this variable.
198         The following example code assumes the &uffi; files reside in the
199         <filename>/usr/share/lisp/uffi/</filename> 
200         directory.
201         <screen>
202 (push #P"/usr/share/lisp/uffi/" asdf:*central-registry*)
203 (asdf:operate 'asdf:load-op :uffi)
204         </screen>
205       </para>
206     </sect2>
207    <sect2>
208      <title>Load &md5; module</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 (asdf:operate 'asdf:load-op :md5)
221        </screen>
222      </para>
223    </sect2>
224    
225    <sect2>
226      <title>Load &clsql; modules</title>
227      <para>
228        Unzip or untar the &clsql; distribution which creates a
229        directory for the &clsql; files. Add that directory to &asdf;'s
230        <varname>asdf:*central-registry*</varname>.  You can do that by
231        pushing the pathname of the directory onto this variable.  The
232        following example code assumes the &clsql; files reside in the
233        <filename>/usr/share/lisp/clsql/</filename> directory. You need
234        to load, at a minimum, the main <symbol>clsql</symbol> system
235        and at least one interface system. The below example show loading
236        all &clsql; systems.
237
238         <screen>
239 (push #P"/usr/share/lisp/clsql/" asdf:*central-registry*)
240 (asdf:operate 'asdf:load-op 'clsql)                   ; main CLSQL package
241 (asdf:operate 'asdf:load-op 'clsql-mysql)             ; MySQL interface
242 (asdf:operate 'asdf:load-op 'clsql-postgresql)        ; PostgreSQL interface
243 (asdf:operate 'asdf:load-op 'clsql-postgresql-socket) ; Socket PGSQL interface
244 (asdf:operate 'asdf:load-op 'clsql-odbc)              ; ODBC interface
245 (asdf:operate 'asdf:load-op 'clsql-sqlite)            ; SQLite interface
246 (asdf:operate 'asdf:load-op 'clsql-aodbc)             ; Allegro ODBC interface
247         </screen>
248       </para>
249     </sect2>
250     
251     <sect2>
252       <title>Run test suite</title>
253       <para>
254         After loading &clsql;, you can execute the test suite. A
255         configuration file named
256         <filename>.clsql-test.config</filename> must be created in
257         your home directory. There are instructures on the format of
258         that file in the <filename>tests/README</filename>. After
259         creating <filename>.clsql-test.config</filename>, you can run
260         the test suite with &asdf;:
261         <screen>
262           (asdf:operate 'asdf:test-op 'clsql)
263         </screen>
264       </para>
265     </sect2>
266     
267   </sect1>
268
269 </chapter>
270