r9133: case handling, test report summarizing, documentation additions
[clsql.git] / sql / package.lisp
1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;;
4 ;;;; $Id$
5 ;;;;
6 ;;;; Package definitions for CLSQL. 
7 ;;;;
8 ;;;; This file is part of CLSQL.
9 ;;;;
10 ;;;; CLSQL users are granted the rights to distribute and use this software
11 ;;;; as governed by the terms of the Lisp Lesser GNU Public License
12 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
13 ;;;; *************************************************************************
14
15 (in-package #:cl-user)
16
17 (eval-when (:compile-toplevel :load-toplevel :execute)
18
19 #+sbcl
20   (if (find-package 'sb-mop)
21       (pushnew :clsql-sbcl-mop cl:*features*)
22       (pushnew :clsql-sbcl-pcl cl:*features*))
23
24   #+cmu
25   (if (eq (symbol-package 'pcl:find-class)
26           (find-package 'common-lisp))
27       (pushnew :clsql-cmucl-mop cl:*features*)
28       (pushnew :clsql-cmucl-pcl cl:*features*)))
29
30
31 (eval-when (:compile-toplevel :load-toplevel :execute)
32   (defpackage #:clsql-sys
33     (:use #:common-lisp #:clsql-base-sys
34           #+clsql-sbcl-mop #:sb-mop
35           #+clsql-cmucl-mop #:mop
36           #+allegro #:mop
37           #+lispworks #:clos
38           #+scl #:clos
39           #+openmcl #:openmcl-mop)
40     
41     #+allegro
42     (:shadowing-import-from 
43      #:excl)
44    #+lispworks
45    (:shadowing-import-from 
46     #:clos)
47    #+clsql-sbcl-mop 
48    (:shadowing-import-from 
49     #:sb-pcl
50     #:generic-function-lambda-list)
51    #+clsql-sbcl-pcl
52    (:shadowing-import-from 
53     #:sb-pcl
54     #:name
55     #:class-direct-slots
56     #:class-of #:class-name #:class-slots #:find-class
57     #:slot-boundp
58     #:standard-class
59     #:slot-definition-name #:finalize-inheritance
60     #:standard-direct-slot-definition
61     #:standard-effective-slot-definition #:validate-superclass
62     #:direct-slot-definition-class #:compute-effective-slot-definition
63     #:effective-slot-definition-class
64     #:slot-value-using-class
65     #:class-prototype #:generic-function-method-class #:intern-eql-specializer
66     #:make-method-lambda #:generic-function-lambda-list
67     #:class-precedence-list #:slot-definition-type
68     #:class-direct-superclasses
69     #:compute-class-precedence-list)
70    #+clsql-cmucl-mop 
71    (:shadowing-import-from 
72     #:pcl
73     #:generic-function-lambda-list)
74    #+clsql-cmucl-pcl
75    (:shadowing-import-from 
76     #:pcl
77     #:class-direct-slots
78     #:name
79     #:class-of  #:class-name #:class-slots #:find-class #:standard-class
80     #:slot-boundp
81     #:slot-definition-name #:finalize-inheritance
82     #:standard-direct-slot-definition #:standard-effective-slot-definition
83     #:validate-superclass #:direct-slot-definition-class
84     #:effective-slot-definition-class
85     #:compute-effective-slot-definition
86     #:slot-value-using-class
87     #:class-prototype #:generic-function-method-class #:intern-eql-specializer
88     #:make-method-lambda #:generic-function-lambda-list
89     #:class-precedence-list #:slot-definition-type
90     #:class-direct-superclasses
91     #:compute-class-precedence-list)
92    #+scl
93    (:shadowing-import-from 
94     #:clos
95     #:class-prototype  ;; note: make-method-lambda is not fbound
96     )
97    
98    (:import-from 
99     #:clsql-base-sys
100     .
101     #1=(
102        ;; conditions 
103        #:clsql-condition
104        #:clsql-error
105        #:clsql-simple-error
106        #:clsql-warning
107        #:clsql-simple-warning
108        #:clsql-invalid-spec-error
109        #:clsql-invalid-spec-error-connection-spec
110        #:clsql-invalid-spec-error-database-type
111        #:clsql-invalid-spec-error-template
112        #:clsql-access-error
113        #:clsql-access-error-database-type
114        #:clsql-access-error-connection-spec
115        #:clsql-access-error-error
116        #:clsql-connect-error
117        #:clsql-connect-error-errno
118        #:clsql-sql-error
119        #:clsql-sql-error-database
120        #:clsql-sql-error-expression
121        #:clsql-sql-error-errno
122        #:clsql-sql-error-error
123        #:clsql-database-warning
124        #:clsql-database-warning-database
125        #:clsql-database-warning-message
126        #:clsql-exists-condition
127        #:clsql-exists-condition-new-db
128        #:clsql-exists-condition-old-db
129        #:clsql-exists-warning
130        #:clsql-exists-error
131        #:clsql-closed-error
132        #:clsql-closed-error-database
133        #:clsql-type-error
134        #:clsql-sql-syntax-error
135
136        ;; db-interface
137        #:check-connection-spec
138        #:database-initialize-database-type
139        #:database-type-load-foreign
140        #:database-name-from-spec
141        #:database-create-sequence
142        #:database-drop-sequence
143        #:database-sequence-next
144        #:database-set-sequence-position
145        #:database-query-result-set
146        #:database-dump-result-set
147        #:database-store-next-row
148        #:database-get-type-specifier
149        #:database-list-tables
150        #:database-list-views
151        #:database-list-indexes
152        #:database-list-table-indexes
153        #:database-list-sequences
154        #:database-list-attributes
155        #:database-attribute-type
156        #:database-add-attribute
157        #:database-type 
158
159        ;; initialize
160        #:*loaded-database-types*
161        #:reload-database-types
162        #:*default-database-type*
163        #:*initialized-database-types*
164        #:initialize-database-type
165        ;; classes
166        #:database
167        #:database-name
168        #:command-recording-stream
169        #:result-recording-stream
170        #:database-view-classes
171        #:conn-pool
172        #:print-object 
173        ;; utils
174        #:sql-escape
175
176        ;; database.lisp -- Connection
177        #:*default-database-type*                  ; clsql-base xx
178        #:*default-database*               ; classes    xx
179        #:connect                                  ; database   xx
180        #:*connect-if-exists*              ; database   xx
181        #:connected-databases              ; database   xx
182        #:database                         ; database   xx
183        #:database-name                     ; database   xx
184        #:disconnect                       ; database   xx
185        #:reconnect                         ; database
186        #:find-database                     ; database   xx
187        #:status                            ; database   xx
188        #:with-database
189        #:with-default-database
190        #:create-database
191        #:destroy-database
192        #:probe-database
193        
194        ;; pool.lisp
195        #:disconnect-pooled
196
197        ;; basic-sql.lisp
198        #:query
199        #:execute-command
200        #:write-large-object
201        #:read-large-object
202        #:delete-large-object
203        #:do-query
204        #:map-query
205        #:describe-table
206
207        
208        ;; recording.lisp -- SQL I/O Recording 
209        #:record-sql-action
210        #:add-sql-stream                 ; recording  xx
211        #:delete-sql-stream                ; recording  xx
212        #:list-sql-streams                 ; recording  xx
213        #:sql-recording-p                  ; recording  xx
214        #:sql-stream                       ; recording  xx
215        #:start-sql-recording              ; recording  xx
216        #:stop-sql-recording               ; recording  xx
217        
218        ;; Transactions
219        #:with-transaction
220        #:commit-transaction
221        #:rollback-transaction
222        #:add-transaction-commit-hook
223        #:add-transaction-rollback-hook
224        #:commit                            ; transact   xx
225        #:rollback                         ; transact   xx
226        #:with-transaction                 ; transact   xx               .
227        #:start-transaction                 ; transact   xx
228        #:in-transaction-p                  ; transact   xx
229        #:database-start-transaction
230        #:database-abort-transaction
231        #:database-commit-transaction
232        #:transaction-level
233        #:transaction
234        
235        ;; Database capabilities
236        #:db-type-use-column-on-drop-index?
237        #:db-backend-has-create/destroy-db?
238        #:db-type-has-views?
239        #:db-type-has-subqueries?
240        #:db-type-has-boolean-where?
241        #:db-type-transaction-capable?
242        #:db-type-has-fancy-math?
243        #:db-type-default-case
244        #:convert-to-db-default-case
245        #:database-underlying-type
246        ))
247    (:export
248     ;; "Private" exports for use by interface packages
249     #:check-connection-spec
250     #:database-initialize-database-type
251     #:database-type-load-foreign
252     #:database-name-from-spec
253     #:database-connect
254     #:database-query
255     #:database-execute-command
256     #:database-create-sequence
257     #:database-drop-sequence
258     #:database-sequence-next
259     #:database-set-sequence-position
260     #:database-query-result-set
261     #:database-dump-result-set
262     #:database-store-next-row
263     #:database-get-type-specifier
264     #:database-list-tables
265     #:database-table-exists-p
266     #:database-list-views
267     #:database-view-exists-p
268     #:database-list-indexes
269     #:database-list-table-indexes
270     #:database-index-exists-p
271     #:database-list-sequences
272     #:database-sequence-exists-p
273     #:database-list-attributes
274     #:database-attribute-type
275     #:database-describe-table
276
277     #:db-backend-has-create/destroy-db?
278     #:db-type-has-views?
279     #:db-type-has-subqueries?
280     #:db-type-has-boolean-where?
281     #:db-type-transaction-capable?
282     #:db-type-has-fancy-math?
283     #:db-type-default-case
284     #:database-underlying-type
285    
286    .
287    ;; Shared exports for re-export by CLSQL. 
288    ;; I = Implemented, D = Documented
289    ;;  name                                 file       ID
290    ;;====================================================
291    #2=(;;------------------------------------------------
292        ;; CommonSQL API 
293        ;;------------------------------------------------
294       ;;FDML 
295        #:select                            ; objects    xx
296        #:cache-table-queries               ; 
297        #:*cache-table-queries-default*     ; 
298        #:delete-records                    ; sql               xx
299        #:insert-records                    ; sql        xx
300        #:update-records                    ; sql               xx
301        #:execute-command                          ; sql        xx
302        #:query                             ; sql        xx
303        #:print-query                      ; sql        xx
304        #:do-query                         ; sql        xx
305        #:map-query                        ; sql        xx
306        #:loop                             ; loop-ext   x
307        ;;FDDL
308        #:create-table                     ; table      xx
309        #:drop-table                       ; table      xx
310        #:list-tables                      ; table      xx
311        #:table-exists-p                    ; table      xx 
312        #:list-attributes                          ; table      xx
313        #:attribute-type                    ; table      xx
314        #:list-attribute-types              ; table      xx
315        #:create-view                      ; table      xx
316        #:drop-view                        ; table      xx
317        #:create-index                     ; table      xx               
318        #:drop-index                       ; table      xx               
319        #:truncate-database
320        ;;OODDL
321        #:standard-db-object               ; objects    xx
322        #:def-view-class                    ; objects    xx
323        #:create-view-from-class            ; objects    xx
324        #:drop-view-from-class             ; objects    xx
325        ;;OODML
326        #:instance-refreshed                ;
327        #:update-object-joins               ;
328        #:*default-update-objects-max-len*  ; 
329        #:update-slot-from-record           ; objects    xx
330        #:update-instance-from-records      ; objects    xx
331        #:update-records-from-instance     ; objects    xx
332        #:update-record-from-slot                  ; objects    xx
333        #:update-record-from-slots         ; objects    xx
334        #:list-classes                     ; objects    xx
335        #:delete-instance-records                  ; objects    xx
336        ;;Symbolic SQL Syntax 
337        #:sql                              ; syntax     xx
338        #:sql-expression                    ; syntax     xx
339        #:sql-operation                     ; syntax     xx
340        #:sql-operator                     ; syntax     xx       
341        #:disable-sql-reader-syntax         ; syntax     xx
342        #:enable-sql-reader-syntax          ; syntax     xx
343        #:locally-disable-sql-reader-syntax ; syntax     xx
344        #:locally-enable-sql-reader-syntax  ; syntax     xx
345        #:restore-sql-reader-syntax-state   ; syntax     xx
346
347        ;;------------------------------------------------
348        ;; Miscellaneous Extensions
349        ;;------------------------------------------------
350        ;;Initialization
351        #:*loaded-database-types*           ; clsql-base xx
352        #:reload-database-types             ; clsql-base xx
353        #:database-type                     ; database   x
354        #:is-database-open
355        ;;FDDL 
356        #:list-views                        ; table      xx
357        #:view-exists-p                     ; table      xx
358        #:list-indexes                      ; table      xx
359        #:list-table-indexes                ; table      xx
360        #:index-exists-p                    ; table      xx
361        #:create-sequence                   ; table      xx
362        #:drop-sequence                     ; table      xx
363        #:list-sequences                    ; table      xx
364        #:sequence-exists-p                 ; table      xx
365        #:sequence-next                     ; table      xx
366        #:sequence-last                     ; table      xx
367        #:set-sequence-position             ; table      xx
368        ;;OODDL
369        #:view-table                        ; metaclass  x
370        #:create-sequence-from-class        ; objects    x
371        #:drop-sequence-from-class          ; objects    x       
372        ;;OODML
373        #:add-to-relation                   ; objects    x
374        #:remove-from-relation              ; objects    x
375        #:read-sql-value                    ; objects    x
376        #:database-output-sql-as-type       ; objects    x
377        #:database-get-type-specifier       ; objects    x
378        #:database-output-sql               ; sql/class  xx
379
380        ;;-----------------------------------------------
381        ;; Symbolic Sql Syntax 
382        ;;-----------------------------------------------
383        #:sql-and-qualifier
384        #:sql-escape
385        #:sql-query
386        #:sql-any
387        #:sql-all
388        #:sql-not
389        #:sql-union
390        #:sql-intersection
391        #:sql-minus
392        #:sql-group-by
393        #:sql-having
394        #:sql-null
395        #:sql-not-null
396        #:sql-exists
397        #:sql-*
398        #:sql-+
399        #:sql-/
400        #:sql-like
401        #:sql-uplike
402        #:sql-and
403        #:sql-or
404        #:sql-in
405        #:sql-||
406        #:sql-is
407        #:sql-=
408        #:sql-==
409        #:sql-<
410        #:sql->
411        #:sql->=
412        #:sql-<=
413        #:sql-count
414        #:sql-max
415        #:sql-min
416        #:sql-avg
417        #:sql-sum
418        #:sql-view-class
419        #:sql_slot-value
420
421        . 
422        #1#
423        ))
424   (:documentation "This is the INTERNAL SQL-Interface package of CLSQL."))
425
426
427 ;; see http://thread.gmane.org/gmane.lisp.lispworks.general/681
428 #+lispworks
429 (setf *packages-for-warn-on-redefinition* 
430       (delete "SQL" *packages-for-warn-on-redefinition* :test 'string=))
431
432 (defpackage #:clsql
433   (:use #:common-lisp)
434   (:import-from #:clsql-sys . #2#)
435   (:export . #2#)
436   (:documentation "This is the SQL-Interface package of CLSQL."))
437
438 (defpackage #:clsql-user
439   (:use #:common-lisp)
440   (:import-from #:clsql-sys . #2#)
441   (:export . #2#)
442   (:documentation "This is the user package with CLSQL symbols."))
443
444   ;; This is from USQL's pcl-patch  
445   #+(or clsql-sbcl-pcl clsql-cmucl-pcl)
446   (progn
447     ;; Note that this will no longer required for cmucl as of version 19a. 
448     (in-package #+cmu :pcl #+sbcl :sb-pcl)
449     (defmacro pv-binding1 ((pv calls pv-table-symbol pv-parameters slot-vars) 
450                            &body body)
451       `(pv-env (,pv ,calls ,pv-table-symbol ,pv-parameters)
452         (let (,@(mapcar #'(lambda (slot-var p) `(,slot-var (get-slots-or-nil ,p)))
453                         slot-vars pv-parameters))
454           ,@(mapcar #'(lambda (slot-var) `(declare (ignorable ,slot-var))) slot-vars)
455           ,@body))))
456   
457   
458   #+sbcl
459   (if (find-package 'sb-mop)
460       (setq cl:*features* (delete :clsql-sbcl-mop cl:*features*))
461       (setq cl:*features* (delete :clsql-sbcl-pcl cl:*features*)))
462   
463   #+cmu
464   (if (find-package 'mop)
465       (setq cl:*features* (delete :clsql-cmucl-mop cl:*features*))
466       (setq cl:*features* (delete :clsql-cmucl-pcl cl:*features*)))
467   
468 );eval-when                                      
469
470