source: project/release/3/sqlite3/trunk/doc.scm @ 10382

Last change on this file since 10382 was 10382, checked in by Jim Ursetto, 12 years ago

Add busy handler callbacks; ensure finalize! is called on exception.

File size: 29.5 KB
Line 
1(use eggdoc)
2
3(define doc '(
4  (eggdoc:begin
5
6    (name "sqlite3")
7    (description (p "Bindings to version 3.x of the SQLite API."))
8    (author
9      (url "http://www.chust.org/" "Thomas Chust"))
10    (usage)
11    (download "sqlite3.egg")
12    (requires "synch" "tinyclos" "easyffi" "miscmacros")
13
14    (documentation
15
16      (p "The API of SQLite changed significantly from version 2.x to 3.x. These are new bindings to the modified API, which are reasonably complete -- most procedures that take callback arguments are missing, though.")
17      (p "For in-depth information on the functionality of the routines and general information you should consult the " (url "http://www.sqlite.org/" "SQLite documentation") " as well as this manual.")
18
19      (subsection "Exceptions"
20
21        (p "Unless otherwise indicated, all procedures and methods in this egg may throw an exception of the kind " (tt "(exn sqlite3)") " if something goes wrong. This exception will contain a " (tt "status") " property indicating the return value of the operation that failed:"
22        (table
23          (tr (th "Symbol") (th "Meaning"))
24          #;(tr (td (tt "ok")) (td "Successful result"))
25          (tr (td (tt "error")) (td "SQL error or missing database "))
26          (tr (td (tt "internal")) (td "An internal logic error in SQLite "))
27          (tr (td (tt "permission")) (td "Access permission denied "))
28          (tr (td (tt "abort")) (td "Callback routine requested an abort "))
29          (tr (td (tt "busy")) (td "The database file is locked "))
30          (tr (td (tt "locked")) (td "A table in the database is locked "))
31          (tr (td (tt "no-memory")) (td "A malloc() failed "))
32          (tr (td (tt "read-only")) (td "Attempt to write a readonly database "))
33          (tr (td (tt "interrupt")) (td "Operation terminated by sqlite-interrupt() "))
34          (tr (td (tt "io-error")) (td "Some kind of disk I/O error occurred "))
35          (tr (td (tt "corrupt")) (td "The database disk image is malformed "))
36          (tr (td (tt "not-found")) (td "(Internal Only) Table or record not found "))
37          (tr (td (tt "full")) (td "Insertion failed because database is full "))
38          (tr (td (tt "cant-open")) (td "Unable to open the database file "))
39          (tr (td (tt "protocol")) (td "Database lock protocol error "))
40          (tr (td (tt "empty")) (td "(Internal Only) Database table is empty "))
41          (tr (td (tt "schema")) (td "The database schema changed "))
42          (tr (td (tt "too-big")) (td "Too much data for one row of a table "))
43          (tr (td (tt "constraint")) (td "Abort due to contraint violation "))
44          (tr (td (tt "mismatch")) (td "Data type mismatch "))
45          (tr (td (tt "misuse")) (td "Library used incorrectly "))
46          (tr (td (tt "no-lfs")) (td "Uses OS features not supported on host "))
47          (tr (td (tt "authorization")) (td " Authorization denied"))
48          #;(tr (td (tt "row")) (td (tt "sqlite3:step!") " has another row ready "))
49          (tr (td (tt "done")) (td (tt "sqlite3:step!") " has finished executing, so no further data is ready")))))
50
51      (subsection "Classes"
52
53        (definition
54          (signatures
55            (signature "class" "<sqlite3:database>")
56            (signature "class" "<sqlite3:statement>"))
57          (p "These classes are derived from " (tt "<c++-object>") ". They hold a pointer to the underlying C-structure in their " (tt "this") " slot.")
58          (p (tt "<sqlite3:statement>") " also has a " (tt "database") " slot pointing to the database object it belongs to.") ) )
59
60      (subsection "Managing databases"
61
62        (procedure "(sqlite3:open (path <string>)) => <sqlite3:database>"
63          (p "Opens the indicated database file and returns a " (tt "<sqlite3:database>") " object for it.")
64          (p "The given path is subject to the same special expansion as paths passed to " (p "open-input-file") " and similar procedures."))
65
66        (definition
67          (signatures
68            (signature "method" "(sqlite3:define-collation (db <sqlite3:database>) (name <string>)) => <void>")
69            (signature "method" "(sqlite3:define-collation (db <sqlite3:database>) (name <string>) (proc <procedure-class>)) => <void>"))
70          (p "If " (tt "proc") " is given, registers a new collation sequence identified by " (tt "name") " for use in the context of database handle " (tt "db") ". If no procedure is passed, the collation sequence with the given name is removed.")
71          (p (tt "proc") " should have the signature " (tt "(proc (a <string>) (b <string>)) => <exact>") ". It should return a negative number if " (tt "a") " sorts before " (tt "b") ", a positive number if " (tt "b") " sorts before " (tt "a") " and zero if " (tt "a") " and " (tt "b") " are equal.")
72          (p "As " (tt "proc") " will be called in a callback context from within " (tt "sqlite3:step!") ", safety measures are installed to avoid throwing any exceptions, invoking continuations or returning invalid values from it. Attempts to do so will result in a " (tt "0") " return value and warning messages."))
73
74        (definition
75          (signatures
76            (signature "method" "(sqlite3:define-function (db <sqlite3:database>) (name <string>) (n <exact>) (proc <procedure-class>)) => <void>")
77            (signature "method" "(sqlite3:define-function (db <sqlite3:database>) (name <string>) (n <exact>) (step-proc <procedure-class>) (seed <top>) #!optional ((final-proc <procedure-class>) identity)) => <void>"))
78          (p "If " (tt "proc") " is given, registers a new SQL function identified by " (tt "name") " for use in the context of database handle " (tt "db") ". If " (tt "step-proc") " and " (tt "final-proc") " are given, the new function becomes an aggregate function. Once registered, functions cannot be deleted.")
79          (p (tt "n") " is the number of parameters the new SQL function takes or " (tt "-1") " to allow any number of arguments.")
80          (p (tt "proc") " should have the signature " (tt "(proc . params) => <top>") ". It is called with the " (tt "n") " parameters given to the SQL function converted into Scheme objects like by " (tt "sqlite3:column-data") ". The return value is converted into an SQLite3 data object like by " (tt "sqlite3:bind!") ". A return value of " (tt "(void)") " corresponds to " (tt "NULL") " in SQLite3.")
81          (p (tt "step-proc") " should have the signature " (tt "(step-proc (seed <top>) . params) => <top>") ". It is called with the parameters given to the SQL function for every row being processed. The seed value passed is initially the one given as an argument to " (tt "sqlite3:define-function") "; for subsequent calls it is the last value returned by " (tt "step-proc") " and after completion of " (tt "final-proc") " it will be the initial value again.")
82          (p (tt "final-proc") " should have the signature " (tt "(final-proc (seed <top>)) => <top>") " and transforms the last seed value into the value to be returned from the aggregate function.")
83          (p "As " (tt "proc") ", " (tt "step-proc") " and " (tt "final-proc") " will be called in a callback context from within " (tt "sqlite3:step!") ", safety measures are installed to avoid throwing any exceptions, invoking continuations or returning invalid values from them. Attempts to do such things will result in " (tt "NULL") " return values and warning messages."))
84
85        (procedure "(sqlite3:set-busy-timeout! (db <sqlite3:database>) #!optional ((ms <exact>) 0)) => <void>"
86          (p "Installs a busy handler that waits at least the specified amount of milliseconds for locks on the given database. If " (tt "(<= ms 0)") " though, all busy handlers for the database are uninstalled."))
87        (procedure "(sqlite3:set-busy-handler! (db <sqlite3:database>) (handler <procedure-class>)) => <void>"
88          (p "Installs the supplied procedure as the library's busy handler, or removes it if " (tt "#f") ".  When the database is busy, SQLite will invoke this handler repeatedly until it returns " (tt "#f") ".  The handler will be called with arguments " (tt "db") " (database) and " (tt "count") " (number of times invoked for the same operation).")
89          (p "As " (tt "handler") " will be called in a callback context from within the library, safety measures are installed to avoid throwing any exceptions or invoking continuations.  Attempts to do such things will result in " (tt "#f") " return values and warning messages.")
90          (p "Notably, you may " (b "not") " use this procedure in the presence of multiple threads unless you can ensure no other thread will invoke a C to Scheme callback while this handler is executing.  In other words, callback entrance and exit must occur in order.  Use " (tt "set-safe-busy-handler!") " in this case.")
91          (pre "Example:
92(sqlite3:set-busy-handler! db
93 (lambda (db count)
94   (cond ((< count 5)
95          (sleep 1)
96          #t)
97         (else #f)))))"))
98        (procedure "(sqlite3:set-safe-busy-handler! (db <sqlite3:database>) (handler <procedure-class>)) => <void>"
99          (p "Installs the supplied procedure as the application's busy handler, or removes it if " (tt "#f") ".  When the database returns a busy error code, the egg will invoke this handler repeatedly until it returns " (tt "#f") ".  The handler will be called with arguments " (tt "db") " (database), " (tt "count") " (number of times invoked for the same operation), and " (tt "last") " (the previous value the handler returned for this operation).")
100          (p "As " (tt "handler") " is not called in a callback context, it is legal to invoke captured continuations, and it is safe in the presence of multiple threads.  In general, this handler should give up at some point to avoid possible deadlock.")
101          (p "For an example handler, see the code of " (tt "default-safe-busy-handler") "."))
102        (procedure "(sqlite3:default-safe-busy-handler (ms <exact>)) => <procedure-class>"
103          (p "Returns a handler suitable for use with " (tt "set-safe-busy-handler!") ".  The behavior is identical to the default SQLite busy handler installed via " (tt "set-busy-timeout!") (& "mdash") "it polls in increasing intervals until the timeout in milliseconds is reached" (& "mdash") "but this version is non-blocking.")
104          (pre "Example:
105(define open-db
106  (let ((handler (sqlite3:default-safe-busy-handler 2000)))
107    (lambda (db-name)
108      (let ((db (sqlite3:open db-name)))
109        (sqlite3:set-safe-busy-handler! db handler)
110        db))))"))
111
112        (procedure "(sqlite3:interrupt! (db <sqlite3:database>)) => <void>"
113          (p "Cancels any running database operation as soon as possible.")
114          (p "This function is always successful and never throws an exception."))
115
116        (procedure "(sqlite3:auto-committing? (db <sqlite3:database>)) => <bool>"
117          (p "Checks whether the database is currently in auto committing mode, i.e. no transaction is currently active.")
118          (p "This function always returns a state and never throws an exception."))
119
120        (procedure "(sqlite3:changes (db <sqlite3:database>) #!optional ((total <bool>) #f)) => <number>"
121          (p "Returns the number of rows changed by the last statement (if " (tt "(not total)") ") or since the database was opened (if " (tt "total") ").")
122          (p "This function always returns a count and never throws an exception."))
123
124        (procedure "(sqlite3:last-insert-rowid (db <sqlite3:database>)) => <number>"
125          (p "Returns the row ID of the last row inserted in " (tt "db") ".")
126          (p "This function always returns a number and never throws an exception."))
127
128        (method "(sqlite3:finalize! (db <sqlite3:database>)) => <void>"
129          (p "Closes the given database.") ) )
130
131      (subsection "Managing statements"
132
133        (procedure "(sqlite3:prepare (db <sqlite3:database>) (sql <string>)) => <sqlite3:statement>, <string>"
134          (p "Compiles the first SQL statement in " (tt "sql") " and returns a " (tt "<sqlite3:statement>") " and the rest of " (tt "sql") ", which was not compiled (or an empty string)."))
135
136        (procedure "(sqlite3:repair! (stmt <sqlite3:statement>)) => <void>"
137          (p "Recompiles the SQL statement used to create " (tt "stmt") ", transfers all existing bindings from the old statement handle to the new one and destructively modifies " (tt "stmt") " to point to the new statement handle.")
138          (p "If the operation is successful, the old handle is finalized, in case of error, the new handle is finalized and the old one stays untouched.")
139          (p "Usually you should not have to call this routine by hand. It is invoked by " (tt "sqlite3:step!") " to automagically repair a stale statement handle after a database schema change."))
140
141        (procedure "(sqlite3:column-count (stmt <sqlite3:statement>)) => <exact>"
142          (p "Can be applied to any statement and returns the number of columns it will return as results.")
143          (p "This procedure always succeeds and never throws an exception."))
144
145        (procedure "(sqlite3:column-name (stmt <sqlite3:statement>) (i <exact>)) => <string>"
146          (p "Can be applied to any statement and returns the name of the column number " (tt "i") " (counting from 0) as a string or " (tt "#f") " if the column has no name.")
147          (p "This procedure always succeeds and never throws an exception."))
148
149        (procedure "(sqlite3:column-declared-type (stmt <sqlite3:statement>) (i <exact>)) => <string>"
150          (p "Can be applied to any statement and returns the declared type (as given in the " (tt "CREATE") " statement) of the column number " (tt "i") " (counting from 0) as a string or " (tt "#f") " if the column has no declared type.")
151          (p "This procedure always succeeds and never throws an exception."))
152
153        (procedure "(sqlite3:bind-parameter-count (stmt <sqlite3:statement>)) => <exact>"
154          (p "Can be applied to any statement and returns the number of free parameters that can be bound in the statement.")
155          (p "This procedure always succeeds and never throws an exception."))
156
157        (procedure "(sqlite3:bind-parameter-index (stmt <sqlite3:statement>) (name <string>)) => <exact>"
158          (p "Can be applied to any statement and returns the index of the bindable parameter called " (tt "name") " or " (tt "#f") " if no such parameter exists.")
159          (p "This procedure always succeeds and never throws an exception."))
160
161        (procedure "(sqlite3:bind-parameter-name (stmt <sqlite3:statement>) (i <exact>)) => <string>"
162          (p "Can be applied to any statement and returns the name of the bindable parameter number " (tt "i") " (counting from 0) or " (tt "#f") " if no such parameter exists or the parameter has no name.")
163          (p "This procedure always succeeds and never throws an exception."))
164
165        (definition
166          (signatures
167            (signature "method" "(sqlite3:bind! (stmt <sqlite3:statement>) (i <exact>)) => <void>")
168            (signature "method" "(sqlite3:bind! (stmt <sqlite3:statement>) (i <exact>) (v <boolean>)) => <void>")
169            (signature "method" "(sqlite3:bind! (stmt <sqlite3:statement>) (i <exact>) (v <exact>)) => <void>")
170            (signature "method" "(sqlite3:bind! (stmt <sqlite3:statement>) (i <exact>) (v <number>)) => <void>")
171            (signature "method" "(sqlite3:bind! (stmt <sqlite3:statement>) (i <exact>) (v <string>)) => <void>")
172            (signature "method" "(sqlite3:bind! (stmt <sqlite3:statement>) (i <exact>) (v <blob>)) => <void>"))
173          (p "Can be applied to any statement to bind its free parameter number " (tt "i") " (counting from 0) to the given value. Scheme types of the value map to SQLite types as follows:"
174          (table
175            (tr (th "Scheme type") (th "SQLite type"))
176            (tr (td "none") (td (tt "null")))
177            (tr (td (tt "<boolean>")) (td (tt "integer: #t = 1, #f = 0")))
178            (tr (td (tt "<exact>")) (td (tt "integer")))
179            (tr (td (tt "<number>")) (td (tt "float")))
180            (tr (td (tt "<string>")) (td (tt "text")))
181            (tr (td (tt "<blob>")) (td (tt "blob")))))
182          (p "Unless there is internal trouble in SQLite3, this method should always succeeds and never throw an exception. For invalid parameter indices the method just silently does nothing."))
183
184        (procedure "(sqlite3:bind-parameters! (stmt <sqlite3:statement>) . params) => <void>"
185          (p "Binds the statement's free parameters.")
186          (p "Allows " (code "<void>") " as a parameter.") )
187
188        (procedure "(sqlite3:step! (stmt <sqlite3:statement>)) => <boolean>"
189          (p "Single-steps the execution of " (tt "stmt") " and returns " (tt "#t") " if a result row was produced, " (tt "#f") " if no further results are available as the statement has been stepped through. This procedure must be called at least once before any results can be retrieved from the statement."))
190
191        (procedure "(sqlite3:column-type (stmt <sqlite3:statement>) (i <exact>)) => <symbol>"
192          (p "Can be applied to a statement that has just been stepped (otherwise it returns " (tt "#f") ") and returns the SQLite type of the result column number " (tt "i") " (counting from 0) as a symbol.")
193          (p "The return value can be one of the symbols " (tt "null") ", " (tt "integer") ", " (tt "float") ", " (tt "text") " or " (tt "blob") ".")
194          (p "This procedure always succeeds and never throws an exception."))
195
196        (procedure "(sqlite3:column-data (stmt <sqlite3:statement>) (i <exact>)) => <void | exact | number | string | blob>"
197          (p "Can be applied to a statement that has just been stepped. Consults " (tt "sqlite3:column-type") " to determine the type of the indicated column and to return its data as an appropriate scheme object.")
198          (p "See " (tt "sqlite3:bind!") " for the mapping between Scheme and SQLite data types. Columns of type " (tt "null") " are returned as " (tt "<void>") ". Also keep in mind that CHICKEN's " (tt "<exact>") " datatype can only hold a subset of the values an SQLite " (tt "integer") " can store. Large integer values may therefore be returned as floating point numbers from the database, but they will still be of class " (tt "<integer>") ".")
199          (p "This procedure always succeeds and never throws an exception."))
200
201        (procedure "(sqlite3:reset! (stmt <sqlite3:statement>)) => <void>"
202          (p "Can be applied to any statement and resets it such that execution using " (tt "sqlite3:step!") " will perform all operations of the statement again."))
203
204        (method "(sqlite3:finalize! (stmt <sqlite3:statement>)) => <void>"
205          (p "Must be applied to every statement to free its resources and discard it.")
206          (p (tt "sqlite3:close") " will not be able to close a database that has associated unfinalized statements.") ) )
207
208      (subsection "Simple statement interface"
209
210        (procedure "(sqlite3:call-with-temporary-statements (proc <procedure-class>) (db <sqlite3:database>) . sqls) => <top>"
211          (p "Compiles the SQL sources in " (tt "sqls") " into statements in the context of " (tt "db") ", applies " (tt "proc") " to these statements and returns " (tt "proc") "'s result. The statements are created and finalized in " (tt "dynamic-wind") " entry and exit blocks around the application of " (tt "proc") "."))
212
213        (definition
214          (signatures
215            (signature "method" "(sqlite3:exec (stmt <sqlite3:statement>) . params) => <void>")
216            (signature "method" "(sqlite3:exec (db <sqlite3:database>) (sql <string>) . params) => <void>"))
217          (p "(Compiles the given SQL), resets the statement, binds the statement's free parameters and executes the statement ignoring possible results from it.")
218          (p "Allows " (code "<void>") " as a parameter.") )
219
220        (definition
221          (signatures
222            (signature "method" "(sqlite3:update (stmt <sqlite3:statement>) . params) => <exact>")
223            (signature "method" "(sqlite3:update (db <sqlite3:database>) (sql <string>) . params) => <exact>"))
224          (p "(Compiles the given SQL), resets the statement, binds the statement's free parameters and executes the specified statement ignoring possible results from it, returning the result of applying " (tt "sqlite3:changes") " to the affected database after the execution of the statement instead.")
225          (p "Allows " (code "<void>") " as a parameter.") )
226
227        (definition
228          (signatures
229            (signature "method" "(sqlite3:first-result (stmt <sqlite3:statement>) . params) => <void | exact | number | string | blob>")
230            (signature "method" "(sqlite3:first-result (db <sqlite3:database>) (sql <string>) . params) => <void | exact | number | string | blob>"))
231          (p "(Compiles the given SQL), resets the statement, binds the statement's free parameters and single-steps the statement once returning the value of the first column in the first result row. Resets the statement again just before returning.")
232          (p "If the given statement does not yield any results, an " (tt "(exn sqlite3)") " is thrown with the " (tt "status") "-property set to " (tt "done") ".")
233          (p "Allows " (code "<void>") " as a parameter.") )
234
235        (definition
236          (signatures
237            (signature "method" "(sqlite3:first-row (stmt <sqlite3:statement>) . params) => <list>")
238            (signature "method" "(sqlite3:first-row (db <sqlite3:database>) (sql <string>) . params) => <list>"))
239          (p "(Compiles the given SQL), resets the statement, binds the statement's free parameters and single-steps the statement once returning all columns in the first result row as a list.")
240          (p "If the given statement does not yield any results, an " (tt "(exn sqlite3)") " is thrown with the " (tt "status") "-property set to " (tt "done") ".")
241          (p "Allows " (code "<void>") " as a parameter.") )
242
243        (definition
244          (signatures
245            (signature "method" "(sqlite3:fold-row (proc <procedure-class>) (stmt <sqlite3:statement>) initial . params) => <list>")
246            (signature "method" "(sqlite3:fold-row (proc <procedure-class>) (db <sqlite3:database>) (sql <string>) initial . params) => <list>"))
247          (p "(Compiles the given SQL), resets the statement, binds the statement's free parameters and executes it step by step. After each step, the column values of the current result row are retrieved and " (tt "proc") " is applied to the current folded value and the column values. The result of the application becomes the new folded value.")
248          (p "Allows " (code "<void>") " as a parameter.") )
249
250        (definition
251          (signatures
252            (signature "method" "(sqlite3:for-each-row (proc <procedure-class>) (stmt <sqlite3:statement>) . params) => <void>")
253            (signature "method" "(sqlite3:for-each-row (proc <procedure-class>) (db <sqlite3:database>) (sql <string>) . params) => <void>"))
254          (p "(Compiles the given SQL), resets the statement, binds the statement's free parameters and executes it step by step. After each step, the column values of the current result row are retrieved and " (tt "proc") " is applied to them. The results of this application are discarded.")
255          (p "Allows " (code "<void>") " as a parameter.") )
256
257        (definition
258          (signatures
259            (signature "method" "(sqlite3:map-row (proc <procedure-class>) (stmt <sqlite3:statement>) . params) => <list>")
260            (signature "method" "(sqlite3:map-row (proc <procedure-class>) (db <sqlite3:database>) (sql <string>) . params) => <list>"))
261          (p "(Compiles the given SQL), resets the statement, binds the statement's free parameters and executes it step by step. After each step, the column values of the current result row are retrieved and " (tt "proc") " is applied to them. The results of these applications are collected into a list.")
262          (p "Allows " (code "<void>") " as a parameter.") ) )
263
264      (subsection "Utility functions"
265
266        (procedure "(sqlite3:with-transaction (db <sqlite3:database>) (thunk <procedure-class>) #!optional ((type <symbol>) 'deferred)) => <void>"
267          (p "Runs " (tt "thunk") " within the scope of a transaction on the database " (tt "db") ".")
268          (p "The transaction is committed upon exit from " (tt "thunk") " if " (tt "thunk") " returns a true value. If " (tt "thunk") " returns a false value or throws an exception, the transaction is rolled back.")
269          (p "The " (tt "type") " of the transaction can be specified as one of the symbols " (tt "deferred") ", " (tt "immediate") " or " (tt "exclusive") "."))
270
271        (procedure "(sqlite3:complete? (sql <string>)) => <boolean>"
272          (p "Checks whether " (tt "sql") " comprises at least one complete SQL statement."))
273
274        (procedure "(sqlite3:enable-shared-cache! <boolean>) => <void>"
275          (p "Enables (or disables) the sharing of the database cache and schema data structures between connections to the same database."))
276
277        (procedure "(sqlite3:library-version) => <string>"
278          (p "Returns a string identifying the version of SQLite in use.") )
279
280        (procedure "(sqlite3:boolean-value v) => <boolean>"
281          (p "Returns a Scheme boolean for the usual SQLite column boolean values.")
282          (p "Truth values are " (code "Y") ", " (code "y") ", " (code "YES") ", " (code "yes") ", " (code "Yes") ", and " (code "(not (zero? v))") ".")
283          (p "Anything else is considered false.") ) ) )
284
285    (history
286      (version "2.0.8" "Add busy handler callbacks; ensure finalize! is called on exception. [Jim Ursetto]")
287      (version "2.0.7" "Restore error reporting. [Jim Ursetto]")
288      (version "2.0.6" "Add " (tt "enable-shared-cache!") ", requires 3.3.0 or later. [Jim Ursetto]")
289      (version "2.0.5" "Added some <boolean> support. Change for NULL (<void>) handling. [Kon Lovett]")
290      (version "2.0.4" "Added " (code "sqlite3:fold-row") " & " (code "sqlite3:bind-parameters!") ". Fix for introduced bug in " (code "sqlite3:changes") ". [Kon Lovett]")
291      (version "2.0.3" "Added " (code "sqlite3:null-value") ", " (code "sqlite3:null-value?") ", and " (code "sqlite3:null") ". [Kon Lovett]")
292      (version "2.0.2" "Use of extended " (tt "define-foreign-enum") ". Removed deprecated " (tt "pointer") " use. [Kon Lovett]")
293      (version "2.0.1" "Deprecated " (tt "<byte-vector>") ", use " (tt "<blob>") " [Kon Lovett]")
294      (version "2.0.0" "Now using " (tt "(void)") " to represent " (tt "NULL"))
295      (version "1.5.9" "dll extension not used anymore in newer chickens [felix]")
296      (version "1.5.8" "Update for synch 1.3 [Kon Lovett]")
297      (version "1.5.7" "Updated compiler flags to pull in tinyclos and easyffi")
298      (version "1.5.6" "Replaced deprecated synch operations [Kon Lovett]")
299      (version "1.5.5" "Correction in the documentation, added sqlite3:with-transaction")
300      (version "1.5.4" "Typo fixed thanks to the new imports checking code")
301      (version "1.5.3" "Proper multithreading locks for the callback code")
302      (version "1.5.2" "Code cleanups")
303      (version "1.5.1" "Potential memory leaks removed")
304      (version "1.5.0" "Support for user defined collation sequences and functions has been added")
305      (version "1.4.0" "Stale statement handles due to schema changes are now automagically recompiled to keep them valid")
306      (version "1.3.1" "Several small routines added")
307      (version "1.3.0" "Special hacks removed as CVS version of SQLite3.3.4 has been fixed")
308      (version "1.2.0" "Special hacks to deal with \"valid\" " (tt "NULL") " statements")
309      (version "1.1.4" "Tightened security measures against " (tt "#f") " pointers")
310      (version "1.1.3" "Integers not fitting in a fixnum are now read correctly from the database [thanks to Zbigniew]")
311      (version "1.1.2" "Setup file patched to call compiled output .dll on Windows")
312      (version "1.1.1" "All procedures now reset prepared statements where you would do that by hand anyway")
313      (version "1.1.0" "Promoted " (tt "sqlite3:call-with-temporary-statement") " to " (tt "sqlite3:call-with-temporary-statements") " and fixed a really stupid coding mistake in " (tt "sqlite3:changes"))
314      (version "1.0.3" "Fixed C compiler warnings")
315      (version "1.0.2" "Added a typecheck for increased safety")
316      (version "1.0.1" "Fixed type mistakes in the source")
317      (version "1.0.0" "Initial release") )
318
319     (license #<<EOS
320Copyright (c) 2005, Thomas Chust <chust@web.de>.  All rights reserved.
321
322Redistribution and use in source and binary forms, with or without
323modification, are permitted provided that the following conditions are met:
324
325  Redistributions of source code must retain the above copyright notice,
326  this list of conditions and the following disclaimer. Redistributions in
327  binary form must reproduce the above copyright notice, this list of
328  conditions and the following disclaimer in the documentation and/or
329  other materials provided with the distribution. Neither the name of the
330  author nor the names of its contributors may be used to endorse or
331  promote products derived from this software without specific prior
332  written permission.
333
334THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS
335IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
336THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
337PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
338CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
339EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
340PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
341PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
342LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
343NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
344SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
345EOS
346) ) ) )
347
348(eggdoc->html doc
349              (append (eggdoc:make-stylesheet doc)
350                      `((method *macro* . ,eggdoc:make-defsig))))
Note: See TracBrowser for help on using the repository browser.