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