f196f5bd7ce46ec0d33683cffd834082ad033b22
[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-list-tables
118      #:database-list-tables-and-sequences
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-bigint?
140      #:db-type-has-union?
141      #:db-type-has-subqueries?
142      #:db-type-has-boolean-where?
143      #:db-type-transaction-capable?
144      #:db-type-has-fancy-math?
145      #:db-type-default-case
146      #:db-type-use-column-on-drop-index? 
147      #:database-underlying-type
148      #:database-get-type-specifier
149      #:read-sql-value
150      #:database-output-sql-as-type
151
152      ;; Large objects 
153      #:database-create-large-object
154      #:database-write-large-object
155      #:database-read-large-object
156      #:database-delete-large-object
157      #:create-large-object
158      #:write-large-object
159      #:read-large-object
160      #:delete-large-object
161
162      ;; accessors for database class
163      #:name
164      #:connection-spec
165      #:transaction
166      #:transaction-level
167      #:conn-pool
168      #:command-recording-stream
169      #:result-recording-stream
170      #:record-caches
171      #:view-classes
172      #:database-type
173      #:database-state
174      #:attribute-cache
175    
176      ;; utils.lisp
177      #:without-interrupts
178      #:make-process-lock
179      #:with-process-lock
180      #:command-output
181      #:symbol-name-default-case
182      #:convert-to-db-default-case
183      #:ensure-keyword
184      #:getenv
185      
186      #:*loaded-database-types*
187      #:reload-database-types
188      #:*connect-if-exists*
189      #:connected-databases
190      #:database
191      #:find-database
192      #:is-database-open
193      #:database-type                     ; database   x
194
195      ;; utils.lisp
196      #:number-to-sql-string
197      #:float-to-sql-string
198      #:sql-escape-quotes
199      #:in
200
201      ;; Generic backends
202      #:generic-postgresql-database
203      #:generic-odbc-database
204      
205      .
206      ;; Shared exports for re-export by CLSQL package. 
207      ;; I = Implemented, D = Documented
208      ;;  name                                 file       ID
209      ;;====================================================
210      #1=(;;------------------------------------------------
211          ;; CommonSQL API 
212          ;;------------------------------------------------
213          ;;FDML 
214          #:select                            ; objects    xx
215          #:cache-table-queries               ; 
216          #:*cache-table-queries-default*     ; 
217          #:delete-records                    ; sql        xx
218          #:insert-records                    ; sql        xx
219          #:update-records                    ; sql        xx
220          #:execute-command                   ; sql        xx
221          #:query                             ; sql        xx
222          #:print-query                       ; sql        xx
223          #:do-query                          ; sql        xx
224          #:map-query                         ; sql        xx
225          #:for-each-row
226          #:loop
227
228          ;; conditions
229          #:sql-user-error
230          #:sql-database-error
231          #:sql-database-data-error
232          #:sql-connection-error
233          #:sql-temporary-error
234          #:sql-error-error-id
235          #:sql-error-secondary-error-id
236          #:sql-error-database-message
237
238          ;; CLSQL Extensions
239          #:sql-condition
240          #:sql-error
241          #:sql-warning
242          #:sql-database-warning
243          
244          ;;FDDL
245          #:create-table                      ; table      xx
246          #:drop-table                        ; table      xx
247          #:list-tables                       ; table      xx
248          #:table-exists-p                    ; table      xx 
249          #:list-attributes                   ; table      xx
250          #:attribute-type                    ; table      xx
251          #:list-attribute-types              ; table      xx
252          #:*cache-table-queries-default*     ; table      xx 
253          #:create-view                       ; table      xx
254          #:drop-view                         ; table      xx
255          #:create-index                      ; table      xx            
256          #:drop-index                        ; table      xx            
257          #:truncate-database
258          ;;OODDL
259          #:standard-db-object                ; objects    xx
260          #:def-view-class                    ; objects    xx
261          #:create-view-from-class            ; objects    xx
262          #:drop-view-from-class              ; objects    xx
263          ;;OODML
264          #:instance-refreshed                ; objects    xx 
265          #:update-objects-joins              ; objects    xx
266          #:*default-update-objects-max-len*  ; objects    xx
267          #:update-slot-from-record           ; objects    xx
268          #:update-instance-from-records      ; objects    xx
269          #:update-records-from-instance      ; objects    xx
270          #:update-record-from-slot           ; objects    xx
271          #:update-record-from-slots          ; objects    xx
272          #:list-classes                      ; objects    xx
273          #:delete-instance-records           ; objects    xx
274          ;;Symbolic SQL Syntax 
275          #:sql                               ; syntax     xx
276          #:sql-expression                    ; syntax     xx
277          #:sql-operation                     ; syntax     xx
278          #:sql-operator                      ; syntax     xx    
279          #:disable-sql-reader-syntax         ; syntax     xx
280          #:enable-sql-reader-syntax          ; syntax     xx
281          #:locally-disable-sql-reader-syntax ; syntax     xx
282          #:locally-enable-sql-reader-syntax  ; syntax     xx
283          #:restore-sql-reader-syntax-state   ; syntax     xx
284          
285          ;;FDDL 
286          #:list-views                        ; table      xx
287          #:view-exists-p                     ; table      xx
288          #:list-indexes                      ; table      xx
289          #:list-table-indexes                ; table      xx
290          #:index-exists-p                    ; table      xx
291          #:create-sequence                   ; table      xx
292          #:drop-sequence                     ; table      xx
293          #:list-sequences                    ; table      xx
294          #:sequence-exists-p                 ; table      xx
295          #:sequence-next                     ; table      xx
296          #:sequence-last                     ; table      xx
297          #:set-sequence-position             ; table      xx
298          ;;OODDL
299          #:view-table                        ; metaclass  x
300          #:universal-time                    ; objects    xx 
301          #:bigint
302          ;;OODML
303          #:*db-auto-sync*                    ; objects    xx              
304          
305          ;; conditions
306          #:clsql-condition
307          #:clsql-error
308          #:clsql-simple-error
309          #:clsql-simple-warning
310          
311          ;;-----------------------------------------------
312          ;; Symbolic Sql Syntax 
313          ;;-----------------------------------------------
314          #:sql-and-qualifier
315          #:sql-escape
316          #:sql-query
317          #:sql-object-query
318          #:sql-any
319          #:sql-all
320          #:sql-not
321          #:sql-union
322          #:sql-intersection
323          #:sql-minus
324          #:sql-group-by
325          #:sql-having
326          #:sql-null
327          #:sql-not-null
328          #:sql-exists
329          #:sql-*
330          #:sql-+
331          #:sql-/
332          #:sql-like
333          #:sql-uplike
334          #:sql-and
335          #:sql-or
336          #:sql-in
337          #:sql-||
338          #:sql-is
339          #:sql-=
340          #:sql-==
341          #:sql-<
342        #:sql->
343        #:sql->=
344        #:sql-<=
345        #:sql-count
346        #:sql-max
347        #:sql-min
348        #:sql-avg
349        #:sql-sum
350        #:sql-view-class
351        #:sql_slot-value
352
353
354
355        ;; time.lisp
356        #:bad-component
357        #:current-day
358      #:current-month
359      #:current-year
360      #:day-duration
361      #:db-timestring
362      #:decode-duration
363      #:decode-time
364      #:duration
365      #:duration+
366      #:duration<
367      #:duration<=
368      #:duration=
369      #:duration>
370      #:duration>=
371      #:duration-day
372      #:duration-hour
373      #:duration-minute
374      #:duration-month
375      #:duration-second
376      #:duration-year
377      #:duration-reduce 
378      #:duration-timestring
379      #:extract-roman 
380      #:format-duration
381      #:format-time
382      #:get-time
383      #:utime->time
384      #:interval-clear
385      #:interval-contained
386      #:interval-data
387      #:interval-edit
388      #:interval-end
389      #:interval-match
390      #:interval-push
391      #:interval-relation
392      #:interval-start
393      #:interval-type
394      #:make-duration
395      #:make-interval
396      #:make-time
397      #:merged-time
398      #:midnight
399      #:month-name
400      #:parse-date-time
401      #:parse-timestring
402      #:parse-yearstring
403      #:print-date
404      #:roll
405      #:roll-to
406      #:time
407      #:time+
408      #:time-
409      #:time-by-adding-duration
410      #:time-compare
411      #:time-difference
412      #:time-dow
413      #:time-element
414      #:time-max
415      #:time-min
416      #:time-mjd
417      #:time-msec
418      #:time-p
419      #:time-sec
420      #:time-well-formed
421      #:time-ymd
422      #:time<
423      #:time<=
424      #:time=
425      #:time>
426      #:time>=
427      #:timezone
428      #:universal-time
429      #:wall-time
430      #:wall-timestring
431      #:week-containing
432      #:gregorian-to-mjd
433      #:mjd-to-gregorian
434
435      ;; recording.lisp -- SQL I/O Recording 
436      #:record-sql-command
437      #:record-sql-result
438      #:add-sql-stream                 ; recording  xx
439      #:delete-sql-stream                  ; recording  xx
440      #:list-sql-streams           ; recording  xx
441      #:sql-recording-p            ; recording  xx
442      #:sql-stream                         ; recording  xx
443      #:start-sql-recording                ; recording  xx
444      #:stop-sql-recording                 ; recording  xx
445
446      ;; database.lisp -- Connection
447      #:*default-database-type*            ; clsql-base xx
448      #:*default-database*                 ; classes    xx
449      #:*initialized-database-types*
450      #:initialize-database-type
451      #:connect                            ; database   xx
452      #:disconnect                         ; database   xx
453      #:*connect-if-exists*                ; database   xx
454      #:connected-databases                ; database   xx
455      #:database                   ; database   xx
456      #:database-name                     ; database   xx
457      #:reconnect                         ; database
458      #:find-database                     ; database   xx
459      #:status                            ; database   xx
460      #:with-database
461      #:with-default-database
462      #:disconnect-pooled
463      #:create-database
464      #:destroy-database
465      #:probe-database
466      #:list-databases
467      
468      #:describe-table
469      #:*backend-warning-behavior*
470      
471      ;; Transactions
472      #:with-transaction
473      #:commit-transaction
474      #:rollback-transaction
475      #:add-transaction-commit-hook
476      #:add-transaction-rollback-hook
477      #:commit                            ; transact   xx
478      #:rollback                   ; transact   xx
479      #:with-transaction           ; transact   xx               .
480      #:start-transaction                 ; transact   xx
481      #:in-transaction-p                  ; transact   xx
482      #:database-start-transaction
483      #:database-abort-transaction
484      #:database-commit-transaction
485      #:transaction-level
486      #:transaction
487        ))
488   (:documentation "This is the INTERNAL SQL-Interface package of CLSQL."))
489
490
491 (defpackage #:clsql
492   (:use #:common-lisp)
493   (:import-from #:clsql-sys . #1#)
494   (:export . #1#)
495   (:documentation "This is the user package with CLSQL symbols."))
496
497 (defpackage #:clsql-user
498   (:use #:common-lisp)
499   (:import-from #:clsql-sys . #1#)
500   (:export . #1#)
501   (:documentation "This is the user package with CLSQL symbols."))
502
503   ;; This is from USQL's pcl-patch  
504   #+(or clsql-sbcl-pcl clsql-cmucl-pcl)
505   (progn
506     ;; Note that this will no longer required for cmucl as of version 19a. 
507     (in-package #+cmu :pcl #+sbcl :sb-pcl)
508     (defmacro pv-binding1 ((pv calls pv-table-symbol pv-parameters slot-vars) 
509                            &body body)
510       `(pv-env (,pv ,calls ,pv-table-symbol ,pv-parameters)
511         (let (,@(mapcar #'(lambda (slot-var p) `(,slot-var (get-slots-or-nil ,p)))
512                         slot-vars pv-parameters))
513           ,@(mapcar #'(lambda (slot-var) `(declare (ignorable ,slot-var))) slot-vars)
514           ,@body))))
515
516 ;; see http://thread.gmane.org/gmane.lisp.lispworks.general/681
517 #+lispworks
518 (setf *packages-for-warn-on-redefinition* 
519       (delete "SQL" *packages-for-warn-on-redefinition* :test 'string=))
520
521   #+sbcl
522   (if (find-package 'sb-mop)
523       (setq cl:*features* (delete :clsql-sbcl-mop cl:*features*))
524       (setq cl:*features* (delete :clsql-sbcl-pcl cl:*features*)))
525   
526   #+cmu
527   (if (find-package 'mop)
528       (setq cl:*features* (delete :clsql-cmucl-mop cl:*features*))
529       (setq cl:*features* (delete :clsql-cmucl-pcl cl:*features*)))
530
531 ) ;eval-when                                      
532