r9370: * sql/db-interface.lisp: Add new db-type-has-union?
[clsql.git] / sql / package.lisp
1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name:          package.lisp
6 ;;;; Purpose:       Package definition for SQL interface
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 ;;;; This file makes the required package definitions for CLSQL's
18 ;;;; core packages.
19
20 (eval-when (:compile-toplevel :load-toplevel :execute)
21   #+sbcl
22   (if (find-package 'sb-mop)
23       (pushnew :clsql-sbcl-mop cl:*features*)
24       (pushnew :clsql-sbcl-pcl cl:*features*))
25   
26   #+cmu
27   (if (eq (symbol-package 'pcl:find-class)
28           (find-package 'common-lisp))
29       (pushnew :clsql-cmucl-mop cl:*features*)
30       (pushnew :clsql-cmucl-pcl cl:*features*)))
31
32
33 (eval-when (:compile-toplevel :load-toplevel :execute)
34   (defpackage #:clsql-sys
35     (:use #:common-lisp
36           #+clsql-sbcl-mop #:sb-mop
37           #+clsql-cmucl-mop #:mop
38           #+allegro #:mop
39           #+lispworks #:clos
40           #+scl #:clos
41           #+openmcl #:openmcl-mop)
42     
43     #+allegro
44     (:shadowing-import-from 
45      #:excl)
46     #+lispworks
47     (:shadowing-import-from 
48      #:clos)
49     #+clsql-sbcl-mop 
50     (:shadowing-import-from 
51      #:sb-pcl
52      #:generic-function-lambda-list)
53     #+clsql-sbcl-pcl
54     (:shadowing-import-from 
55      #:sb-pcl
56      #:name
57      #:class-direct-slots
58      #:class-of #:class-name #:class-slots #:find-class
59      #:slot-boundp
60      #:standard-class
61      #:slot-definition-name #:finalize-inheritance
62      #:standard-direct-slot-definition
63      #:standard-effective-slot-definition #:validate-superclass
64      #:direct-slot-definition-class #:compute-effective-slot-definition
65      #:effective-slot-definition-class
66      #:slot-value-using-class
67      #:class-prototype #:generic-function-method-class #:intern-eql-specializer
68      #:make-method-lambda #:generic-function-lambda-list
69      #:class-precedence-list #:slot-definition-type
70      #:class-direct-superclasses
71      #:compute-class-precedence-list)
72     #+clsql-cmucl-mop 
73     (:shadowing-import-from 
74      #:pcl
75      #:generic-function-lambda-list)
76     #+clsql-cmucl-pcl
77     (:shadowing-import-from 
78      #:pcl
79      #:class-direct-slots
80      #:name
81      #:class-of  #:class-name #:class-slots #:find-class #:standard-class
82      #:slot-boundp
83      #:slot-definition-name #:finalize-inheritance
84      #:standard-direct-slot-definition #:standard-effective-slot-definition
85      #:validate-superclass #:direct-slot-definition-class
86      #:effective-slot-definition-class
87      #:compute-effective-slot-definition
88      #:slot-value-using-class
89      #:class-prototype #:generic-function-method-class #:intern-eql-specializer
90      #:make-method-lambda #:generic-function-lambda-list
91      #:class-precedence-list #:slot-definition-type
92      #:class-direct-superclasses
93      #:compute-class-precedence-list)
94     #+scl
95     (:shadowing-import-from 
96      #:clos
97      #:class-prototype  ;; note: make-method-lambda is not fbound
98      )
99     
100     (:export
101      ;; "Private" exports for use by interface packages
102      #:check-connection-spec
103      #:database-initialize-database-type
104      #:database-type-load-foreign
105      #:database-name-from-spec
106      #:database-connect
107      #:database-disconnect
108      #:database-query
109      #:database-execute-command
110      #:database-create-sequence
111      #:database-drop-sequence
112      #:database-sequence-next
113      #:database-set-sequence-position
114      #:database-query-result-set
115      #:database-dump-result-set
116      #:database-store-next-row
117      #:database-get-type-specifier
118      #:database-list-tables
119      #:database-table-exists-p
120      #:database-list-views
121      #:database-view-exists-p
122      #:database-list-indexes
123      #:database-list-table-indexes
124      #:database-index-exists-p
125      #:database-list-sequences
126      #:database-sequence-last
127      #:database-sequence-exists-p
128      #:database-list-attributes
129      #:database-attribute-type
130      #:database-describe-table
131      #:database-type-library-loaded
132      #:database-create
133      #:database-destroy
134      #:database-probe
135      #:database-list
136      
137      #:db-backend-has-create/destroy-db?
138      #:db-type-has-views?
139      #:db-type-has-union?
140      #:db-type-has-subqueries?
141      #:db-type-has-boolean-where?
142      #:db-type-transaction-capable?
143      #:db-type-has-fancy-math?
144      #:db-type-default-case
145      #:db-type-use-column-on-drop-index? 
146      #:database-underlying-type
147
148      ;; Large objects 
149      #:database-create-large-object
150      #:database-write-large-object
151      #:database-read-large-object
152      #:database-delete-large-object
153      #:create-large-object
154      #:write-large-object
155      #:read-large-object
156      #:delete-large-object
157
158      ;; accessors for database class
159      #:name
160      #:connection-spec
161      #:transaction
162      #:transaction-level
163      #:conn-pool
164      #:command-recording-stream
165      #:result-recording-stream
166      #:record-caches
167      #:view-classes
168      #:database-type
169      #:database-state
170      #:attribute-cache
171      
172
173      ;; utils.lisp
174      #:without-interrupts
175      #:make-process-lock
176      #:with-process-lock
177      #:command-output
178      #:symbol-name-default-case
179      #:convert-to-db-default-case
180      #:ensure-keyword
181
182      
183      #:clsql-invalid-spec-error
184      #:clsql-invalid-spec-error-connection-spec
185      #:clsql-invalid-spec-error-database-type
186      #:clsql-invalid-spec-error-template
187      #:clsql-access-error
188      #:clsql-access-error-database-type
189      #:clsql-access-error-connection-spec
190      #:clsql-access-error-error
191      #:clsql-connect-error
192      #:clsql-connect-error-errno
193      #:clsql-sql-error
194      #:clsql-sql-error-database
195      #:clsql-sql-error-expression
196      #:clsql-sql-error-errno
197      #:clsql-sql-error-error
198      #:clsql-database-warning
199      #:clsql-database-warning-database
200      #:clsql-database-warning-message
201      #:clsql-exists-condition
202      #:clsql-exists-condition-new-db
203      #:clsql-exists-condition-old-db
204      #:clsql-exists-warning
205      #:clsql-exists-error
206      #:clsql-closed-error
207      #:clsql-closed-error-database
208      #:clsql-sql-syntax-error
209      #:clsql-type-error
210      #:clsql-odbc-error
211      #:clsql-odbc-error-message
212      
213      #:*loaded-database-types*
214      #:reload-database-types
215      #:*initialized-database-types*
216      #:initialize-database-type
217      #:*connect-if-exists*
218      #:*default-database*
219      #:connected-databases
220      #:database
221      #:find-database
222      #:is-database-open
223      #:database-type                     ; database   x
224
225      ;; utils.lisp
226      #:number-to-sql-string
227      #:float-to-sql-string
228      #:sql-escape-quotes
229      #:in
230      
231      .
232      ;; Shared exports for re-export by CLSQL package. 
233      ;; I = Implemented, D = Documented
234      ;;  name                                 file       ID
235      ;;====================================================
236      #1=(;;------------------------------------------------
237          ;; CommonSQL API 
238          ;;------------------------------------------------
239          ;;FDML 
240        #:select                            ; objects    xx
241        #:cache-table-queries               ; 
242        #:*cache-table-queries-default*     ; 
243        #:delete-records                    ; sql        xx
244        #:insert-records                    ; sql        xx
245        #:update-records                    ; sql        xx
246        #:execute-command                   ; sql        xx
247        #:query                             ; sql        xx
248        #:print-query                       ; sql        xx
249        #:do-query                          ; sql        xx
250        #:map-query                         ; sql        xx
251        #:for-each-row
252        #:loop
253
254        ;;FDDL
255        #:create-table                      ; table      xx
256        #:drop-table                        ; table      xx
257        #:list-tables                       ; table      xx
258        #:table-exists-p                    ; table      xx 
259        #:list-attributes                   ; table      xx
260        #:attribute-type                    ; table      xx
261        #:list-attribute-types              ; table      xx
262        #:*cache-table-queries-default*
263        #:create-view                       ; table      xx
264        #:drop-view                         ; table      xx
265        #:create-index                      ; table      xx              
266        #:drop-index                        ; table      xx              
267        #:truncate-database
268        ;;OODDL
269        #:standard-db-object                ; objects    xx
270        #:def-view-class                    ; objects    xx
271        #:create-view-from-class            ; objects    xx
272        #:drop-view-from-class              ; objects    xx
273        ;;OODML
274        #:instance-refreshed                ; objects    xx 
275        #:update-object-joins               ;
276        #:*default-update-objects-max-len*  ; 
277        #:update-slot-from-record           ; objects    xx
278        #:update-instance-from-records      ; objects    xx
279        #:update-records-from-instance      ; objects    xx
280        #:update-record-from-slot           ; objects    xx
281        #:update-record-from-slots          ; objects    xx
282        #:list-classes                      ; objects    xx
283        #:delete-instance-records           ; objects    xx
284        ;;Symbolic SQL Syntax 
285        #:sql                               ; syntax     xx
286        #:sql-expression                    ; syntax     xx
287        #:sql-operation                     ; syntax     xx
288        #:sql-operator                      ; syntax     xx      
289        #:disable-sql-reader-syntax         ; syntax     xx
290        #:enable-sql-reader-syntax          ; syntax     xx
291        #:locally-disable-sql-reader-syntax ; syntax     xx
292        #:locally-enable-sql-reader-syntax  ; syntax     xx
293        #:restore-sql-reader-syntax-state   ; syntax     xx
294
295        ;;FDDL 
296        #:list-views                        ; table      xx
297        #:view-exists-p                     ; table      xx
298        #:list-indexes                      ; table      xx
299        #:list-table-indexes                ; table      xx
300        #:index-exists-p                    ; table      xx
301        #:create-sequence                   ; table      xx
302        #:drop-sequence                     ; table      xx
303        #:list-sequences                    ; table      xx
304        #:sequence-exists-p                 ; table      xx
305        #:sequence-next                     ; table      xx
306        #:sequence-last                     ; table      xx
307        #:set-sequence-position             ; table      xx
308        ;;OODDL
309        #:view-table                        ; metaclass  x
310        #:universal-time                    ; objects    xx 
311        #:bigint
312        ;;OODML
313        #:*db-auto-sync*                    ; objects    xx              
314        #:add-to-relation                   ; objects    x
315        #:remove-from-relation              ; objects    x
316        #:read-sql-value                    ; objects    x
317        #:database-output-sql-as-type       ; objects    x
318        #:database-get-type-specifier       ; objects    x
319        #:database-output-sql               ; sql/class  xx
320
321        ;; conditions
322        #:clsql-condition
323        #:clsql-error
324        #:clsql-simple-error
325        #:clsql-warning
326        #:clsql-simple-warning
327
328        ;;-----------------------------------------------
329        ;; Symbolic Sql Syntax 
330        ;;-----------------------------------------------
331        #:sql-and-qualifier
332        #:sql-escape
333        #:sql-query
334        #:sql-object-query
335        #:sql-any
336        #:sql-all
337        #:sql-not
338        #:sql-union
339        #:sql-intersection
340        #:sql-minus
341        #:sql-group-by
342        #:sql-having
343        #:sql-null
344        #:sql-not-null
345        #:sql-exists
346        #:sql-*
347        #:sql-+
348        #:sql-/
349        #:sql-like
350        #:sql-uplike
351        #:sql-and
352        #:sql-or
353        #:sql-in
354        #:sql-||
355        #:sql-is
356        #:sql-=
357        #:sql-==
358        #:sql-<
359        #:sql->
360        #:sql->=
361        #:sql-<=
362        #:sql-count
363        #:sql-max
364        #:sql-min
365        #:sql-avg
366        #:sql-sum
367        #:sql-view-class
368        #:sql_slot-value
369
370
371
372        ;; time.lisp
373        #:bad-component
374        #:current-day
375      #:current-month
376      #:current-year
377      #:day-duration
378      #:db-timestring
379      #:decode-duration
380      #:decode-time
381      #:duration
382      #:duration+
383      #:duration<
384      #:duration<=
385      #:duration=
386      #:duration>
387      #:duration>=
388      #:duration-day
389      #:duration-hour
390      #:duration-minute
391      #:duration-month
392      #:duration-second
393      #:duration-year
394      #:duration-reduce 
395      #:duration-timestring
396      #:extract-roman 
397      #:format-duration
398      #:format-time
399      #:get-time
400      #:utime->time
401      #:interval-clear
402      #:interval-contained
403      #:interval-data
404      #:interval-edit
405      #:interval-end
406      #:interval-match
407      #:interval-push
408      #:interval-relation
409      #:interval-start
410      #:interval-type
411      #:make-duration
412      #:make-interval
413      #:make-time
414      #:merged-time
415      #:midnight
416      #:month-name
417      #:parse-date-time
418      #:parse-timestring
419      #:parse-yearstring
420      #:print-date
421      #:roll
422      #:roll-to
423      #:time
424      #:time+
425      #:time-
426      #:time-by-adding-duration
427      #:time-compare
428      #:time-difference
429      #:time-dow
430      #:time-element
431      #:time-max
432      #:time-min
433      #:time-mjd
434      #:time-msec
435      #:time-p
436      #:time-sec
437      #:time-well-formed
438      #:time-ymd
439      #:time<
440      #:time<=
441      #:time=
442      #:time>
443      #:time>=
444      #:timezone
445      #:universal-time
446      #:wall-time
447      #:wall-timestring
448      #:week-containing
449      #:gregorian-to-mjd
450      #:mjd-to-gregorian
451
452      ;; recording.lisp -- SQL I/O Recording 
453      #:record-sql-command
454      #:record-sql-result
455      #:add-sql-stream                 ; recording  xx
456      #:delete-sql-stream                  ; recording  xx
457      #:list-sql-streams           ; recording  xx
458      #:sql-recording-p            ; recording  xx
459      #:sql-stream                         ; recording  xx
460      #:start-sql-recording                ; recording  xx
461      #:stop-sql-recording                 ; recording  xx
462
463      ;; database.lisp -- Connection
464      #:*default-database-type*            ; clsql-base xx
465      #:*default-database*                 ; classes    xx
466      #:connect                            ; database   xx
467      #:*connect-if-exists*                ; database   xx
468      #:connected-databases                ; database   xx
469      #:database                   ; database   xx
470      #:database-name                     ; database   xx
471      #:disconnect                         ; database   xx
472      #:reconnect                         ; database
473      #:find-database                     ; database   xx
474      #:status                            ; database   xx
475      #:with-database
476      #:with-default-database
477      #:disconnect-pooled
478      #:create-database
479      #:destroy-database
480      #:probe-database
481      #:list-databases
482      
483      #:describe-table
484      #:*backend-warning-behavior*
485      
486      ;; Transactions
487      #:with-transaction
488      #:commit-transaction
489      #:rollback-transaction
490      #:add-transaction-commit-hook
491      #:add-transaction-rollback-hook
492      #:commit                            ; transact   xx
493      #:rollback                   ; transact   xx
494      #:with-transaction           ; transact   xx               .
495      #:start-transaction                 ; transact   xx
496      #:in-transaction-p                  ; transact   xx
497      #:database-start-transaction
498      #:database-abort-transaction
499      #:database-commit-transaction
500      #:transaction-level
501      #:transaction
502        ))
503   (:documentation "This is the INTERNAL SQL-Interface package of CLSQL."))
504
505
506 (defpackage #:clsql
507   (:use #:common-lisp)
508   (:import-from #:clsql-sys . #1#)
509   (:export . #1#)
510   (:documentation "This is the user package with CLSQL symbols."))
511
512 (defpackage #:clsql-user
513   (:use #:common-lisp)
514   (:import-from #:clsql-sys . #1#)
515   (:export . #1#)
516   (:documentation "This is the user package with CLSQL symbols."))
517
518   ;; This is from USQL's pcl-patch  
519   #+(or clsql-sbcl-pcl clsql-cmucl-pcl)
520   (progn
521     ;; Note that this will no longer required for cmucl as of version 19a. 
522     (in-package #+cmu :pcl #+sbcl :sb-pcl)
523     (defmacro pv-binding1 ((pv calls pv-table-symbol pv-parameters slot-vars) 
524                            &body body)
525       `(pv-env (,pv ,calls ,pv-table-symbol ,pv-parameters)
526         (let (,@(mapcar #'(lambda (slot-var p) `(,slot-var (get-slots-or-nil ,p)))
527                         slot-vars pv-parameters))
528           ,@(mapcar #'(lambda (slot-var) `(declare (ignorable ,slot-var))) slot-vars)
529           ,@body))))
530
531 ;; see http://thread.gmane.org/gmane.lisp.lispworks.general/681
532 #+lispworks
533 (setf *packages-for-warn-on-redefinition* 
534       (delete "SQL" *packages-for-warn-on-redefinition* :test 'string=))
535
536   #+sbcl
537   (if (find-package 'sb-mop)
538       (setq cl:*features* (delete :clsql-sbcl-mop cl:*features*))
539       (setq cl:*features* (delete :clsql-sbcl-pcl cl:*features*)))
540   
541   #+cmu
542   (if (find-package 'mop)
543       (setq cl:*features* (delete :clsql-cmucl-mop cl:*features*))
544       (setq cl:*features* (delete :clsql-cmucl-pcl cl:*features*)))
545
546 ) ;eval-when                                      
547